ETH Price: $2,523.19 (-0.05%)

Token

Dogepows (POW)
 

Overview

Max Total Supply

1,000,000,000 POW

Holders

157

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
chitchit.eth
Balance
0.956131145790259239 POW

Value
$0.00
0xce17cb7423f8cdebda42db6b535dd97b13138d8a
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:
Dogepows

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-22
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

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

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

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

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

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

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

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

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

contract Dogepows is ERC20, Ownable {
    address public doge;
    ///////////////////////////////////////////////////////////////////////////
    bool private inSwapAndLiquify;
    uint16 public sellLiquidityFee;
    uint16 public buyLiquidityFee;

    uint16 public sellMarketingFee;
    uint16 public buyMarketingFee;

    uint16 public sellBurnFee;
    uint16 public buyBurnFee;

    uint16 public sellBurnDogeFee;
    uint16 public buyBurnDogeFee;

    address public marketingWallet;

    uint256 public minAmountToTakeFee;
    uint256 public maxWallet;
    uint256 public maxTransactionAmount;

    IUniswapV2Router02 public mainRouter;
    address public mainPair;

    mapping(address => bool) public isExcludedFromMaxTransactionAmount;
    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint256 private _liquidityFeeTokens;
    uint256 private _marketingFeeTokens;
    uint256 private _burnFeeTokens;
    uint256 private _burnDogeFeeTokens;
    event UpdateLiquidityFee(
        uint16 newSellLiquidityFee,
        uint16 newBuyLiquidityFee,
        uint16 oldSellLiquidityFee,
        uint16 oldBuyLiquidityFee
    );
    event UpdateMarketingFee(
        uint16 newSellMarketingFee,
        uint16 newBuyMarketingFee,
        uint16 oldSellMarketingFee,
        uint16 oldBuyMarketingFee
    );
    event UpdateBurnFee(
        uint16 newSellBurnFee,
        uint16 newBuyBurnFee,
        uint16 oldSellBurnFee,
        uint16 oldBuyBurnFee
    );
    event UpdateBurnDogeFee(
        uint16 newSellBurnDogeFee,
        uint16 newBuyBurnDogeFee,
        uint16 oldSellBurnDogeFee,
        uint16 oldBuyBurnDogeFee
    );
    event UpdateMarketingWallet(
        address indexed newMarketingWallet,
        address indexed oldMarketingWallet
    );
    event ExcludedFromMaxTransactionAmount(
        address indexed account,
        bool isExcluded
    );
    event UpdateMinAmountToTakeFee(
        uint256 newMinAmountToTakeFee,
        uint256 oldMinAmountToTakeFee
    );
    event SetAutomatedMarketMakerPair(address indexed pair, bool value);
    event ExcludedFromFee(address indexed account, bool isEx);
    event SwapAndLiquify(uint256 tokensForLiquidity, uint256 ETHForLiquidity);
    event MarketingFeeTaken(uint256 marketingFeeTokens);
    event DogeBurnt(uint256 amount);
    event DogepowsBurnt(uint256 amount);
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldRouter
    );
    event UpdateMaxWallet(uint256 newMaxWallet, uint256 oldMaxWallet);
    event UpdateMaxTransactionAmount(
        uint256 newMaxTransactionAmount,
        uint256 oldMaxTransactionAmount
    );

    ///////////////////////////////////////////////////////////////////////////////

    constructor() ERC20("Dogepows", "POW") {
        uint256 _totalSupply = 1_000_000_000 ether;
        maxWallet = (_totalSupply * 1) / 100; // 1%
        
        maxTransactionAmount = (_totalSupply * 1) / 100; // 1%
        
        doge = 0x35a532d376FFd9a705d0Bb319532837337A398E7;
        marketingWallet = 0xAEfed5611dc6b1ad2b9969D2BecF50358092fF08;
        
        mainRouter = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        
        mainPair = IUniswapV2Factory(mainRouter.factory()).createPair(
            address(this),
            mainRouter.WETH()
        );

        sellLiquidityFee = 1;
        buyLiquidityFee = 1;
        
        sellMarketingFee = 7;
        buyMarketingFee = 3;
        
        sellBurnFee = 1;
        buyBurnFee = 1;
        
        sellBurnDogeFee = 1;
        buyBurnDogeFee = 1;
        
        minAmountToTakeFee = _totalSupply / 10000;
        
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[marketingWallet] = true;
        isExcludedFromFee[_msgSender()] = true;
        isExcludedFromFee[address(0xdead)] = true;
        isExcludedFromFee[0x460736a29b08A6E8113B30c35d621cb6042765EA] = true;
        isExcludedFromMaxTransactionAmount[0x460736a29b08A6E8113B30c35d621cb6042765EA] = true;
        isExcludedFromMaxTransactionAmount[address(0xdead)] = true;
        isExcludedFromMaxTransactionAmount[address(this)] = true;
        isExcludedFromMaxTransactionAmount[marketingWallet] = true;
        isExcludedFromMaxTransactionAmount[_msgSender()] = true;
        _setAutomatedMarketMakerPair(mainPair, true);

        _mint(msg.sender, _totalSupply);
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(mainRouter),
            "The router already has that address"
        );
        emit UpdateUniswapV2Router(newAddress, address(mainRouter));
        mainRouter = IUniswapV2Router02(newAddress);
        address _mainPair = IUniswapV2Factory(mainRouter.factory()).createPair(
            address(this),
            mainRouter.WETH()
        );
        mainPair = _mainPair;
        _setAutomatedMarketMakerPair(mainPair, true);
    }

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

    function updateLiquidityFee(
        uint16 _sellLiquidityFee,
        uint16 _buyLiquidityFee
    ) external onlyOwner {
        require(
            _sellLiquidityFee +
                sellMarketingFee +
                sellBurnFee +
                sellBurnDogeFee <=
                200,
            "sell fee <= 20%"
        );
        require(
            _buyLiquidityFee + buyMarketingFee + buyBurnFee + buyBurnDogeFee <=
                200,
            "buy fee <= 20%"
        );
        emit UpdateLiquidityFee(
            _sellLiquidityFee,
            _buyLiquidityFee,
            sellLiquidityFee,
            buyLiquidityFee
        );
        sellLiquidityFee = _sellLiquidityFee;
        buyLiquidityFee = _buyLiquidityFee;
    }

    function updateMaxWallet(uint256 _maxWallet) external onlyOwner {
        require(_maxWallet > 0, "maxWallet > 0");
        emit UpdateMaxWallet(_maxWallet, maxWallet);
        maxWallet = _maxWallet;
    }

    function updateMaxTransactionAmount(uint256 _maxTransactionAmount)
        external
        onlyOwner
    {
        require(_maxTransactionAmount > 0, "maxTransactionAmount > 0");
        emit UpdateMaxTransactionAmount(
            _maxTransactionAmount,
            maxTransactionAmount
        );
        maxTransactionAmount = _maxTransactionAmount;
    }

    function updateMarketingFee(
        uint16 _sellMarketingFee,
        uint16 _buyMarketingFee
    ) external onlyOwner {
        require(
            _sellMarketingFee +
                sellLiquidityFee +
                sellBurnFee +
                sellBurnDogeFee <=
                200,
            "sell fee <= 20%"
        );
        require(
            _buyMarketingFee + buyLiquidityFee + buyBurnFee + buyBurnDogeFee <=
                200,
            "buy fee <= 20%"
        );
        emit UpdateMarketingFee(
            _sellMarketingFee,
            _buyMarketingFee,
            sellMarketingFee,
            buyMarketingFee
        );
        sellMarketingFee = _sellMarketingFee;
        buyMarketingFee = _buyMarketingFee;
    }

    function updateMarketingWallet(address _marketingWallet)
        external
        onlyOwner
    {
        require(_marketingWallet != address(0), "marketing wallet can't be 0");
        emit UpdateMarketingWallet(_marketingWallet, marketingWallet);
        marketingWallet = _marketingWallet;
        isExcludedFromFee[_marketingWallet] = true;
        isExcludedFromMaxTransactionAmount[_marketingWallet] = true;
    }

    function updateBurnFee(uint16 _sellBurnFee, uint16 _buyBurnFee)
        external
        onlyOwner
    {
        require(
            _sellBurnFee +
                sellMarketingFee +
                sellLiquidityFee +
                sellBurnDogeFee <=
                200,
            "sell fee <= 20%"
        );
        require(
            _buyBurnFee + buyMarketingFee + buyLiquidityFee + buyBurnDogeFee <=
                200,
            "buy fee <= 20%"
        );
        emit UpdateBurnFee(_sellBurnFee, _buyBurnFee, sellBurnFee, buyBurnFee);
        sellBurnFee = _sellBurnFee;
        buyBurnFee = _buyBurnFee;
    }

    function updateBurnDogeFee(uint16 _sellBurnDogeFee, uint16 _buyBurnDogeFee)
        external
        onlyOwner
    {
        require(
            _sellBurnDogeFee +
                sellMarketingFee +
                sellBurnFee +
                sellLiquidityFee <=
                200,
            "sell fee <= 20%"
        );
        require(
            _buyBurnDogeFee + buyMarketingFee + buyBurnFee + buyLiquidityFee <=
                200,
            "buy fee <= 20%"
        );
        emit UpdateBurnDogeFee(
            _sellBurnDogeFee,
            _buyBurnDogeFee,
            sellBurnDogeFee,
            buyBurnDogeFee
        );
        sellBurnDogeFee = _sellBurnDogeFee;
        buyBurnDogeFee = _buyBurnDogeFee;
    }

    function updateMinAmountToTakeFee(uint256 _minAmountToTakeFee)
        external
        onlyOwner
    {
        require(_minAmountToTakeFee > 0, "minAmountToTakeFee > 0");
        emit UpdateMinAmountToTakeFee(_minAmountToTakeFee, minAmountToTakeFee);
        minAmountToTakeFee = _minAmountToTakeFee;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        isExcludedFromMaxTransactionAmount[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function excludeFromFee(address account, bool isEx) external onlyOwner {
        require(isExcludedFromFee[account] != isEx, "already");
        isExcludedFromFee[account] = isEx;
        emit ExcludedFromFee(account, isEx);
    }

    function excludeFromMaxTransactionAmount(address account, bool isEx)
        external
        onlyOwner
    {
        require(isExcludedFromMaxTransactionAmount[account] != isEx, "already");
        isExcludedFromMaxTransactionAmount[account] = isEx;
        emit ExcludedFromMaxTransactionAmount(account, isEx);
    }

    function withdrawStuckTokens(address tkn) external onlyOwner {
        require(tkn != address(this), "Cannot withdraw own token");
        bool success;
        if (tkn == address(0))
            (success, ) = address(msg.sender).call{
                value: address(this).balance
            }("");
        else {
            require(IERC20(tkn).balanceOf(address(this)) > 0);
            uint256 amount = IERC20(tkn).balanceOf(address(this));
            IERC20(tkn).transfer(msg.sender, amount);
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minAmountToTakeFee;

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

        uint256 _liquidityFee;
        uint256 _marketingFee;
        uint256 _burnFee;
        uint256 _burnDogeFee;
        // If any account belongs to isExcludedFromFee account then remove the fee

        if (
            !inSwapAndLiquify &&
            !isExcludedFromFee[from] &&
            !isExcludedFromFee[to]
        ) {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                _liquidityFee = (amount * (buyLiquidityFee)) / 1000;
                _marketingFee = (amount * (buyMarketingFee)) / 1000;
                _burnFee = (amount * (buyBurnFee)) / 1000;
                _burnDogeFee = (amount * (buyBurnDogeFee)) / 1000;
            }
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _liquidityFee = (amount * (sellLiquidityFee)) / 1000;
                _marketingFee = (amount * (sellMarketingFee)) / 1000;
                _burnFee = (amount * (sellBurnFee)) / 1000;
                _burnDogeFee = (amount * (sellBurnDogeFee)) / 1000;
            }
            uint256 _feeTotal = _liquidityFee +
                _marketingFee +
                _burnFee +
                _burnDogeFee;
            if (_feeTotal > 0) super._transfer(from, address(this), _feeTotal);
            amount = amount - _feeTotal;
            _liquidityFeeTokens = _liquidityFeeTokens + _liquidityFee;
            _marketingFeeTokens = _marketingFeeTokens + _marketingFee;
            _burnFeeTokens = _burnFeeTokens + _burnFee;
            _burnDogeFeeTokens = _burnDogeFeeTokens + _burnDogeFee;
        }
        super._transfer(from, to, amount);
        if (!inSwapAndLiquify) {
            if (!isExcludedFromMaxTransactionAmount[from]) {
                require(
                    amount < maxTransactionAmount,
                    "ERC20: exceeds transfer limit"
                );
            }
            if (!isExcludedFromMaxTransactionAmount[to]) {
                require(
                    balanceOf(to) < maxWallet,
                    "ERC20: exceeds max wallet limit"
                );
            }
        }
    }

    function takeFee() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensTaken = _liquidityFeeTokens +
            _marketingFeeTokens +
            _burnFeeTokens +
            _burnDogeFeeTokens;
        if (totalTokensTaken == 0 || contractBalance < totalTokensTaken) {
            return;
        }
        if (_burnFeeTokens > 0) {
            super._transfer(address(this), address(0xdead), _burnFeeTokens);
            emit DogepowsBurnt(_burnFeeTokens);
            _burnFeeTokens = 0;
        }
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = _liquidityFeeTokens / 2;
        uint256 initialETHBalance = address(this).balance;
        uint256 ETHForLiquidity;
        uint256 tokensForSwap = tokensForLiquidity + _marketingFeeTokens;
        if (tokensForSwap > 0) swapTokensForETH(tokensForSwap);
        uint256 ETHBalance = address(this).balance - initialETHBalance;
        uint256 ETHForMarketing = (ETHBalance * _marketingFeeTokens) /
            tokensForSwap;
        ETHForLiquidity = ETHBalance - ETHForMarketing;
        if (ETHForMarketing > 0) {
            (bool success, ) = address(marketingWallet).call{
                value: ETHForMarketing
            }("");
            if (success) {
                emit MarketingFeeTaken(ETHForMarketing);
            }
        }
        if (_burnDogeFeeTokens > 0) {
            buyBackAndBurnDoge(_burnDogeFeeTokens);
            emit DogeBurnt(_burnDogeFeeTokens);
            _burnDogeFeeTokens = 0;
        }

        if (tokensForLiquidity > 0 && ETHForLiquidity > 0) {
            addLiquidity(tokensForLiquidity, ETHForLiquidity);
            emit SwapAndLiquify(tokensForLiquidity, ETHForLiquidity);
        }
        _marketingFeeTokens = 0;
        _liquidityFeeTokens = 0;
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = mainRouter.WETH();
        _approve(address(this), address(mainRouter), tokenAmount);
        mainRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

    function buyBackAndBurnDoge(uint256 amount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = mainRouter.WETH();
        path[2] = doge;
        _approve(address(this), address(mainRouter), amount);
        mainRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            amount,
            0, // accept any amount of ETH
            path,
            address(0xdead),
            block.timestamp
        );
    }

    receive() external payable {}
}

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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DogeBurnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DogepowsBurnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isEx","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeTokens","type":"uint256"}],"name":"MarketingFeeTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHForLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellBurnDogeFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyBurnDogeFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellBurnDogeFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyBurnDogeFee","type":"uint16"}],"name":"UpdateBurnDogeFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellBurnFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyBurnFee","type":"uint16"}],"name":"UpdateBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellLiquidityFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyLiquidityFee","type":"uint16"}],"name":"UpdateLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newSellMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newBuyMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldSellMarketingFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"oldBuyMarketingFee","type":"uint16"}],"name":"UpdateMarketingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxTransactionAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxTransactionAmount","type":"uint256"}],"name":"UpdateMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxWallet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxWallet","type":"uint256"}],"name":"UpdateMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinAmountToTakeFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMinAmountToTakeFee","type":"uint256"}],"name":"UpdateMinAmountToTakeFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldRouter","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"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":"buyBurnDogeFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"doge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransactionAmount","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":"isExcludedFromMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToTakeFee","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":"sellBurnDogeFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFee","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellBurnDogeFee","type":"uint16"},{"internalType":"uint16","name":"_buyBurnDogeFee","type":"uint16"}],"name":"updateBurnDogeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellBurnFee","type":"uint16"},{"internalType":"uint16","name":"_buyBurnFee","type":"uint16"}],"name":"updateBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellLiquidityFee","type":"uint16"},{"internalType":"uint16","name":"_buyLiquidityFee","type":"uint16"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_sellMarketingFee","type":"uint16"},{"internalType":"uint16","name":"_buyMarketingFee","type":"uint16"}],"name":"updateMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minAmountToTakeFee","type":"uint256"}],"name":"updateMinAmountToTakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801562000010575f80fd5b5060405180604001604052806008815260200167446f6765706f777360c01b81525060405180604001604052806003815260200162504f5760e81b81525081600390816200005f919062000730565b5060046200006e828262000730565b5050506200008b620000856200046c60201b60201c565b62000470565b6b033b2e3c9fd0803ce80000006064620000a78260016200080c565b620000b391906200082c565b6009556064620000c58260016200080c565b620000d191906200082c565b600a55600680547335a532d376ffd9a705d0bb319532837337a398e76001600160a01b03199182161790915560078054600160301b600160d01b03191679aefed5611dc6b1ad2b9969d2becf50358092ff08000000000000179055600b8054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b8152905163c45a0155916004818101926020929091908290030181865afa15801562000185573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ab91906200084c565b6001600160a01b031663c9c6539630600b5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200023191906200084c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200027c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a291906200084c565b600c80546001600160a01b0319166001600160a01b039290921691909117905560068054600160a81b600160f81b0319167d0100030007000100010000000000000000000000000000000000000000001790556007805465ffffffffffff191664010001000117905562000319612710826200082c565b600855305f818152600e602090815260408083208054600160ff199182168117909255600780546001600160a01b036601000000000000918290048116885285882080548516861790553380895286892080548616871790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a80548616871790557f3c250fb8ae7c5a9b4fc4409763bbb5a23e265468ed9b222e08804bdd88470ff08054861687179055600d9097527fc4bbaca1245b1f6a1f8ddbada186f3ae8f0303cc15137e9f778f4cfa99750bec80548516861790557fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a805485168617905597875284872080548416851790559054048616855282852080548216831790559284529220805490911682179055600c5462000459921690620004c1565b620004653382620005cb565b5062000891565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152600f602052604090205481151560ff9091161515036200055c5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382165f818152600f60209081526040808320805486151560ff199182168117909255600d84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a25050565b6001600160a01b038216620006235760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000553565b8060025f8282546200063691906200087b565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620006ba57607f821691505b602082108103620006d957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200068c575f81815260208120601f850160051c81016020861015620007075750805b601f850160051c820191505b81811015620007285782815560010162000713565b505050505050565b81516001600160401b038111156200074c576200074c62000691565b62000764816200075d8454620006a5565b84620006df565b602080601f8311600181146200079a575f8415620007825750858301515b5f19600386901b1c1916600185901b17855562000728565b5f85815260208120601f198616915b82811015620007ca57888601518255948401946001909101908401620007a9565b5085821015620007e857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620008265762000826620007f8565b92915050565b5f826200084757634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156200085d575f80fd5b81516001600160a01b038116811462000874575f80fd5b9392505050565b80820180821115620008265762000826620007f8565b612bd8806200089f5f395ff3fe60806040526004361061026d575f3560e01c806395d89b411161014a578063cf089e13116100be578063e9481eee11610078578063e9481eee14610790578063f11a24d3146107be578063f2fde38b146107df578063f6374342146107fe578063f8b45b051461081f578063fc59d23d14610834575f80fd5b8063cf089e13146106db578063cf188ad0146106fa578063d68f8cde14610719578063dd62ed3e14610738578063df8408fe14610757578063e71dc3f514610776575f80fd5b8063aacebbe31161010f578063aacebbe314610618578063adb873bd14610637578063b62496f514610658578063c8c8ebe414610686578063cb426d0f1461069b578063cb963728146106bc575f80fd5b806395d89b41146105885780639a7a23d61461059c578063a457c2d7146105bb578063a9059cbb146105da578063aa498023146105f9575f80fd5b80635342acb4116101e157806373b9e82c116101a657806373b9e82c146104c557806375f0a874146104e45780637bce5a041461050a57806385af30c51461052b5780638da5cb5b1461054a5780639213691314610567575f80fd5b80635342acb4146103fd57806365b8dbc01461042b578063709752211461044a57806370a082311461047d578063715018a6146104b1575f80fd5b80632073bd85116102325780632073bd851461032f57806323b872dd1461034e5780632ae2f1211461036d578063313ce5671461038c57806334809ee7146103a757806339509351146103de575f80fd5b806306fdde0314610278578063095ea7b3146102a25780630b00ea64146102d157806318160ddd146102f25780631c499ab014610310575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028c610849565b604051610299919061274d565b60405180910390f35b3480156102ad575f80fd5b506102c16102bc3660046127ac565b6108d9565b6040519015158152602001610299565b3480156102dc575f80fd5b506102f06102eb3660046127ec565b6108f2565b005b3480156102fd575f80fd5b506002545b604051908152602001610299565b34801561031b575f80fd5b506102f061032a36600461281d565b610a5f565b34801561033a575f80fd5b506102f06103493660046127ec565b610ae8565b348015610359575f80fd5b506102c1610368366004612834565b610c4a565b348015610378575f80fd5b506102f061038736600461287f565b610c6d565b348015610397575f80fd5b5060405160128152602001610299565b3480156103b2575f80fd5b506006546103c6906001600160a01b031681565b6040516001600160a01b039091168152602001610299565b3480156103e9575f80fd5b506102c16103f83660046127ac565b610d2d565b348015610408575f80fd5b506102c16104173660046128b6565b600e6020525f908152604090205460ff1681565b348015610436575f80fd5b506102f06104453660046128b6565b610d4e565b348015610455575f80fd5b5060075461046a9062010000900461ffff1681565b60405161ffff9091168152602001610299565b348015610488575f80fd5b506103026104973660046128b6565b6001600160a01b03165f9081526020819052604090205490565b3480156104bc575f80fd5b506102f0610f98565b3480156104d0575f80fd5b506102f06104df36600461281d565b610fab565b3480156104ef575f80fd5b506007546103c690600160301b90046001600160a01b031681565b348015610515575f80fd5b5060065461046a90600160d81b900461ffff1681565b348015610536575f80fd5b50600c546103c6906001600160a01b031681565b348015610555575f80fd5b506005546001600160a01b03166103c6565b348015610572575f80fd5b5060065461046a90600160c81b900461ffff1681565b348015610593575f80fd5b5061028c61103d565b3480156105a7575f80fd5b506102f06105b636600461287f565b61104c565b3480156105c6575f80fd5b506102c16105d53660046127ac565b61105e565b3480156105e5575f80fd5b506102c16105f43660046127ac565b6110d8565b348015610604575f80fd5b506102f061061336600461281d565b6110e5565b348015610623575f80fd5b506102f06106323660046128b6565b61117e565b348015610642575f80fd5b5060065461046a90600160e81b900461ffff1681565b348015610663575f80fd5b506102c16106723660046128b6565b600f6020525f908152604090205460ff1681565b348015610691575f80fd5b50610302600a5481565b3480156106a6575f80fd5b5060075461046a90600160201b900461ffff1681565b3480156106c7575f80fd5b506102f06106d63660046128b6565b61127b565b3480156106e6575f80fd5b506102f06106f53660046127ec565b611483565b348015610705575f80fd5b50600b546103c6906001600160a01b031681565b348015610724575f80fd5b506102f06107333660046127ec565b6115ed565b348015610743575f80fd5b506103026107523660046128d8565b611757565b348015610762575f80fd5b506102f061077136600461287f565b611781565b348015610781575f80fd5b5060075461046a9061ffff1681565b34801561079b575f80fd5b506102c16107aa3660046128b6565b600d6020525f908152604090205460ff1681565b3480156107c9575f80fd5b5060065461046a90600160b81b900461ffff1681565b3480156107ea575f80fd5b506102f06107f93660046128b6565b611839565b348015610809575f80fd5b5060065461046a90600160a81b900461ffff1681565b34801561082a575f80fd5b5061030260095481565b34801561083f575f80fd5b5061030260085481565b60606003805461085890612904565b80601f016020809104026020016040519081016040528092919081815260200182805461088490612904565b80156108cf5780601f106108a6576101008083540402835291602001916108cf565b820191905f5260205f20905b8154815290600101906020018083116108b257829003601f168201915b5050505050905090565b5f336108e68185856118b2565b60019150505b92915050565b6108fa6119d5565b60065460c89061ffff600160a81b8204811691600160e81b810482169161092991600160c81b90041686612950565b6109339190612950565b61093d9190612950565b61ffff1611156109685760405162461bcd60e51b815260040161095f90612972565b60405180910390fd5b60065460075460c89161ffff600160b81b820481169281169161099491600160d81b9091041685612950565b61099e9190612950565b6109a89190612950565b61ffff1611156109ca5760405162461bcd60e51b815260040161095f9061299b565b6007546040805161ffff85811682528481166020830152620100008404811682840152600160201b9093049092166060830152517f585fc153f20f4b5183a1015f6aa8639eccd1e4a2646bfcbb794c74630af3e0699181900360800190a16007805465ffffffff000019166201000061ffff9485160265ffff00000000191617600160201b9290931691909102919091179055565b610a676119d5565b5f8111610aa65760405162461bcd60e51b815260206004820152600d60248201526c06d617857616c6c6574203e203609c1b604482015260640161095f565b6009546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600955565b610af06119d5565b60075460065460c89161ffff62010000909104811691600160a81b8104821691610b2291600160c81b90041686612950565b610b2c9190612950565b610b369190612950565b61ffff161115610b585760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b909104811691600160b81b8104821691610b8b91600160d81b90041685612950565b610b959190612950565b610b9f9190612950565b61ffff161115610bc15760405162461bcd60e51b815260040161095f9061299b565b6006546007546040805161ffff86811682528581166020830152600160e81b909404841681830152929091166060830152517f01f5c7a45d273917dfc98816f1dd17a88893a7338e7beaa4d305fc8c84f8fe259181900360800190a16006805461ffff60e81b1916600160e81b61ffff948516021790556007805461ffff191691909216179055565b5f33610c57858285611a2f565b610c62858585611aa1565b506001949350505050565b610c756119d5565b6001600160a01b0382165f908152600d602052604090205481151560ff909116151503610cce5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b604482015260640161095f565b6001600160a01b0382165f818152600d6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b5f336108e6818585610d3f8383611757565b610d4991906129c3565b6118b2565b610d566119d5565b600b546001600160a01b0390811690821603610dc05760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b606482015260840161095f565b600b546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e905f90a3600b80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290515f929163c45a01559160048083019260209291908290030181865afa158015610e53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7791906129d6565b6001600160a01b031663c9c6539630600b5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efa91906129d6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610f44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6891906129d6565b600c80546001600160a01b0319166001600160a01b038316908117909155909150610f94906001611ef8565b5050565b610fa06119d5565b610fa95f611ff5565b565b610fb36119d5565b5f8111610ffb5760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b604482015260640161095f565b6008546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1600855565b60606004805461085890612904565b6110546119d5565b610f948282611ef8565b5f338161106b8286611757565b9050838110156110cb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161095f565b610c6282868684036118b2565b5f336108e6818585611aa1565b6110ed6119d5565b5f811161113c5760405162461bcd60e51b815260206004820152601860248201527f6d61785472616e73616374696f6e416d6f756e74203e20300000000000000000604482015260640161095f565b600a546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600a55565b6111866119d5565b6001600160a01b0381166111dc5760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e277420626520300000000000604482015260640161095f565b6007546040516001600160a01b03600160301b9092048216918316907facf03c50dcf01e53e2775267d12acd0158d87c2f20fb84226837142693b36ae7905f90a3600780546601000000000000600160d01b031916600160301b6001600160a01b03939093169283021790555f908152600e60209081526040808320805460ff199081166001908117909255600d909352922080549091169091179055565b6112836119d5565b306001600160a01b038216036112db5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e00000000000000604482015260640161095f565b5f6001600160a01b03821661133357604051339047905f81818185875af1925050503d805f8114611327576040519150601f19603f3d011682016040523d82523d5f602084013e61132c565b606091505b5050505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611377573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139b91906129f1565b116113a4575f80fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156113e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140c91906129f1565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0384169063a9059cbb906044016020604051808303815f875af1158015611459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147d9190612a08565b50505050565b61148b6119d5565b60075460065460c89161ffff62010000909104811691600160e81b81048216916114bd91600160a81b90041686612950565b6114c79190612950565b6114d19190612950565b61ffff1611156114f35760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b82048116929181169161152091600160b81b9091041685612950565b61152a9190612950565b6115349190612950565b61ffff1611156115565760405162461bcd60e51b815260040161095f9061299b565b6006546040805161ffff85811682528481166020830152600160c81b8404811682840152600160d81b9093049092166060830152517f1d6b62961d401d548eb1549c97109c0b905ccd7af9c3777d3076cc8438fdfe659181900360800190a16006805463ffffffff60c81b1916600160c81b61ffff9485160261ffff60d81b191617600160d81b9290931691909102919091179055565b6115f56119d5565b60075460065460c89161ffff62010000909104811691600160e81b810482169161162791600160c81b90041686612950565b6116319190612950565b61163b9190612950565b61ffff16111561165d5760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b82048116929181169161168a91600160d81b9091041685612950565b6116949190612950565b61169e9190612950565b61ffff1611156116c05760405162461bcd60e51b815260040161095f9061299b565b6006546040805161ffff85811682528481166020830152600160a81b8404811682840152600160b81b9093049092166060830152517f95c5c99557725e816faf752c6675d63483841c28a7a009ed792470a9cb4dea239181900360800190a16006805463ffffffff60a81b1916600160a81b61ffff9485160261ffff60b81b191617600160b81b9290931691909102919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6117896119d5565b6001600160a01b0382165f908152600e602052604090205481151560ff9091161515036117e25760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b604482015260640161095f565b6001600160a01b0382165f818152600e6020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610d21565b6118416119d5565b6001600160a01b0381166118a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095f565b6118af81611ff5565b50565b6001600160a01b0383166119145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095f565b6001600160a01b0382166119755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610fa95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095f565b5f611a3a8484611757565b90505f19811461147d5781811015611a945760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161095f565b61147d84848484036118b2565b6001600160a01b038316611ac75760405162461bcd60e51b815260040161095f90612a23565b6001600160a01b038216611aed5760405162461bcd60e51b815260040161095f90612a68565b305f908152602081905260409020546008546006549082101590600160a01b900460ff16158015611b355750600c546001600160a01b03165f90815260208190526040812054115b8015611b3e5750805b8015611b6157506001600160a01b0384165f908152600f602052604090205460ff165b15611b6e57611b6e612046565b5f805f80600660149054906101000a900460ff16158015611ba757506001600160a01b0389165f908152600e602052604090205460ff16155b8015611bcb57506001600160a01b0388165f908152600e602052604090205460ff16155b15611dda576001600160a01b0389165f908152600f602052604090205460ff1615611c91576006546103e890611c0c90600160b81b900461ffff1689612aab565b611c169190612ac2565b6006549094506103e890611c3590600160d81b900461ffff1689612aab565b611c3f9190612ac2565b6007549093506103e890611c579061ffff1689612aab565b611c619190612ac2565b6007549092506103e890611c8090600160201b900461ffff1689612aab565b611c8a9190612ac2565b9050611d54565b6001600160a01b0388165f908152600f602052604090205460ff1615611d54576006546103e890611ccd90600160a81b900461ffff1689612aab565b611cd79190612ac2565b6006549094506103e890611cf690600160c81b900461ffff1689612aab565b611d009190612ac2565b6006549093506103e890611d1f90600160e81b900461ffff1689612aab565b611d299190612ac2565b6007549092506103e890611d479062010000900461ffff1689612aab565b611d519190612ac2565b90505b5f8183611d6186886129c3565b611d6b91906129c3565b611d7591906129c3565b90508015611d8857611d888a30836122d9565b611d928189612ae1565b975084601054611da291906129c3565b601055601154611db39085906129c3565b601155601254611dc49084906129c3565b601255601354611dd59083906129c3565b601355505b611de58989896122d9565b600654600160a01b900460ff16611eed576001600160a01b0389165f908152600d602052604090205460ff16611e6657600a548710611e665760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d6974000000604482015260640161095f565b6001600160a01b0388165f908152600d602052604090205460ff16611eed576009546001600160a01b0389165f9081526020819052604090205410611eed5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d697400604482015260640161095f565b505050505050505050565b6001600160a01b0382165f908152600f602052604090205481151560ff909116151503611f8d5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c75650000000000000000606482015260840161095f565b6001600160a01b0382165f818152600f60209081526040808320805486151560ff199182168117909255600d84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610d21565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6006805460ff60a01b1916600160a01b179055305f9081526020819052604081205490505f60135460125460115460105461208191906129c3565b61208b91906129c3565b61209591906129c3565b90508015806120a357508082105b156120af5750506122ca565b60125415612106576120c63061dead6012546122d9565b7fbd49afcf40c86d69c3b856567b47aedcedc70a21991ed62a1cf25681257f50d06012546040516120f991815260200190565b60405180910390a15f6012555b5f60026010546121169190612ac2565b90505f4790505f806011548461212c91906129c3565b9050801561213d5761213d81612401565b5f6121488447612ae1565b90505f826011548361215a9190612aab565b6121649190612ac2565b90506121708183612ae1565b9350801561220e576007546040515f91600160301b90046001600160a01b03169083908381818185875af1925050503d805f81146121c9576040519150601f19603f3d011682016040523d82523d5f602084013e6121ce565b606091505b50509050801561220c576040518281527f4b6c681641ef142cf7c14791ad828c892635e88e8b4b546faa446787e00263659060200160405180910390a15b505b6013541561226157612221601354612551565b7f4217f88d7940040e1abdc46654cc1e25b2bd60548b97655526ff946fe5ebc09260135460405161225491815260200190565b60405180910390a15f6013555b5f8611801561226f57505f84115b156122b85761227e86856126a5565b60408051878152602081018690527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b50505f60118190556010555050505050505b6006805460ff60a01b19169055565b6001600160a01b0383166122ff5760405162461bcd60e51b815260040161095f90612a23565b6001600160a01b0382166123255760405162461bcd60e51b815260040161095f90612a68565b6001600160a01b0383165f908152602081905260409020548181101561239c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161095f565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361147d565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061243457612434612af4565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561248b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124af91906129d6565b816001815181106124c2576124c2612af4565b6001600160a01b039283166020918202929092010152600b546124e891309116846118b2565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125209085905f90869030904290600401612b08565b5f604051808303815f87803b158015612537575f80fd5b505af1158015612549573d5f803e3d5ffd5b505050505050565b604080516003808252608082019092525f916020820160608036833701905050905030815f8151811061258657612586612af4565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061260191906129d6565b8160018151811061261457612614612af4565b6001600160a01b03928316602091820292909201015260065482519116908290600290811061264557612645612af4565b6001600160a01b039283166020918202929092010152600b5461266b91309116846118b2565b600b54604051635c11d79560e01b81526001600160a01b0390911690635c11d795906125209085905f90869061dead904290600401612b08565b600b546126bd9030906001600160a01b0316846118b2565b600b5460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612728573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061132c9190612b77565b5f6020808352835180828501525f5b818110156127785785810183015185820160400152820161275c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118af575f80fd5b5f80604083850312156127bd575f80fd5b82356127c881612798565b946020939093013593505050565b803561ffff811681146127e7575f80fd5b919050565b5f80604083850312156127fd575f80fd5b612806836127d6565b9150612814602084016127d6565b90509250929050565b5f6020828403121561282d575f80fd5b5035919050565b5f805f60608486031215612846575f80fd5b833561285181612798565b9250602084013561286181612798565b929592945050506040919091013590565b80151581146118af575f80fd5b5f8060408385031215612890575f80fd5b823561289b81612798565b915060208301356128ab81612872565b809150509250929050565b5f602082840312156128c6575f80fd5b81356128d181612798565b9392505050565b5f80604083850312156128e9575f80fd5b82356128f481612798565b915060208301356128ab81612798565b600181811c9082168061291857607f821691505b60208210810361293657634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b61ffff81811683821601908082111561296b5761296b61293c565b5092915050565b6020808252600f908201526e73656c6c20666565203c3d2032302560881b604082015260600190565b6020808252600e908201526d62757920666565203c3d2032302560901b604082015260600190565b808201808211156108ec576108ec61293c565b5f602082840312156129e6575f80fd5b81516128d181612798565b5f60208284031215612a01575f80fd5b5051919050565b5f60208284031215612a18575f80fd5b81516128d181612872565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176108ec576108ec61293c565b5f82612adc57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156108ec576108ec61293c565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612b565784516001600160a01b031683529383019391830191600101612b31565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612b89575f80fd5b835192506020840151915060408401519050925092509256fea264697066735822122019d2bc7759b4e507d310191a904f22834bc8407f7721878a46ab08a6c895920c64736f6c63430008140033

Deployed Bytecode

0x60806040526004361061026d575f3560e01c806395d89b411161014a578063cf089e13116100be578063e9481eee11610078578063e9481eee14610790578063f11a24d3146107be578063f2fde38b146107df578063f6374342146107fe578063f8b45b051461081f578063fc59d23d14610834575f80fd5b8063cf089e13146106db578063cf188ad0146106fa578063d68f8cde14610719578063dd62ed3e14610738578063df8408fe14610757578063e71dc3f514610776575f80fd5b8063aacebbe31161010f578063aacebbe314610618578063adb873bd14610637578063b62496f514610658578063c8c8ebe414610686578063cb426d0f1461069b578063cb963728146106bc575f80fd5b806395d89b41146105885780639a7a23d61461059c578063a457c2d7146105bb578063a9059cbb146105da578063aa498023146105f9575f80fd5b80635342acb4116101e157806373b9e82c116101a657806373b9e82c146104c557806375f0a874146104e45780637bce5a041461050a57806385af30c51461052b5780638da5cb5b1461054a5780639213691314610567575f80fd5b80635342acb4146103fd57806365b8dbc01461042b578063709752211461044a57806370a082311461047d578063715018a6146104b1575f80fd5b80632073bd85116102325780632073bd851461032f57806323b872dd1461034e5780632ae2f1211461036d578063313ce5671461038c57806334809ee7146103a757806339509351146103de575f80fd5b806306fdde0314610278578063095ea7b3146102a25780630b00ea64146102d157806318160ddd146102f25780631c499ab014610310575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028c610849565b604051610299919061274d565b60405180910390f35b3480156102ad575f80fd5b506102c16102bc3660046127ac565b6108d9565b6040519015158152602001610299565b3480156102dc575f80fd5b506102f06102eb3660046127ec565b6108f2565b005b3480156102fd575f80fd5b506002545b604051908152602001610299565b34801561031b575f80fd5b506102f061032a36600461281d565b610a5f565b34801561033a575f80fd5b506102f06103493660046127ec565b610ae8565b348015610359575f80fd5b506102c1610368366004612834565b610c4a565b348015610378575f80fd5b506102f061038736600461287f565b610c6d565b348015610397575f80fd5b5060405160128152602001610299565b3480156103b2575f80fd5b506006546103c6906001600160a01b031681565b6040516001600160a01b039091168152602001610299565b3480156103e9575f80fd5b506102c16103f83660046127ac565b610d2d565b348015610408575f80fd5b506102c16104173660046128b6565b600e6020525f908152604090205460ff1681565b348015610436575f80fd5b506102f06104453660046128b6565b610d4e565b348015610455575f80fd5b5060075461046a9062010000900461ffff1681565b60405161ffff9091168152602001610299565b348015610488575f80fd5b506103026104973660046128b6565b6001600160a01b03165f9081526020819052604090205490565b3480156104bc575f80fd5b506102f0610f98565b3480156104d0575f80fd5b506102f06104df36600461281d565b610fab565b3480156104ef575f80fd5b506007546103c690600160301b90046001600160a01b031681565b348015610515575f80fd5b5060065461046a90600160d81b900461ffff1681565b348015610536575f80fd5b50600c546103c6906001600160a01b031681565b348015610555575f80fd5b506005546001600160a01b03166103c6565b348015610572575f80fd5b5060065461046a90600160c81b900461ffff1681565b348015610593575f80fd5b5061028c61103d565b3480156105a7575f80fd5b506102f06105b636600461287f565b61104c565b3480156105c6575f80fd5b506102c16105d53660046127ac565b61105e565b3480156105e5575f80fd5b506102c16105f43660046127ac565b6110d8565b348015610604575f80fd5b506102f061061336600461281d565b6110e5565b348015610623575f80fd5b506102f06106323660046128b6565b61117e565b348015610642575f80fd5b5060065461046a90600160e81b900461ffff1681565b348015610663575f80fd5b506102c16106723660046128b6565b600f6020525f908152604090205460ff1681565b348015610691575f80fd5b50610302600a5481565b3480156106a6575f80fd5b5060075461046a90600160201b900461ffff1681565b3480156106c7575f80fd5b506102f06106d63660046128b6565b61127b565b3480156106e6575f80fd5b506102f06106f53660046127ec565b611483565b348015610705575f80fd5b50600b546103c6906001600160a01b031681565b348015610724575f80fd5b506102f06107333660046127ec565b6115ed565b348015610743575f80fd5b506103026107523660046128d8565b611757565b348015610762575f80fd5b506102f061077136600461287f565b611781565b348015610781575f80fd5b5060075461046a9061ffff1681565b34801561079b575f80fd5b506102c16107aa3660046128b6565b600d6020525f908152604090205460ff1681565b3480156107c9575f80fd5b5060065461046a90600160b81b900461ffff1681565b3480156107ea575f80fd5b506102f06107f93660046128b6565b611839565b348015610809575f80fd5b5060065461046a90600160a81b900461ffff1681565b34801561082a575f80fd5b5061030260095481565b34801561083f575f80fd5b5061030260085481565b60606003805461085890612904565b80601f016020809104026020016040519081016040528092919081815260200182805461088490612904565b80156108cf5780601f106108a6576101008083540402835291602001916108cf565b820191905f5260205f20905b8154815290600101906020018083116108b257829003601f168201915b5050505050905090565b5f336108e68185856118b2565b60019150505b92915050565b6108fa6119d5565b60065460c89061ffff600160a81b8204811691600160e81b810482169161092991600160c81b90041686612950565b6109339190612950565b61093d9190612950565b61ffff1611156109685760405162461bcd60e51b815260040161095f90612972565b60405180910390fd5b60065460075460c89161ffff600160b81b820481169281169161099491600160d81b9091041685612950565b61099e9190612950565b6109a89190612950565b61ffff1611156109ca5760405162461bcd60e51b815260040161095f9061299b565b6007546040805161ffff85811682528481166020830152620100008404811682840152600160201b9093049092166060830152517f585fc153f20f4b5183a1015f6aa8639eccd1e4a2646bfcbb794c74630af3e0699181900360800190a16007805465ffffffff000019166201000061ffff9485160265ffff00000000191617600160201b9290931691909102919091179055565b610a676119d5565b5f8111610aa65760405162461bcd60e51b815260206004820152600d60248201526c06d617857616c6c6574203e203609c1b604482015260640161095f565b6009546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1600955565b610af06119d5565b60075460065460c89161ffff62010000909104811691600160a81b8104821691610b2291600160c81b90041686612950565b610b2c9190612950565b610b369190612950565b61ffff161115610b585760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b909104811691600160b81b8104821691610b8b91600160d81b90041685612950565b610b959190612950565b610b9f9190612950565b61ffff161115610bc15760405162461bcd60e51b815260040161095f9061299b565b6006546007546040805161ffff86811682528581166020830152600160e81b909404841681830152929091166060830152517f01f5c7a45d273917dfc98816f1dd17a88893a7338e7beaa4d305fc8c84f8fe259181900360800190a16006805461ffff60e81b1916600160e81b61ffff948516021790556007805461ffff191691909216179055565b5f33610c57858285611a2f565b610c62858585611aa1565b506001949350505050565b610c756119d5565b6001600160a01b0382165f908152600d602052604090205481151560ff909116151503610cce5760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b604482015260640161095f565b6001600160a01b0382165f818152600d6020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b5f336108e6818585610d3f8383611757565b610d4991906129c3565b6118b2565b610d566119d5565b600b546001600160a01b0390811690821603610dc05760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b606482015260840161095f565b600b546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e905f90a3600b80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290515f929163c45a01559160048083019260209291908290030181865afa158015610e53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7791906129d6565b6001600160a01b031663c9c6539630600b5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efa91906129d6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610f44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6891906129d6565b600c80546001600160a01b0319166001600160a01b038316908117909155909150610f94906001611ef8565b5050565b610fa06119d5565b610fa95f611ff5565b565b610fb36119d5565b5f8111610ffb5760405162461bcd60e51b815260206004820152601660248201527506d696e416d6f756e74546f54616b65466565203e20360541b604482015260640161095f565b6008546040805183815260208101929092527f772a06bc936eb749842080c472181e970cd4f23bd1ab7d0b84a80aec26910434910160405180910390a1600855565b60606004805461085890612904565b6110546119d5565b610f948282611ef8565b5f338161106b8286611757565b9050838110156110cb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161095f565b610c6282868684036118b2565b5f336108e6818585611aa1565b6110ed6119d5565b5f811161113c5760405162461bcd60e51b815260206004820152601860248201527f6d61785472616e73616374696f6e416d6f756e74203e20300000000000000000604482015260640161095f565b600a546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1600a55565b6111866119d5565b6001600160a01b0381166111dc5760405162461bcd60e51b815260206004820152601b60248201527f6d61726b6574696e672077616c6c65742063616e277420626520300000000000604482015260640161095f565b6007546040516001600160a01b03600160301b9092048216918316907facf03c50dcf01e53e2775267d12acd0158d87c2f20fb84226837142693b36ae7905f90a3600780546601000000000000600160d01b031916600160301b6001600160a01b03939093169283021790555f908152600e60209081526040808320805460ff199081166001908117909255600d909352922080549091169091179055565b6112836119d5565b306001600160a01b038216036112db5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f74207769746864726177206f776e20746f6b656e00000000000000604482015260640161095f565b5f6001600160a01b03821661133357604051339047905f81818185875af1925050503d805f8114611327576040519150601f19603f3d011682016040523d82523d5f602084013e61132c565b606091505b5050505050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015611377573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139b91906129f1565b116113a4575f80fd5b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156113e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140c91906129f1565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0384169063a9059cbb906044016020604051808303815f875af1158015611459573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147d9190612a08565b50505050565b61148b6119d5565b60075460065460c89161ffff62010000909104811691600160e81b81048216916114bd91600160a81b90041686612950565b6114c79190612950565b6114d19190612950565b61ffff1611156114f35760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b82048116929181169161152091600160b81b9091041685612950565b61152a9190612950565b6115349190612950565b61ffff1611156115565760405162461bcd60e51b815260040161095f9061299b565b6006546040805161ffff85811682528481166020830152600160c81b8404811682840152600160d81b9093049092166060830152517f1d6b62961d401d548eb1549c97109c0b905ccd7af9c3777d3076cc8438fdfe659181900360800190a16006805463ffffffff60c81b1916600160c81b61ffff9485160261ffff60d81b191617600160d81b9290931691909102919091179055565b6115f56119d5565b60075460065460c89161ffff62010000909104811691600160e81b810482169161162791600160c81b90041686612950565b6116319190612950565b61163b9190612950565b61ffff16111561165d5760405162461bcd60e51b815260040161095f90612972565b60075460065460c89161ffff600160201b82048116929181169161168a91600160d81b9091041685612950565b6116949190612950565b61169e9190612950565b61ffff1611156116c05760405162461bcd60e51b815260040161095f9061299b565b6006546040805161ffff85811682528481166020830152600160a81b8404811682840152600160b81b9093049092166060830152517f95c5c99557725e816faf752c6675d63483841c28a7a009ed792470a9cb4dea239181900360800190a16006805463ffffffff60a81b1916600160a81b61ffff9485160261ffff60b81b191617600160b81b9290931691909102919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6117896119d5565b6001600160a01b0382165f908152600e602052604090205481151560ff9091161515036117e25760405162461bcd60e51b8152602060048201526007602482015266616c726561647960c81b604482015260640161095f565b6001600160a01b0382165f818152600e6020908152604091829020805460ff191685151590811790915591519182527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa99101610d21565b6118416119d5565b6001600160a01b0381166118a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095f565b6118af81611ff5565b50565b6001600160a01b0383166119145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161095f565b6001600160a01b0382166119755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161095f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610fa95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095f565b5f611a3a8484611757565b90505f19811461147d5781811015611a945760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161095f565b61147d84848484036118b2565b6001600160a01b038316611ac75760405162461bcd60e51b815260040161095f90612a23565b6001600160a01b038216611aed5760405162461bcd60e51b815260040161095f90612a68565b305f908152602081905260409020546008546006549082101590600160a01b900460ff16158015611b355750600c546001600160a01b03165f90815260208190526040812054115b8015611b3e5750805b8015611b6157506001600160a01b0384165f908152600f602052604090205460ff165b15611b6e57611b6e612046565b5f805f80600660149054906101000a900460ff16158015611ba757506001600160a01b0389165f908152600e602052604090205460ff16155b8015611bcb57506001600160a01b0388165f908152600e602052604090205460ff16155b15611dda576001600160a01b0389165f908152600f602052604090205460ff1615611c91576006546103e890611c0c90600160b81b900461ffff1689612aab565b611c169190612ac2565b6006549094506103e890611c3590600160d81b900461ffff1689612aab565b611c3f9190612ac2565b6007549093506103e890611c579061ffff1689612aab565b611c619190612ac2565b6007549092506103e890611c8090600160201b900461ffff1689612aab565b611c8a9190612ac2565b9050611d54565b6001600160a01b0388165f908152600f602052604090205460ff1615611d54576006546103e890611ccd90600160a81b900461ffff1689612aab565b611cd79190612ac2565b6006549094506103e890611cf690600160c81b900461ffff1689612aab565b611d009190612ac2565b6006549093506103e890611d1f90600160e81b900461ffff1689612aab565b611d299190612ac2565b6007549092506103e890611d479062010000900461ffff1689612aab565b611d519190612ac2565b90505b5f8183611d6186886129c3565b611d6b91906129c3565b611d7591906129c3565b90508015611d8857611d888a30836122d9565b611d928189612ae1565b975084601054611da291906129c3565b601055601154611db39085906129c3565b601155601254611dc49084906129c3565b601255601354611dd59083906129c3565b601355505b611de58989896122d9565b600654600160a01b900460ff16611eed576001600160a01b0389165f908152600d602052604090205460ff16611e6657600a548710611e665760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d6974000000604482015260640161095f565b6001600160a01b0388165f908152600d602052604090205460ff16611eed576009546001600160a01b0389165f9081526020819052604090205410611eed5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d697400604482015260640161095f565b505050505050505050565b6001600160a01b0382165f908152600f602052604090205481151560ff909116151503611f8d5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c75650000000000000000606482015260840161095f565b6001600160a01b0382165f818152600f60209081526040808320805486151560ff199182168117909255600d84529382902080549094168117909355519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9101610d21565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6006805460ff60a01b1916600160a01b179055305f9081526020819052604081205490505f60135460125460115460105461208191906129c3565b61208b91906129c3565b61209591906129c3565b90508015806120a357508082105b156120af5750506122ca565b60125415612106576120c63061dead6012546122d9565b7fbd49afcf40c86d69c3b856567b47aedcedc70a21991ed62a1cf25681257f50d06012546040516120f991815260200190565b60405180910390a15f6012555b5f60026010546121169190612ac2565b90505f4790505f806011548461212c91906129c3565b9050801561213d5761213d81612401565b5f6121488447612ae1565b90505f826011548361215a9190612aab565b6121649190612ac2565b90506121708183612ae1565b9350801561220e576007546040515f91600160301b90046001600160a01b03169083908381818185875af1925050503d805f81146121c9576040519150601f19603f3d011682016040523d82523d5f602084013e6121ce565b606091505b50509050801561220c576040518281527f4b6c681641ef142cf7c14791ad828c892635e88e8b4b546faa446787e00263659060200160405180910390a15b505b6013541561226157612221601354612551565b7f4217f88d7940040e1abdc46654cc1e25b2bd60548b97655526ff946fe5ebc09260135460405161225491815260200190565b60405180910390a15f6013555b5f8611801561226f57505f84115b156122b85761227e86856126a5565b60408051878152602081018690527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b50505f60118190556010555050505050505b6006805460ff60a01b19169055565b6001600160a01b0383166122ff5760405162461bcd60e51b815260040161095f90612a23565b6001600160a01b0382166123255760405162461bcd60e51b815260040161095f90612a68565b6001600160a01b0383165f908152602081905260409020548181101561239c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161095f565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361147d565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061243457612434612af4565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561248b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124af91906129d6565b816001815181106124c2576124c2612af4565b6001600160a01b039283166020918202929092010152600b546124e891309116846118b2565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125209085905f90869030904290600401612b08565b5f604051808303815f87803b158015612537575f80fd5b505af1158015612549573d5f803e3d5ffd5b505050505050565b604080516003808252608082019092525f916020820160608036833701905050905030815f8151811061258657612586612af4565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156125dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061260191906129d6565b8160018151811061261457612614612af4565b6001600160a01b03928316602091820292909201015260065482519116908290600290811061264557612645612af4565b6001600160a01b039283166020918202929092010152600b5461266b91309116846118b2565b600b54604051635c11d79560e01b81526001600160a01b0390911690635c11d795906125209085905f90869061dead904290600401612b08565b600b546126bd9030906001600160a01b0316846118b2565b600b5460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612728573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061132c9190612b77565b5f6020808352835180828501525f5b818110156127785785810183015185820160400152820161275c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146118af575f80fd5b5f80604083850312156127bd575f80fd5b82356127c881612798565b946020939093013593505050565b803561ffff811681146127e7575f80fd5b919050565b5f80604083850312156127fd575f80fd5b612806836127d6565b9150612814602084016127d6565b90509250929050565b5f6020828403121561282d575f80fd5b5035919050565b5f805f60608486031215612846575f80fd5b833561285181612798565b9250602084013561286181612798565b929592945050506040919091013590565b80151581146118af575f80fd5b5f8060408385031215612890575f80fd5b823561289b81612798565b915060208301356128ab81612872565b809150509250929050565b5f602082840312156128c6575f80fd5b81356128d181612798565b9392505050565b5f80604083850312156128e9575f80fd5b82356128f481612798565b915060208301356128ab81612798565b600181811c9082168061291857607f821691505b60208210810361293657634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b61ffff81811683821601908082111561296b5761296b61293c565b5092915050565b6020808252600f908201526e73656c6c20666565203c3d2032302560881b604082015260600190565b6020808252600e908201526d62757920666565203c3d2032302560901b604082015260600190565b808201808211156108ec576108ec61293c565b5f602082840312156129e6575f80fd5b81516128d181612798565b5f60208284031215612a01575f80fd5b5051919050565b5f60208284031215612a18575f80fd5b81516128d181612872565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b80820281158282048414176108ec576108ec61293c565b5f82612adc57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156108ec576108ec61293c565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612b565784516001600160a01b031683529383019391830191600101612b31565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612b89575f80fd5b835192506020840151915060408401519050925092509256fea264697066735822122019d2bc7759b4e507d310191a904f22834bc8407f7721878a46ab08a6c895920c64736f6c63430008140033

Deployed Bytecode Sourcemap

21028:17634:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8915:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11275:201;;;;;;;;;;-1:-1:-1;11275:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;11275:201:0;1023:187:1;29689:760:0;;;;;;;;;;-1:-1:-1;29689:760:0;;;;;:::i;:::-;;:::i;:::-;;10044:108;;;;;;;;;;-1:-1:-1;10132:12:0;;10044:108;;;1786:25:1;;;1774:2;1759:18;10044:108:0;1640:177:1;27219:210:0;;;;;;;;;;-1:-1:-1;27219:210:0;;;;;:::i;:::-;;:::i;29032:649::-;;;;;;;;;;-1:-1:-1;29032:649:0;;;;;:::i;:::-;;:::i;12056:261::-;;;;;;;;;;-1:-1:-1;12056:261:0;;;;;:::i;:::-;;:::i;31602:325::-;;;;;;;;;;-1:-1:-1;31602:325:0;;;;;:::i;:::-;;:::i;9886:93::-;;;;;;;;;;-1:-1:-1;9886:93:0;;9969:2;3120:36:1;;3108:2;3093:18;9886:93:0;2978:184:1;21071:19:0;;;;;;;;;;-1:-1:-1;21071:19:0;;;;-1:-1:-1;;;;;21071:19:0;;;;;;-1:-1:-1;;;;;3331:32:1;;;3313:51;;3301:2;3286:18;21071:19:0;3167:203:1;12726:238:0;;;;;;;;;;-1:-1:-1;12726:238:0;;;;;:::i;:::-;;:::i;21804:49::-;;;;;;;;;;-1:-1:-1;21804:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25655:567;;;;;;;;;;-1:-1:-1;25655:567:0;;;;;:::i;:::-;;:::i;21429:29::-;;;;;;;;;;-1:-1:-1;21429:29:0;;;;;;;;;;;;;;3801:6:1;3789:19;;;3771:38;;3759:2;3744:18;21429:29:0;3627:188:1;10215:127:0;;;;;;;;;;-1:-1:-1;10215:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10316:18:0;10289:7;10316:18;;;;;;;;;;;;10215:127;2660:103;;;;;;;;;;;;;:::i;30457:314::-;;;;;;;;;;-1:-1:-1;30457:314:0;;;;;:::i;:::-;;:::i;21502:30::-;;;;;;;;;;-1:-1:-1;21502:30:0;;;;-1:-1:-1;;;21502:30:0;;-1:-1:-1;;;;;21502:30:0;;;21326:29;;;;;;;;;;-1:-1:-1;21326:29:0;;;;-1:-1:-1;;;21326:29:0;;;;;;21699:23;;;;;;;;;;-1:-1:-1;21699:23:0;;;;-1:-1:-1;;;;;21699:23:0;;;2019:87;;;;;;;;;;-1:-1:-1;2092:6:0;;-1:-1:-1;;;;;2092:6:0;2019:87;;21289:30;;;;;;;;;;-1:-1:-1;21289:30:0;;;;-1:-1:-1;;;21289:30:0;;;;;;9134:104;;;;;;;;;;;;;:::i;30779:163::-;;;;;;;;;;-1:-1:-1;30779:163:0;;;;;:::i;:::-;;:::i;13467:436::-;;;;;;;;;;-1:-1:-1;13467:436:0;;;;;:::i;:::-;;:::i;10548:193::-;;;;;;;;;;-1:-1:-1;10548:193:0;;;;;:::i;:::-;;:::i;27437:369::-;;;;;;;;;;-1:-1:-1;27437:369:0;;;;;:::i;:::-;;:::i;28596:428::-;;;;;;;;;;-1:-1:-1;28596:428:0;;;;;:::i;:::-;;:::i;21364:25::-;;;;;;;;;;-1:-1:-1;21364:25:0;;;;-1:-1:-1;;;21364:25:0;;;;;;21860:57;;;;;;;;;;-1:-1:-1;21860:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21612:35;;;;;;;;;;;;;;;;21465:28;;;;;;;;;;-1:-1:-1;21465:28:0;;;;-1:-1:-1;;;21465:28:0;;;;;;31935:526;;;;;;;;;;-1:-1:-1;31935:526:0;;;;;:::i;:::-;;:::i;27814:774::-;;;;;;;;;;-1:-1:-1;27814:774:0;;;;;:::i;:::-;;:::i;21656:36::-;;;;;;;;;;-1:-1:-1;21656:36:0;;;;-1:-1:-1;;;;;21656:36:0;;;26437:774;;;;;;;;;;-1:-1:-1;26437:774:0;;;;;:::i;:::-;;:::i;10804:151::-;;;;;;;;;;-1:-1:-1;10804:151:0;;;;;:::i;:::-;;:::i;31360:234::-;;;;;;;;;;-1:-1:-1;31360:234:0;;;;;:::i;:::-;;:::i;21396:24::-;;;;;;;;;;-1:-1:-1;21396:24:0;;;;;;;;21731:66;;;;;;;;;;-1:-1:-1;21731:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21251:29;;;;;;;;;;-1:-1:-1;21251:29:0;;;;-1:-1:-1;;;21251:29:0;;;;;;2918:201;;;;;;;;;;-1:-1:-1;2918:201:0;;;;;:::i;:::-;;:::i;21214:30::-;;;;;;;;;;-1:-1:-1;21214:30:0;;;;-1:-1:-1;;;21214:30:0;;;;;;21581:24;;;;;;;;;;;;;;;;21541:33;;;;;;;;;;;;;;;;8915:100;8969:13;9002:5;8995:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8915:100;:::o;11275:201::-;11358:4;736:10;11414:32;736:10;11430:7;11439:6;11414:8;:32::i;:::-;11464:4;11457:11;;;11275:201;;;;;:::o;29689:760::-;1905:13;:11;:13::i;:::-;29943:16:::1;::::0;29980:3:::1;::::0;29943:16:::1;-1:-1:-1::0;;;29943:16:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;29912:11:0;::::1;::::0;::::1;::::0;29840:52:::1;::::0;-1:-1:-1;;;29876:16:0;::::1;;29840::::0;:52:::1;:::i;:::-;:83;;;;:::i;:::-;:119;;;;:::i;:::-;:143;;;;29818:208;;;;-1:-1:-1::0;;;29818:208:0::1;;;;;;;:::i;:::-;;;;;;;;;30108:15;::::0;30095:10:::1;::::0;30144:3:::1;::::0;30108:15:::1;-1:-1:-1::0;;;30108:15:0;::::1;::::0;::::1;::::0;30095:10;::::1;::::0;30059:33:::1;::::0;-1:-1:-1;;;30077:15:0;;::::1;;30059::::0;:33:::1;:::i;:::-;:46;;;;:::i;:::-;:64;;;;:::i;:::-;:88;;;;30037:152;;;;-1:-1:-1::0;;;30037:152:0::1;;;;;;;:::i;:::-;30298:15;::::0;30205:148:::1;::::0;;30298:15:::1;6090::1::0;;;6072:34;;6142:15;;;6137:2;6122:18;;6115:43;30298:15:0;;::::1;::::0;::::1;6174:18:1::0;;;6167:43;-1:-1:-1;;;30328:14:0;;::::1;::::0;;::::1;6241:2:1::0;6226:18;;6219:43;30205:148:0;::::1;::::0;;;;6034:3:1;30205:148:0;;::::1;30364:15;:34:::0;;-1:-1:-1;;30409:32:0;30364:34;::::1;::::0;;::::1;;-1:-1:-1::0;;30409:32:0;;-1:-1:-1;;;30409:32:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;29689:760::o;27219:210::-;1905:13;:11;:13::i;:::-;27315:1:::1;27302:10;:14;27294:40;;;::::0;-1:-1:-1;;;27294:40:0;;6475:2:1;27294:40:0::1;::::0;::::1;6457:21:1::0;6514:2;6494:18;;;6487:30;-1:-1:-1;;;6533:18:1;;;6526:43;6586:18;;27294:40:0::1;6273:337:1::0;27294:40:0::1;27378:9;::::0;27350:38:::1;::::0;;6789:25:1;;;6845:2;6830:18;;6823:34;;;;27350:38:0::1;::::0;6762:18:1;27350:38:0::1;;;;;;;27399:9;:22:::0;27219:210::o;29032:649::-;1905:13;:11;:13::i;:::-;29275:15:::1;::::0;29239:16:::1;::::0;29311:3:::1;::::0;29275:15:::1;::::0;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;29239:16:0;::::1;::::0;::::1;::::0;29171:48:::1;::::0;-1:-1:-1;;;29203:16:0;::::1;;29171:12:::0;:48:::1;:::i;:::-;:84;;;;:::i;:::-;:119;;;;:::i;:::-;:143;;;;29149:208;;;;-1:-1:-1::0;;;29149:208:0::1;;;;;;;:::i;:::-;29440:14;::::0;29422:15:::1;::::0;29475:3:::1;::::0;29440:14:::1;-1:-1:-1::0;;;29440:14:0;;::::1;::::0;::::1;::::0;-1:-1:-1;;;29422:15:0;::::1;::::0;::::1;::::0;29390:29:::1;::::0;-1:-1:-1;;;29404:15:0;::::1;;29390:11:::0;:29:::1;:::i;:::-;:47;;;;:::i;:::-;:64;;;;:::i;:::-;:88;;;;29368:152;;;;-1:-1:-1::0;;;29368:152:0::1;;;;;;;:::i;:::-;29577:11;::::0;29590:10:::1;::::0;29536:65:::1;::::0;;29577:11:::1;6090:15:1::0;;;6072:34;;6142:15;;;6137:2;6122:18;;6115:43;-1:-1:-1;;;29577:11:0;;::::1;::::0;::::1;6174:18:1::0;;;6167:43;29590:10:0;;;::::1;6241:2:1::0;6226:18;;6219:43;29536:65:0;::::1;::::0;;;;6034:3:1;29536:65:0;;::::1;29612:11;:26:::0;;-1:-1:-1;;;;29612:26:0::1;-1:-1:-1::0;;;29612:26:0::1;::::0;;::::1;;;::::0;;29649:10:::1;:24:::0;;-1:-1:-1;;29649:24:0::1;::::0;;;::::1;;::::0;;29032:649::o;12056:261::-;12153:4;736:10;12211:38;12227:4;736:10;12242:6;12211:15;:38::i;:::-;12260:27;12270:4;12276:2;12280:6;12260:9;:27::i;:::-;-1:-1:-1;12305:4:0;;12056:261;-1:-1:-1;;;;12056:261:0:o;31602:325::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;31732:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:51;::::1;;:43;::::0;;::::1;:51;;::::0;31724:71:::1;;;::::0;-1:-1:-1;;;31724:71:0;;7070:2:1;31724:71:0::1;::::0;::::1;7052:21:1::0;7109:1;7089:18;;;7082:29;-1:-1:-1;;;7127:18:1;;;7120:37;7174:18;;31724:71:0::1;6868:330:1::0;31724:71:0::1;-1:-1:-1::0;;;;;31806:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:50;;-1:-1:-1;;31806:50:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31872:47;;1163:41:1;;;31872:47:0::1;::::0;1136:18:1;31872:47:0::1;;;;;;;;31602:325:::0;;:::o;12726:238::-;12814:4;736:10;12870:64;736:10;12886:7;12923:10;12895:25;736:10;12886:7;12895:9;:25::i;:::-;:38;;;;:::i;:::-;12870:8;:64::i;25655:567::-;1905:13;:11;:13::i;:::-;25778:10:::1;::::0;-1:-1:-1;;;;;25778:10:0;;::::1;25756:33:::0;;::::1;::::0;25734:118:::1;;;::::0;-1:-1:-1;;;25734:118:0;;7535:2:1;25734:118:0::1;::::0;::::1;7517:21:1::0;7574:2;7554:18;;;7547:30;7613:34;7593:18;;;7586:62;-1:-1:-1;;;7664:18:1;;;7657:33;7707:19;;25734:118:0::1;7333:399:1::0;25734:118:0::1;25910:10;::::0;25868:54:::1;::::0;-1:-1:-1;;;;;25910:10:0;;::::1;::::0;25868:54;::::1;::::0;::::1;::::0;25910:10:::1;::::0;25868:54:::1;25933:10;:43:::0;;-1:-1:-1;;;;;;25933:43:0::1;-1:-1:-1::0;;;;;25933:43:0;::::1;::::0;;::::1;::::0;;;26025:20:::1;::::0;;-1:-1:-1;;;26025:20:0;;;;-1:-1:-1;;25933:43:0;26025:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;25933:43;26025:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26007:50:0::1;;26080:4;26100:10;;;;;;;;;-1:-1:-1::0;;;;;26100:10:0::1;-1:-1:-1::0;;;;;26100:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26007:121;::::0;-1:-1:-1;;;;;;26007:121:0::1;::::0;;;;;;-1:-1:-1;;;;;8223:15:1;;;26007:121:0::1;::::0;::::1;8205:34:1::0;8275:15;;8255:18;;;8248:43;8140:18;;26007:121:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26139:8;:20:::0;;-1:-1:-1;;;;;;26139:20:0::1;-1:-1:-1::0;;;;;26139:20:0;::::1;::::0;;::::1;::::0;;;;;-1:-1:-1;26170:44:0::1;::::0;-1:-1:-1;26170:28:0::1;:44::i;:::-;25723:499;25655:567:::0;:::o;2660:103::-;1905:13;:11;:13::i;:::-;2725:30:::1;2752:1;2725:18;:30::i;:::-;2660:103::o:0;30457:314::-;1905:13;:11;:13::i;:::-;30603:1:::1;30581:19;:23;30573:58;;;::::0;-1:-1:-1;;;30573:58:0;;8504:2:1;30573:58:0::1;::::0;::::1;8486:21:1::0;8543:2;8523:18;;;8516:30;-1:-1:-1;;;8562:18:1;;;8555:52;8624:18;;30573:58:0::1;8302:346:1::0;30573:58:0::1;30693:18;::::0;30647:65:::1;::::0;;6789:25:1;;;6845:2;6830:18;;6823:34;;;;30647:65:0::1;::::0;6762:18:1;30647:65:0::1;;;;;;;30723:18;:40:::0;30457:314::o;9134:104::-;9190:13;9223:7;9216:14;;;;;:::i;30779:163::-;1905:13;:11;:13::i;:::-;30893:41:::1;30922:4;30928:5;30893:28;:41::i;13467:436::-:0;13560:4;736:10;13560:4;13643:25;736:10;13660:7;13643:9;:25::i;:::-;13616:52;;13707:15;13687:16;:35;;13679:85;;;;-1:-1:-1;;;13679:85:0;;8855:2:1;13679:85:0;;;8837:21:1;8894:2;8874:18;;;8867:30;8933:34;8913:18;;;8906:62;-1:-1:-1;;;8984:18:1;;;8977:35;9029:19;;13679:85:0;8653:401:1;13679:85:0;13800:60;13809:5;13816:7;13844:15;13825:16;:34;13800:8;:60::i;10548:193::-;10627:4;736:10;10683:28;736:10;10700:2;10704:6;10683:9;:28::i;27437:369::-;1905:13;:11;:13::i;:::-;27589:1:::1;27565:21;:25;27557:62;;;::::0;-1:-1:-1;;;27557:62:0;;9261:2:1;27557:62:0::1;::::0;::::1;9243:21:1::0;9300:2;9280:18;;;9273:30;9339:26;9319:18;;;9312:54;9383:18;;27557:62:0::1;9059:348:1::0;27557:62:0::1;27712:20;::::0;27635:108:::1;::::0;;6789:25:1;;;6845:2;6830:18;;6823:34;;;;27635:108:0::1;::::0;6762:18:1;27635:108:0::1;;;;;;;27754:20;:44:::0;27437:369::o;28596:428::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;28714:30:0;::::1;28706:70;;;::::0;-1:-1:-1;;;28706:70:0;;9614:2:1;28706:70:0::1;::::0;::::1;9596:21:1::0;9653:2;9633:18;;;9626:30;9692:29;9672:18;;;9665:57;9739:18;;28706:70:0::1;9412:351:1::0;28706:70:0::1;28832:15;::::0;28792:56:::1;::::0;-1:-1:-1;;;;;;;;28832:15:0;;::::1;::::0;::::1;::::0;28792:56;::::1;::::0;::::1;::::0;;;::::1;28859:15;:34:::0;;-1:-1:-1;;;;;;28859:34:0::1;-1:-1:-1::0;;;;;;;;28859:34:0;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;28904:35:0;;;:17:::1;:35;::::0;;;;;;;:42;;-1:-1:-1;;28904:42:0;;::::1;-1:-1:-1::0;28904:42:0;;::::1;::::0;;;28957:34:::1;:52:::0;;;;;:59;;;;::::1;::::0;;::::1;::::0;;28596:428::o;31935:526::-;1905:13;:11;:13::i;:::-;32030:4:::1;-1:-1:-1::0;;;;;32015:20:0;::::1;::::0;32007:58:::1;;;::::0;-1:-1:-1;;;32007:58:0;;9970:2:1;32007:58:0::1;::::0;::::1;9952:21:1::0;10009:2;9989:18;;;9982:30;10048:27;10028:18;;;10021:55;10093:18;;32007:58:0::1;9768:349:1::0;32007:58:0::1;32076:12;-1:-1:-1::0;;;;;32103:17:0;::::1;32099:355;;32149:90;::::0;32157:10:::1;::::0;32199:21:::1;::::0;32149:90:::1;::::0;;;32199:21;32157:10;32149:90:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;25655:567:0:o;32099:355::-:1;32278:36;::::0;-1:-1:-1;;;32278:36:0;;32308:4:::1;32278:36;::::0;::::1;3313:51:1::0;32317:1:0::1;::::0;-1:-1:-1;;;;;32278:21:0;::::1;::::0;::::1;::::0;3286:18:1;;32278:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;32270:49;;;::::0;::::1;;32351:36;::::0;-1:-1:-1;;;32351:36:0;;32381:4:::1;32351:36;::::0;::::1;3313:51:1::0;32334:14:0::1;::::0;-1:-1:-1;;;;;32351:21:0;::::1;::::0;::::1;::::0;3286:18:1;;32351:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32402:40;::::0;-1:-1:-1;;;32402:40:0;;32423:10:::1;32402:40;::::0;::::1;10695:51:1::0;10762:18;;;10755:34;;;32334:53:0;;-1:-1:-1;;;;;;32402:20:0;::::1;::::0;::::1;::::0;10668:18:1;;32402:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32255:199;31996:465;31935:526:::0;:::o;27814:774::-;1905:13;:11;:13::i;:::-;28074:15:::1;::::0;28043:11:::1;::::0;28110:3:::1;::::0;28074:15:::1;::::0;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;28043:11:0;::::1;::::0;::::1;::::0;27970:53:::1;::::0;-1:-1:-1;;;28007:16:0;::::1;;27970:17:::0;:53:::1;:::i;:::-;:84;;;;:::i;:::-;:119;;;;:::i;:::-;:143;;;;27948:208;;;;-1:-1:-1::0;;;27948:208:0::1;;;;;;;:::i;:::-;28239:14;::::0;28208:15:::1;::::0;28274:3:::1;::::0;28239:14:::1;-1:-1:-1::0;;;28239:14:0;::::1;::::0;::::1;::::0;28226:10;;::::1;::::0;28189:34:::1;::::0;-1:-1:-1;;;28208:15:0;;::::1;;28189:16:::0;:34:::1;:::i;:::-;:47;;;;:::i;:::-;:64;;;;:::i;:::-;:88;;;;28167:152;;;;-1:-1:-1::0;;;28167:152:0::1;;;;;;;:::i;:::-;28431:16;::::0;28335:153:::1;::::0;;28431:16:::1;6090:15:1::0;;;6072:34;;6142:15;;;6137:2;6122:18;;6115:43;-1:-1:-1;;;28431:16:0;::::1;::::0;::::1;6174:18:1::0;;;6167:43;-1:-1:-1;;;28462:15:0;;::::1;::::0;;::::1;6241:2:1::0;6226:18;;6219:43;28335:153:0;::::1;::::0;;;;6034:3:1;28335:153:0;;::::1;28499:16;:36:::0;;-1:-1:-1;;;;28546:34:0;-1:-1:-1;;;28499:36:0::1;::::0;;::::1;;-1:-1:-1::0;;;;28546:34:0;;-1:-1:-1;;;28546:34:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;27814:774::o;26437:::-;1905:13;:11;:13::i;:::-;26697:15:::1;::::0;26666:11:::1;::::0;26733:3:::1;::::0;26697:15:::1;::::0;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;26666:11:0;::::1;::::0;::::1;::::0;26593:53:::1;::::0;-1:-1:-1;;;26630:16:0;::::1;;26593:17:::0;:53:::1;:::i;:::-;:84;;;;:::i;:::-;:119;;;;:::i;:::-;:143;;;;26571:208;;;;-1:-1:-1::0;;;26571:208:0::1;;;;;;;:::i;:::-;26862:14;::::0;26831:15:::1;::::0;26897:3:::1;::::0;26862:14:::1;-1:-1:-1::0;;;26862:14:0;::::1;::::0;::::1;::::0;26849:10;;::::1;::::0;26812:34:::1;::::0;-1:-1:-1;;;26831:15:0;;::::1;;26812:16:::0;:34:::1;:::i;:::-;:47;;;;:::i;:::-;:64;;;;:::i;:::-;:88;;;;26790:152;;;;-1:-1:-1::0;;;26790:152:0::1;;;;;;;:::i;:::-;27054:16;::::0;26958:153:::1;::::0;;27054:16:::1;6090:15:1::0;;;6072:34;;6142:15;;;6137:2;6122:18;;6115:43;-1:-1:-1;;;27054:16:0;::::1;::::0;::::1;6174:18:1::0;;;6167:43;-1:-1:-1;;;27085:15:0;;::::1;::::0;;::::1;6241:2:1::0;6226:18;;6219:43;26958:153:0;::::1;::::0;;;;6034:3:1;26958:153:0;;::::1;27122:16;:36:::0;;-1:-1:-1;;;;27169:34:0;-1:-1:-1;;;27122:36:0::1;::::0;;::::1;;-1:-1:-1::0;;;;27169:34:0;;-1:-1:-1;;;27169:34:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;26437:774::o;10804:151::-;-1:-1:-1;;;;;10920:18:0;;;10893:7;10920:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10804:151::o;31360:234::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;31450:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;:34;::::1;;:26;::::0;;::::1;:34;;::::0;31442:54:::1;;;::::0;-1:-1:-1;;;31442:54:0;;7070:2:1;31442:54:0::1;::::0;::::1;7052:21:1::0;7109:1;7089:18;;;7082:29;-1:-1:-1;;;7127:18:1;;;7120:37;7174:18;;31442:54:0::1;6868:330:1::0;31442:54:0::1;-1:-1:-1::0;;;;;31507:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:33;;-1:-1:-1;;31507:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31556:30;;1163:41:1;;;31556:30:0::1;::::0;1136:18:1;31556:30:0::1;1023:187:1::0;2918:201:0;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;3007:22:0;::::1;2999:73;;;::::0;-1:-1:-1;;;2999:73:0;;11252:2:1;2999:73:0::1;::::0;::::1;11234:21:1::0;11291:2;11271:18;;;11264:30;11330:34;11310:18;;;11303:62;-1:-1:-1;;;11381:18:1;;;11374:36;11427:19;;2999:73:0::1;11050:402:1::0;2999:73:0::1;3083:28;3102:8;3083:18;:28::i;:::-;2918:201:::0;:::o;17460:346::-;-1:-1:-1;;;;;17562:19:0;;17554:68;;;;-1:-1:-1;;;17554:68:0;;11659:2:1;17554:68:0;;;11641:21:1;11698:2;11678:18;;;11671:30;11737:34;11717:18;;;11710:62;-1:-1:-1;;;11788:18:1;;;11781:34;11832:19;;17554:68:0;11457:400:1;17554:68:0;-1:-1:-1;;;;;17641:21:0;;17633:68;;;;-1:-1:-1;;;17633:68:0;;12064:2:1;17633:68:0;;;12046:21:1;12103:2;12083:18;;;12076:30;12142:34;12122:18;;;12115:62;-1:-1:-1;;;12193:18:1;;;12186:32;12235:19;;17633:68:0;11862:398:1;17633:68:0;-1:-1:-1;;;;;17714:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17766:32;;1786:25:1;;;17766:32:0;;1759:18:1;17766:32:0;;;;;;;17460:346;;;:::o;2184:132::-;2092:6;;-1:-1:-1;;;;;2092:6:0;736:10;2248:23;2240:68;;;;-1:-1:-1;;;2240:68:0;;12467:2:1;2240:68:0;;;12449:21:1;;;12486:18;;;12479:30;12545:34;12525:18;;;12518:62;12597:18;;2240:68:0;12265:356:1;18097:419:0;18198:24;18225:25;18235:5;18242:7;18225:9;:25::i;:::-;18198:52;;-1:-1:-1;;18265:16:0;:37;18261:248;;18347:6;18327:16;:26;;18319:68;;;;-1:-1:-1;;;18319:68:0;;12828:2:1;18319:68:0;;;12810:21:1;12867:2;12847:18;;;12840:30;12906:31;12886:18;;;12879:59;12955:18;;18319:68:0;12626:353:1;18319:68:0;18431:51;18440:5;18447:7;18475:6;18456:16;:25;18431:8;:51::i;32469:2832::-;-1:-1:-1;;;;;32601:18:0;;32593:68;;;;-1:-1:-1;;;32593:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32680:16:0;;32672:64;;;;-1:-1:-1;;;32672:64:0;;;;;;;:::i;:::-;32796:4;32747:28;10316:18;;;;;;;;;;;32881;;32952:16;;32844:55;;;;;-1:-1:-1;;;32952:16:0;;;;32951:17;:57;;;;-1:-1:-1;32995:8:0;;-1:-1:-1;;;;;32995:8:0;33007:1;10316:18;;;;;;;;;;;32985:23;32951:57;:97;;;;;33025:23;32951:97;:143;;;;-1:-1:-1;;;;;;33065:29:0;;;;;;:25;:29;;;;;;;;32951:143;32933:209;;;33121:9;:7;:9::i;:::-;33154:21;33186;33218:16;33245:20;33381:16;;;;;;;;;;;33380:17;:58;;;;-1:-1:-1;;;;;;33415:23:0;;;;;;:17;:23;;;;;;;;33414:24;33380:58;:97;;;;-1:-1:-1;;;;;;33456:21:0;;;;;;:17;:21;;;;;;;;33455:22;33380:97;33362:1391;;;-1:-1:-1;;;;;33528:31:0;;;;;;:25;:31;;;;;;;;33524:684;;;33607:15;;33627:4;;33597:26;;-1:-1:-1;;;33607:15:0;;;;33597:6;:26;:::i;:::-;33596:35;;;;:::i;:::-;33677:15;;33580:51;;-1:-1:-1;33697:4:0;;33667:26;;-1:-1:-1;;;33677:15:0;;;;33667:6;:26;:::i;:::-;33666:35;;;;:::i;:::-;33742:10;;33650:51;;-1:-1:-1;33757:4:0;;33732:21;;33742:10;;33732:6;:21;:::i;:::-;33731:30;;;;:::i;:::-;33806:14;;33720:41;;-1:-1:-1;33825:4:0;;33796:25;;-1:-1:-1;;;33806:14:0;;;;33796:6;:25;:::i;:::-;33795:34;;;;:::i;:::-;33780:49;;33524:684;;;-1:-1:-1;;;;;33889:29:0;;;;;;:25;:29;;;;;;;;33885:323;;;33966:16;;33987:4;;33956:27;;-1:-1:-1;;;33966:16:0;;;;33956:6;:27;:::i;:::-;33955:36;;;;:::i;:::-;34037:16;;33939:52;;-1:-1:-1;34058:4:0;;34027:27;;-1:-1:-1;;;34037:16:0;;;;34027:6;:27;:::i;:::-;34026:36;;;;:::i;:::-;34103:11;;34010:52;;-1:-1:-1;34119:4:0;;34093:22;;-1:-1:-1;;;34103:11:0;;;;34093:6;:22;:::i;:::-;34092:31;;;;:::i;:::-;34168:15;;34081:42;;-1:-1:-1;34188:4:0;;34158:26;;34168:15;;;;;34158:6;:26;:::i;:::-;34157:35;;;;:::i;:::-;34142:50;;33885:323;34222:17;34336:12;34308:8;34242:46;34275:13;34242;:46;:::i;:::-;:74;;;;:::i;:::-;:106;;;;:::i;:::-;34222:126;-1:-1:-1;34367:13:0;;34363:66;;34382:47;34398:4;34412;34419:9;34382:15;:47::i;:::-;34453:18;34462:9;34453:6;:18;:::i;:::-;34444:27;;34530:13;34508:19;;:35;;;;:::i;:::-;34486:19;:57;34580:19;;:35;;34602:13;;34580:35;:::i;:::-;34558:19;:57;34647:14;;:25;;34664:8;;34647:25;:::i;:::-;34630:14;:42;34708:18;;:33;;34729:12;;34708:33;:::i;:::-;34687:18;:54;-1:-1:-1;33362:1391:0;34763:33;34779:4;34785:2;34789:6;34763:15;:33::i;:::-;34812:16;;-1:-1:-1;;;34812:16:0;;;;34807:487;;-1:-1:-1;;;;;34850:40:0;;;;;;:34;:40;;;;;;;;34845:214;;34950:20;;34941:6;:29;34911:132;;;;-1:-1:-1;;;34911:132:0;;14524:2:1;34911:132:0;;;14506:21:1;14563:2;14543:18;;;14536:30;14602:31;14582:18;;;14575:59;14651:18;;34911:132:0;14322:353:1;34911:132:0;-1:-1:-1;;;;;35078:38:0;;;;;;:34;:38;;;;;;;;35073:210;;35183:9;;-1:-1:-1;;;;;10316:18:0;;10289:7;10316:18;;;;;;;;;;;35167:25;35137:130;;;;-1:-1:-1;;;35137:130:0;;14882:2:1;35137:130:0;;;14864:21:1;14921:2;14901:18;;;14894:30;14960:33;14940:18;;;14933:61;15011:18;;35137:130:0;14680:355:1;35137:130:0;32582:2719;;;;;;32469:2832;;;:::o;30950:402::-;-1:-1:-1;;;;;31055:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;31033:146;;;;-1:-1:-1;;;31033:146:0;;15242:2:1;31033:146:0;;;15224:21:1;15281:2;15261:18;;;15254:30;15320:34;15300:18;;;15293:62;15391:26;15371:18;;;15364:54;15435:19;;31033:146:0;15040:420:1;31033:146:0;-1:-1:-1;;;;;31190:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;-1:-1:-1;;31190:39:0;;;;;;;;31240:34;:40;;;;;;:48;;;;;;;;;;31304:40;1163:41:1;;;31304:40:0;;1136:18:1;31304:40:0;1023:187:1;3279:191:0;3372:6;;;-1:-1:-1;;;;;3389:17:0;;;-1:-1:-1;;;;;;3389:17:0;;;;;;;3422:40;;3372:6;;;3389:17;3372:6;;3422:40;;3353:16;;3422:40;3342:128;3279:191;:::o;35309:1892::-;26351:16;:23;;-1:-1:-1;;;;26351:23:0;-1:-1:-1;;;26351:23:0;;;35403:4:::1;-1:-1:-1::0;10316:18:0;;;;;;;;;;;35359:50:::1;;35420:24;35547:18;;35517:14;;35482:19;;35447;;:54;;;;:::i;:::-;:84;;;;:::i;:::-;:118;;;;:::i;:::-;35420:145:::0;-1:-1:-1;35580:21:0;;;:59:::1;;;35623:16;35605:15;:34;35580:59;35576:98;;;35656:7;;;;35576:98;35688:14;::::0;:18;35684:196:::1;;35723:63;35747:4;35762:6;35771:14;;35723:15;:63::i;:::-;35806:29;35820:14;;35806:29;;;;1786:25:1::0;;1774:2;1759:18;;1640:177;35806:29:0::1;;;;;;;;35867:1;35850:14;:18:::0;35684:196:::1;35939:26;35990:1;35968:19;;:23;;;;:::i;:::-;35939:52;;36002:25;36030:21;36002:49;;36062:23;36096:21:::0;36141:19:::1;;36120:18;:40;;;;:::i;:::-;36096:64:::0;-1:-1:-1;36175:17:0;;36171:54:::1;;36194:31;36211:13;36194:16;:31::i;:::-;36236:18;36257:41;36281:17:::0;36257:21:::1;:41;:::i;:::-;36236:62;;36309:23;36385:13;36349:19;;36336:10;:32;;;;:::i;:::-;36335:63;;;;:::i;:::-;36309:89:::0;-1:-1:-1;36427:28:0::1;36309:89:::0;36427:10;:28:::1;:::i;:::-;36409:46:::0;-1:-1:-1;36470:19:0;;36466:261:::1;;36533:15;::::0;36525:89:::1;::::0;36507:12:::1;::::0;-1:-1:-1;;;36533:15:0;::::1;-1:-1:-1::0;;;;;36533:15:0::1;::::0;36580;;36507:12;36525:89;36507:12;36525:89;36580:15;36533;36525:89:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36506:108;;;36633:7;36629:87;;;36666:34;::::0;1786:25:1;;;36666:34:0::1;::::0;1774:2:1;1759:18;36666:34:0::1;;;;;;;36629:87;36491:236;36466:261;36741:18;::::0;:22;36737:179:::1;;36780:38;36799:18;;36780;:38::i;:::-;36838:29;36848:18;;36838:29;;;;1786:25:1::0;;1774:2;1759:18;;1640:177;36838:29:0::1;;;;;;;;36903:1;36882:18;:22:::0;36737:179:::1;36953:1;36932:18;:22;:45;;;;;36976:1;36958:15;:19;36932:45;36928:198;;;36994:49;37007:18;37027:15;36994:12;:49::i;:::-;37063:51;::::0;;6789:25:1;;;6845:2;6830:18;;6823:34;;;37063:51:0::1;::::0;6762:18:1;37063:51:0::1;;;;;;;36928:198;-1:-1:-1::0;;37158:1:0::1;37136:19;:23:::0;;;37170:19:::1;:23:::0;-1:-1:-1;;;;;;26385:1:0::1;26397:16:::0;:24;;-1:-1:-1;;;;26397:24:0;;;35309:1892::o;14373:806::-;-1:-1:-1;;;;;14470:18:0;;14462:68;;;;-1:-1:-1;;;14462:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14549:16:0;;14541:64;;;;-1:-1:-1;;;14541:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14691:15:0;;14669:19;14691:15;;;;;;;;;;;14725:21;;;;14717:72;;;;-1:-1:-1;;;14717:72:0;;15667:2:1;14717:72:0;;;15649:21:1;15706:2;15686:18;;;15679:30;15745:34;15725:18;;;15718:62;-1:-1:-1;;;15796:18:1;;;15789:36;15842:19;;14717:72:0;15465:402:1;14717:72:0;-1:-1:-1;;;;;14825:15:0;;;:9;:15;;;;;;;;;;;14843:20;;;14825:38;;15043:13;;;;;;;;;;:23;;;;;;15095:26;;1786:25:1;;;15043:13:0;;15095:26;;1759:18:1;15095:26:0;;;;;;;15134:37;19116:91;37209:484;37299:16;;;37313:1;37299:16;;;;;;;;37275:21;;37299:16;;;;;;;;;;-1:-1:-1;37299:16:0;37275:40;;37344:4;37326;37331:1;37326:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37326:23:0;;;:7;;;;;;;;;;:23;;;;37370:10;;:17;;;-1:-1:-1;;;37370:17:0;;;;:10;;;;;:15;;:17;;;;;37326:7;;37370:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37360:4;37365:1;37360:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37360:27:0;;;:7;;;;;;;;;:27;37430:10;;37398:57;;37415:4;;37430:10;37443:11;37398:8;:57::i;:::-;37466:10;;:219;;-1:-1:-1;;;37466:219:0;;-1:-1:-1;;;;;37466:10:0;;;;:61;;:219;;37542:11;;37466:10;;37612:4;;37639;;37659:15;;37466:219;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37264:429;37209:484;:::o;38121:501::-;38208:16;;;38222:1;38208:16;;;;;;;;;38184:21;;38208:16;;;;;;;;;;-1:-1:-1;38208:16:0;38184:40;;38253:4;38235;38240:1;38235:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38235:23:0;;;:7;;;;;;;;;;:23;;;;38279:10;;:17;;;-1:-1:-1;;;38279:17:0;;;;:10;;;;;:15;;:17;;;;;38235:7;;38279:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38269:4;38274:1;38269:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38269:27:0;;;:7;;;;;;;;;:27;38317:4;;38307:7;;38317:4;;;38307;;38312:1;;38307:7;;;;;;:::i;:::-;-1:-1:-1;;;;;38307:14:0;;;:7;;;;;;;;;:14;38364:10;;38332:52;;38349:4;;38364:10;38377:6;38332:8;:52::i;:::-;38395:10;;:219;;-1:-1:-1;;;38395:219:0;;-1:-1:-1;;;;;38395:10:0;;;;:64;;:219;;38474:6;;38395:10;;38539:4;;38566:6;;38588:15;;38395:219;;;:::i;37701:412::-;37814:10;;37782:57;;37799:4;;-1:-1:-1;;;;;37814:10:0;37827:11;37782:8;:57::i;:::-;37850:10;;:255;;-1:-1:-1;;;37850:255:0;;37917:4;37850:255;;;17462:34:1;17512:18;;;17505:34;;;37850:10:0;17555:18:1;;;17548:34;;;17598:18;;;17591:34;38057:6:0;17641:19:1;;;17634:44;38079:15:0;17694:19:1;;;17687:35;-1:-1:-1;;;;;37850:10:0;;;;:26;;37884:9;;17396:19:1;;37850:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:159::-;1282:20;;1342:6;1331:18;;1321:29;;1311:57;;1364:1;1361;1354:12;1311:57;1215:159;;;:::o;1379:256::-;1445:6;1453;1506:2;1494:9;1485:7;1481:23;1477:32;1474:52;;;1522:1;1519;1512:12;1474:52;1545:28;1563:9;1545:28;:::i;:::-;1535:38;;1592:37;1625:2;1614:9;1610:18;1592:37;:::i;:::-;1582:47;;1379:256;;;;;:::o;1822:180::-;1881:6;1934:2;1922:9;1913:7;1909:23;1905:32;1902:52;;;1950:1;1947;1940:12;1902:52;-1:-1:-1;1973:23:1;;1822:180;-1:-1:-1;1822:180:1:o;2007:456::-;2084:6;2092;2100;2153:2;2141:9;2132:7;2128:23;2124:32;2121:52;;;2169:1;2166;2159:12;2121:52;2208:9;2195:23;2227:31;2252:5;2227:31;:::i;:::-;2277:5;-1:-1:-1;2334:2:1;2319:18;;2306:32;2347:33;2306:32;2347:33;:::i;:::-;2007:456;;2399:7;;-1:-1:-1;;;2453:2:1;2438:18;;;;2425:32;;2007:456::o;2468:118::-;2554:5;2547:13;2540:21;2533:5;2530:32;2520:60;;2576:1;2573;2566:12;2591:382;2656:6;2664;2717:2;2705:9;2696:7;2692:23;2688:32;2685:52;;;2733:1;2730;2723:12;2685:52;2772:9;2759:23;2791:31;2816:5;2791:31;:::i;:::-;2841:5;-1:-1:-1;2898:2:1;2883:18;;2870:32;2911:30;2870:32;2911:30;:::i;:::-;2960:7;2950:17;;;2591:382;;;;;:::o;3375:247::-;3434:6;3487:2;3475:9;3466:7;3462:23;3458:32;3455:52;;;3503:1;3500;3493:12;3455:52;3542:9;3529:23;3561:31;3586:5;3561:31;:::i;:::-;3611:5;3375:247;-1:-1:-1;;;3375:247:1:o;4054:388::-;4122:6;4130;4183:2;4171:9;4162:7;4158:23;4154:32;4151:52;;;4199:1;4196;4189:12;4151:52;4238:9;4225:23;4257:31;4282:5;4257:31;:::i;:::-;4307:5;-1:-1:-1;4364:2:1;4349:18;;4336:32;4377:33;4336:32;4377:33;:::i;4447:380::-;4526:1;4522:12;;;;4569;;;4590:61;;4644:4;4636:6;4632:17;4622:27;;4590:61;4697:2;4689:6;4686:14;4666:18;4663:38;4660:161;;4743:10;4738:3;4734:20;4731:1;4724:31;4778:4;4775:1;4768:15;4806:4;4803:1;4796:15;4660:161;;4447:380;;;:::o;4832:127::-;4893:10;4888:3;4884:20;4881:1;4874:31;4924:4;4921:1;4914:15;4948:4;4945:1;4938:15;4964:168;5031:6;5057:10;;;5069;;;5053:27;;5092:11;;;5089:37;;;5106:18;;:::i;:::-;5089:37;4964:168;;;;:::o;5137:339::-;5339:2;5321:21;;;5378:2;5358:18;;;5351:30;-1:-1:-1;;;5412:2:1;5397:18;;5390:45;5467:2;5452:18;;5137:339::o;5481:338::-;5683:2;5665:21;;;5722:2;5702:18;;;5695:30;-1:-1:-1;;;5756:2:1;5741:18;;5734:44;5810:2;5795:18;;5481:338::o;7203:125::-;7268:9;;;7289:10;;;7286:36;;;7302:18;;:::i;7737:251::-;7807:6;7860:2;7848:9;7839:7;7835:23;7831:32;7828:52;;;7876:1;7873;7866:12;7828:52;7908:9;7902:16;7927:31;7952:5;7927:31;:::i;10332:184::-;10402:6;10455:2;10443:9;10434:7;10430:23;10426:32;10423:52;;;10471:1;10468;10461:12;10423:52;-1:-1:-1;10494:16:1;;10332:184;-1:-1:-1;10332:184:1:o;10800:245::-;10867:6;10920:2;10908:9;10899:7;10895:23;10891:32;10888:52;;;10936:1;10933;10926:12;10888:52;10968:9;10962:16;10987:28;11009:5;10987:28;:::i;12984:401::-;13186:2;13168:21;;;13225:2;13205:18;;;13198:30;13264:34;13259:2;13244:18;;13237:62;-1:-1:-1;;;13330:2:1;13315:18;;13308:35;13375:3;13360:19;;12984:401::o;13390:399::-;13592:2;13574:21;;;13631:2;13611:18;;;13604:30;13670:34;13665:2;13650:18;;13643:62;-1:-1:-1;;;13736:2:1;13721:18;;13714:33;13779:3;13764:19;;13390:399::o;13794:168::-;13867:9;;;13898;;13915:15;;;13909:22;;13895:37;13885:71;;13936:18;;:::i;13967:217::-;14007:1;14033;14023:132;;14077:10;14072:3;14068:20;14065:1;14058:31;14112:4;14109:1;14102:15;14140:4;14137:1;14130:15;14023:132;-1:-1:-1;14169:9:1;;13967:217::o;14189:128::-;14256:9;;;14277:11;;;14274:37;;;14291:18;;:::i;16004:127::-;16065:10;16060:3;16056:20;16053:1;16046:31;16096:4;16093:1;16086:15;16120:4;16117:1;16110:15;16136:980;16398:4;16446:3;16435:9;16431:19;16477:6;16466:9;16459:25;16503:2;16541:6;16536:2;16525:9;16521:18;16514:34;16584:3;16579:2;16568:9;16564:18;16557:31;16608:6;16643;16637:13;16674:6;16666;16659:22;16712:3;16701:9;16697:19;16690:26;;16751:2;16743:6;16739:15;16725:29;;16772:1;16782:195;16796:6;16793:1;16790:13;16782:195;;;16861:13;;-1:-1:-1;;;;;16857:39:1;16845:52;;16952:15;;;;16917:12;;;;16893:1;16811:9;16782:195;;;-1:-1:-1;;;;;;;17033:32:1;;;;17028:2;17013:18;;17006:60;-1:-1:-1;;;17097:3:1;17082:19;17075:35;16994:3;16136:980;-1:-1:-1;;;16136:980:1:o;17733:306::-;17821:6;17829;17837;17890:2;17878:9;17869:7;17865:23;17861:32;17858:52;;;17906:1;17903;17896:12;17858:52;17935:9;17929:16;17919:26;;17985:2;17974:9;17970:18;17964:25;17954:35;;18029:2;18018:9;18014:18;18008:25;17998:35;;17733:306;;;;;:::o

Swarm Source

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