ETH Price: $3,309.29 (+0.05%)
Gas: 18 Gwei

Token

Stewie Griffin (STEWIE)
 

Overview

Max Total Supply

1,000,000 STEWIE

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.064510083393362375 STEWIE

Value
$0.00
0x582281810616443464405ec81bd047ed5ef28fad
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:
STEWIECOIN

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

Stewie ~ A brand new MEME!

https://twitter.com/StewieCoinERC
https://stewie-coin.com/
https://t.me/StewieCoinERC

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.21;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        if (returndata.length > 0) {
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 amount) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library SafeERC20 {
    using Address for address;

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

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

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

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

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

    function forceApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        bytes memory approvalCall = abi.encodeWithSelector(
            token.approve.selector,
            spender,
            value
        );

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(token.approve.selector, spender, 0)
            );
            _callOptionalReturn(token, approvalCall);
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(
            nonceAfter == nonceBefore + 1,
            "SafeERC20: permit did not succeed"
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        require(
            returndata.length == 0 || abi.decode(returndata, (bool)),
            "SafeERC20: ERC20 operation did not succeed"
        );
    }

    function _callOptionalReturnBool(
        IERC20 token,
        bytes memory data
    ) private returns (bool) {
        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success &&
            (returndata.length == 0 || abi.decode(returndata, (bool))) &&
            Address.isContract(address(token));
    }
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

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

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

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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

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

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;

            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    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 {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;

            _totalSupply -= amount;
        }

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

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

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract STEWIECOIN is Ownable, ReentrancyGuard, ERC20 {
    using SafeERC20 for IERC20;

    uint256 public liquidityTaxBuy;
    uint256 public liquidityTaxSell;

    uint256 public marketingTaxBuy;
    uint256 public marketingTaxSell;

    uint256 public immutable denominator;

    uint256 public liquidityTokenAmount;
    uint256 public marketingTokenAmount;

    address public marketingWallet;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isSwapBackEnabled;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    uint256 public maxWalletLimit;

    mapping(address => bool) private _isAutomatedMarketMakerPair;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;

    modifier inSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    event UpdateBuyTax(uint256 liquidityTaxBuy, uint256 marketingTaxBuy);
    event UpdateSellTax(uint256 liquidityTaxSell, uint256 marketingTaxSell);
    event UpdateMarketingWallet(address indexed marketingWallet);
    event UpdateMaxWalletLimit(uint256 maxWalletLimit);
      event UpdateExcludeFromMaxWalletLimit(
        address indexed account,
        bool isExcluded
    );
    event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount);
    event UpdateSwapBackStatus(bool status);
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool status);
    event UpdateExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("Stewie Griffin", "STEWIE") {
        _mint(owner(), 1_000_000 * (10 ** 18));

        liquidityTaxBuy = 0;
        liquidityTaxSell = 0;

        marketingTaxBuy = 1000;
        marketingTaxSell = 1000;

        denominator = 10_000;

        marketingWallet = 0xc5f805E7962CfB8531E7ea488a1949Ba7e61dfAd;

        swapTokensAtAmount = totalSupply() / 100_000;
        isSwapBackEnabled = true;

        address router = getRouterAddress();
        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        maxWalletLimit = 200;

        _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true;

        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxWalletLimit[address(owner())] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Pair)] = true;

        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(owner())] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;
    }

    receive() external payable {}

    fallback() external payable {}

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function getRouterAddress() public view returns (address) {
        if (block.chainid == 56) {
            return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 1 || block.chainid == 5) {
            return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Cannot found router on this network");
        }
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");

        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.safeTransfer(msg.sender, balance);
    }

    function setBuyTax(
        uint256 _liquidityTaxBuy,
        uint256 _marketingTaxBuy
    ) external onlyOwner {
        require(
            liquidityTaxBuy != _liquidityTaxBuy ||
                marketingTaxBuy != _marketingTaxBuy,
            "Buy Tax already on that amount"
        );
        require(
            _liquidityTaxBuy + _marketingTaxBuy <= 4_000,
            "Buy Tax cannot be more than 10%"
        );

        liquidityTaxBuy = _liquidityTaxBuy;
        marketingTaxBuy = _marketingTaxBuy;

        emit UpdateBuyTax(_liquidityTaxBuy, _marketingTaxBuy);
    }

    function setSellTax(
        uint256 _liquidityTaxSell,
        uint256 _marketingTaxSell
    ) external onlyOwner {
        require(
            liquidityTaxSell != _liquidityTaxSell ||
                marketingTaxSell != _marketingTaxSell,
            "Sell Tax already on that amount"
        );
        require(
            _liquidityTaxSell + _marketingTaxSell <= 4_000,
            "Sell Tax cannot be more than 10%"
        );

        liquidityTaxSell = _liquidityTaxSell;
        marketingTaxSell = _marketingTaxSell;

        emit UpdateSellTax(_liquidityTaxSell, _marketingTaxSell);
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(
            _marketingWallet != marketingWallet,
            "Marketing wallet is already that address"
        );
        require(
            _marketingWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_marketingWallet),
            "Marketing wallet cannot be a contract"
        );

        marketingWallet = _marketingWallet;
        emit UpdateMarketingWallet(_marketingWallet);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(
            swapTokensAtAmount != amount,
            "SwapTokensAtAmount already on that amount"
        );
        require(
            amount >= totalSupply() / 1_000_000,
            "Amount must be equal or greater than 0.000001% of Total Supply"
        );

        swapTokensAtAmount = amount;

        emit UpdateSwapTokensAtAmount(amount);
    }

    function toggleSwapBack(bool status) external onlyOwner {
        require(isSwapBackEnabled != status, "SwapBack already on status");

        isSwapBackEnabled = status;
        emit UpdateSwapBackStatus(status);
    }

    function setMaxWalletLimit(uint256 amount) external onlyOwner {
        require(
            maxWalletLimit != amount,
            "maxWalletLimit already on that amount"
        );
        require(
            amount >= 10 && amount <= 10_000,
            "maxWalletLimit cannot be below 0.1% of totalSupply (10) or more than 100% of totalSupply (10000)"
        );

        maxWalletLimit = amount;

        emit UpdateMaxWalletLimit(amount);
    }


    function setAutomatedMarketMakerPair(
        address pair,
        bool status
    ) external onlyOwner {
        require(
            _isAutomatedMarketMakerPair[pair] != status,
            "Pair address is already the value of 'status'"
        );
        require(pair != address(uniswapV2Pair), "Cannot set this pair");

        _isAutomatedMarketMakerPair[pair] = status;

        emit UpdateAutomatedMarketMakerPair(pair, status);
    }

    function isAutomatedMarketMakerPair(
        address pair
    ) external view returns (bool) {
        return _isAutomatedMarketMakerPair[pair];
    }

    function setExcludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit UpdateExcludeFromFees(account, excluded);
    }

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

    function setExcludeFromMaxWalletLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            account != address(this),
            "State of this contract address cannot be modified"
        );
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        require(account != address(uniswapV2Pair), "Cannot set this pair");

        _isExcludedFromMaxWalletLimit[account] = excluded;

        emit UpdateExcludeFromMaxWalletLimit(account, excluded);
    }

    function isExcludedFromMaxWalletLimit(
        address account
    ) external view returns (bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !_isAutomatedMarketMakerPair[from] &&
            isSwapBackEnabled &&
            liquidityTokenAmount + marketingTokenAmount > 0
        ) {
            swapBack();
        }

        bool takeFee = true;

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

         if (!_isExcludedFromMaxWalletLimit[to]) {
                require(
                    balanceOf(to) + amount <=
                        (totalSupply() * maxWalletLimit) / denominator,
                    "Balance of to user cannot more than wallet limit"
                );
            }
        

        if (takeFee) {
            uint256 tempLiquidityAmount;
            uint256 tempMarketingAmount;

            if (_isAutomatedMarketMakerPair[from]) {
                tempLiquidityAmount = (amount * liquidityTaxBuy) / denominator;
                tempMarketingAmount = (amount * marketingTaxBuy) / denominator;
            } else if (_isAutomatedMarketMakerPair[to]) {
                tempLiquidityAmount = (amount * liquidityTaxSell) / denominator;
                tempMarketingAmount = (amount * marketingTaxSell) / denominator;
            }

            liquidityTokenAmount += tempLiquidityAmount;
            marketingTokenAmount += tempMarketingAmount;

            uint256 fees = tempLiquidityAmount + tempMarketingAmount;

            if (fees > 0) {
                amount -= fees;
                super._transfer(from, address(this), fees);
            }
        }

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

    function swapBack() internal inSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 totalTax = liquidityTokenAmount + marketingTokenAmount;

        uint256 liquifyToken = (contractTokenBalance *
            (liquidityTokenAmount / 2)) / totalTax;

        uint256 swapBackAmount = contractTokenBalance - liquifyToken;

        totalTax -= (liquidityTokenAmount) / 2;

        try
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                swapBackAmount,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch {
            return;
        }

        uint256 newBalance = address(this).balance;

        uint256 marketingBNB = (newBalance * marketingTokenAmount) / totalTax;
        uint256 liquifyBNB = newBalance - marketingBNB;

        if (liquifyToken > 0 && liquifyBNB > 0) {
            try
                uniswapV2Router.addLiquidityETH{value: liquifyBNB}(
                    address(this),
                    liquifyToken,
                    0,
                    0,
                    address(0xdead),
                    block.timestamp
                )
            {} catch {}
        }

        if (marketingBNB > 0) {
            sendBNB(marketingWallet, marketingBNB);
        }

        liquidityTokenAmount = 0;
        marketingTokenAmount = 0;
    }

    function sendBNB(
        address _to,
        uint256 amount
    ) internal nonReentrant returns (bool) {
        if (address(this).balance < amount) return false;

        (bool success, ) = payable(_to).call{value: amount}("");

        return success;
    }

    function manualSwapBack() external {
        uint256 contractTokenBalance = balanceOf(address(this));

        require(contractTokenBalance > 0, "Cant Swap Back 0 Token!");

        swapBack();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimit","type":"uint256"}],"name":"UpdateMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxSell","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405234801562000010575f80fd5b506040518060400160405280600e81526020016d29ba32bbb4b29023b934b33334b760911b8152506040518060400160405280600681526020016553544557494560d01b815250620000716200006b6200043760201b60201c565b6200043b565b600180556005620000838382620007f3565b506006620000928282620007f3565b505050620000ba620000a96200048a60201b60201c565b69d3c21bcecceda100000062000498565b5f60078190556008556103e86009819055600a55612710608052600d80546001600160a01b03191673c5f805e7962cfb8531e7ea488a1949ba7e61dfad179055620186a06200010860045490565b620001149190620008bb565b600e55600f805460ff191660011790555f6200012f6200055f565b9050806001600160a01b031660a0816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001b09190620008db565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001fe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002249190620008db565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200026f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002959190620008db565b6001600160a01b031660c05260a051620002b39030905f1962000628565b60c860105560c0516001600160a01b03165f90815260116020908152604082208054600160ff19918216811790925561dead84526013928390527f2264e2d7bacabe6058f5009f42467b9be28015e7760f87409562384c94ac271c805490911682179055916200032a5f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790553081526013845282812080548616600190811790915560a05183168252838220805487168217905560c0519092168152918220805485168217905561dead82526012928390527f1120e10407cab1193d7c5139d9aae5536deb3d83e855f25f8e42f811c01f56f780549094168117909355620003da5f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055308152601290935281832080548516600190811790915560a0519091168352912080549092161790555062000930565b3390565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f546001600160a01b031690565b6001600160a01b038216620004f45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060045f8282546200050791906200090a565b90915550506001600160a01b0382165f818152600260209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b5f466038036200058257507310ed43c718714eb63d5aa57b78b54704e256024e90565b46606103620005a4575073d99d1c33f9fc3444f8101754abc46c52416550d190565b4660011480620005b45750466005145b15620005d35750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401620004eb565b6001600160a01b0383166200068c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004eb565b6001600160a01b038216620006ef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004eb565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200077d57607f821691505b6020821081036200079c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200074f575f81815260208120601f850160051c81016020861015620007ca5750805b601f850160051c820191505b81811015620007eb57828155600101620007d6565b505050505050565b81516001600160401b038111156200080f576200080f62000754565b620008278162000820845462000768565b84620007a2565b602080601f8311600181146200085d575f8415620008455750858301515b5f19600386901b1c1916600185901b178555620007eb565b5f85815260208120601f198616915b828110156200088d578886015182559484019460019091019084016200086c565b5085821015620008ab57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f82620008d657634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215620008ec575f80fd5b81516001600160a01b038116811462000903575f80fd5b9392505050565b808201808211156200092a57634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c0516128e9620009a15f395f818161041101528181610f5501526110c801525f81816102f101528181611ca001528181611dd30152611ebc01525f8181610627015281816119bf01528181611ab801528181611af301528181611b530152611b8e01526128e95ff3fe60806040526004361061023c575f3560e01c806371afc7131161012c5780639a7a23d6116100af578063d54f7d5e11610076578063d54f7d5e146106fc578063d63cad2214610710578063dd62ed3e1461072f578063e2f456051461074e578063f2fde38b14610763578063f9d0831a1461078257005b80639a7a23d614610649578063a457c2d714610668578063a8a69b9d14610687578063a9059cbb146106be578063afa4f3b2146106dd57005b80638123bdc8116100f35780638123bdc8146105b25780638a96082e146105c75780638da5cb5b146105e657806395d89b411461060257806396ce07951461061657005b806371afc71314610513578063721e623314610528578063728d41c91461053d57806375f0a8741461055c5780637949a4031461057b57005b8063313ce567116101bf57806352dfc8d01161018657806352dfc8d01461046a5780635d098b381461048357806366a88d96146104a257806366eb3785146104b757806370a08231146104cb578063715018a6146104ff57005b8063313ce567146103b157806339509351146103cc57806342d0b0bc146103eb57806349bd5a5e146104005780634fbee1931461043357005b806318160ddd1161020357806318160ddd1461032b5780631f88a23e1461033f57806323b872dd1461035e578063247b912d1461037d578063248ba7ed1461039c57005b806305a1f36d1461024557806306fdde0314610264578063095ea7b31461028e5780630abc8e7b146102bd5780631694505e146102e057005b3661024357005b005b348015610250575f80fd5b5061024361025f36600461246f565b6107a1565b34801561026f575f80fd5b506102786108b0565b60405161028591906124b1565b60405180910390f35b348015610299575f80fd5b506102ad6102a83660046124f7565b610940565b6040519015158152602001610285565b3480156102c8575f80fd5b506102d260075481565b604051908152602001610285565b3480156102eb575f80fd5b506103137f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610285565b348015610336575f80fd5b506004546102d2565b34801561034a575f80fd5b5061024361035936600461252e565b610959565b348015610369575f80fd5b506102ad610378366004612550565b610a03565b348015610388575f80fd5b5061024361039736600461246f565b610a26565b3480156103a7575f80fd5b506102d260085481565b3480156103bc575f80fd5b5060405160128152602001610285565b3480156103d7575f80fd5b506102ad6103e63660046124f7565b610b28565b3480156103f6575f80fd5b506102d2600a5481565b34801561040b575f80fd5b506103137f000000000000000000000000000000000000000000000000000000000000000081565b34801561043e575f80fd5b506102ad61044d36600461258e565b6001600160a01b03165f9081526012602052604090205460ff1690565b348015610475575f80fd5b50600f546102ad9060ff1681565b34801561048e575f80fd5b5061024361049d36600461258e565b610b49565b3480156104ad575f80fd5b506102d260105481565b3480156104c2575f80fd5b50610243610cd9565b3480156104d6575f80fd5b506102d26104e536600461258e565b6001600160a01b03165f9081526002602052604090205490565b34801561050a575f80fd5b50610243610d40565b34801561051e575f80fd5b506102d2600c5481565b348015610533575f80fd5b506102d260095481565b348015610548575f80fd5b506102436105573660046125a9565b610d53565b348015610567575f80fd5b50600d54610313906001600160a01b031681565b348015610586575f80fd5b506102ad61059536600461258e565b6001600160a01b03165f9081526011602052604090205460ff1690565b3480156105bd575f80fd5b506102d2600b5481565b3480156105d2575f80fd5b506102436105e13660046125c0565b610e9a565b3480156105f1575f80fd5b505f546001600160a01b0316610313565b34801561060d575f80fd5b5061027861102a565b348015610621575f80fd5b506102d27f000000000000000000000000000000000000000000000000000000000000000081565b348015610654575f80fd5b506102436106633660046125c0565b611039565b348015610673575f80fd5b506102ad6106823660046124f7565b611195565b348015610692575f80fd5b506102ad6106a136600461258e565b6001600160a01b03165f9081526013602052604090205460ff1690565b3480156106c9575f80fd5b506102ad6106d83660046124f7565b61120f565b3480156106e8575f80fd5b506102436106f73660046125a9565b61121c565b348015610707575f80fd5b50610313611348565b34801561071b575f80fd5b5061024361072a3660046125c0565b61140c565b34801561073a575f80fd5b506102d26107493660046125f7565b6114aa565b348015610759575f80fd5b506102d2600e5481565b34801561076e575f80fd5b5061024361077d36600461258e565b6114d4565b34801561078d575f80fd5b5061024361079c36600461258e565b61154a565b6107a961166a565b816007541415806107bc57508060095414155b61080d5760405162461bcd60e51b815260206004820152601e60248201527f4275792054617820616c7265616479206f6e207468617420616d6f756e74000060448201526064015b60405180910390fd5b610fa061081a8284612637565b11156108685760405162461bcd60e51b815260206004820152601f60248201527f427579205461782063616e6e6f74206265206d6f7265207468616e20313025006044820152606401610804565b6007829055600981905560408051838152602081018390527f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec91015b60405180910390a15050565b6060600580546108bf9061264a565b80601f01602080910402602001604051908101604052809291908181526020018280546108eb9061264a565b80156109365780601f1061090d57610100808354040283529160200191610936565b820191905f5260205f20905b81548152906001019060200180831161091957829003601f168201915b5050505050905090565b5f3361094d8185856116c3565b60019150505b92915050565b61096161166a565b600f5481151560ff9091161515036109bb5760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e207374617475730000000000006044820152606401610804565b600f805460ff19168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b5f33610a108582856117e6565b610a1b85858561185e565b506001949350505050565b610a2e61166a565b81600854141580610a41575080600a5414155b610a8d5760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74006044820152606401610804565b610fa0610a9a8284612637565b1115610ae85760405162461bcd60e51b815260206004820181905260248201527f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203130256044820152606401610804565b6008829055600a81905560408051838152602081018390527fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e91016108a4565b5f3361094d818585610b3a83836114aa565b610b449190612637565b6116c3565b610b5161166a565b600d546001600160a01b0390811690821603610bc05760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610804565b6001600160a01b038116610c2a5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610804565b6001600160a01b0381163b15610c905760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610804565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f0905f90a250565b305f9081526002602052604090205480610d355760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610804565b610d3d611c38565b50565b610d4861166a565b610d515f611f73565b565b610d5b61166a565b8060105403610dba5760405162461bcd60e51b815260206004820152602560248201527f6d617857616c6c65744c696d697420616c7265616479206f6e207468617420616044820152641b5bdd5b9d60da1b6064820152608401610804565b600a8110158015610dcd57506127108111155b610e655760405162461bcd60e51b815260206004820152606060248201527f6d617857616c6c65744c696d69742063616e6e6f742062652062656c6f77203060448201527f2e3125206f6620746f74616c537570706c792028313029206f72206d6f72652060648201527f7468616e2031303025206f6620746f74616c537570706c792028313030303029608482015260a401610804565b60108190556040518181527f071f030755f9025ecd66a1867810c7348bbb888c00d1ec32bf7c9d6a5a6001e8906020016109f8565b610ea261166a565b306001600160a01b03831603610f145760405162461bcd60e51b815260206004820152603160248201527f5374617465206f66207468697320636f6e747261637420616464726573732063604482015270185b9b9bdd081899481b5bd91a599a5959607a1b6064820152608401610804565b6001600160a01b0382165f9081526013602052604090205481151560ff909116151503610f535760405162461bcd60e51b815260040161080490612682565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610fcb5760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610804565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f0e89fd97e9b48b2465436024d8fa33a1d7721523f27d529a278d7244d3ef5e5891015b60405180910390a25050565b6060600680546108bf9061264a565b61104161166a565b6001600160a01b0382165f9081526011602052604090205481151560ff9091161515036110c65760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201526c65206f6620277374617475732760981b6064820152608401610804565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361113e5760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610804565b6001600160a01b0382165f81815260116020908152604091829020805460ff191685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f133205910161101e565b5f33816111a282866114aa565b9050838110156112025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610804565b610a1b82868684036116c3565b5f3361094d81858561185e565b61122461166a565b80600e54036112875760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e207468604482015268185d08185b5bdd5b9d60ba1b6064820152608401610804565b620f424061129460045490565b61129e91906126cc565b8110156113135760405162461bcd60e51b815260206004820152603e60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e20302e30303030303125206f6620546f74616c20537570706c7900006064820152608401610804565b600e8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e48906020016109f8565b5f4660380361136a57507310ed43c718714eb63d5aa57b78b54704e256024e90565b4660610361138b575073d99d1c33f9fc3444f8101754abc46c52416550d190565b466001148061139a5750466005145b156113b85750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401610804565b61141461166a565b6001600160a01b0382165f9081526012602052604090205481151560ff9091161515036114535760405162461bcd60e51b815260040161080490612682565b6001600160a01b0382165f81815260126020908152604091829020805460ff191685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe1910161101e565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b6114dc61166a565b6001600160a01b0381166115415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610804565b610d3d81611f73565b61155261166a565b306001600160a01b038216036115aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610804565b6001600160a01b0381166115e55760405133904780156108fc02915f818181858888f193505050501580156115e1573d5f803e3d5ffd5b5050565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561162b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164f91906126eb565b90506116656001600160a01b0383163383611fc2565b505050565b5f546001600160a01b03163314610d515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610804565b6001600160a01b0383166117255760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610804565b6001600160a01b0382166117865760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610804565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6117f184846114aa565b90505f198114611858578181101561184b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610804565b61185884848484036116c3565b50505050565b6001600160a01b0383166118845760405162461bcd60e51b815260040161080490612702565b6001600160a01b0382166118aa5760405162461bcd60e51b815260040161080490612747565b805f036118bc5761166583835f612014565b305f90815260026020526040902054600e54811080159081906118e95750600d54600160a01b900460ff16155b801561190d57506001600160a01b0385165f9081526011602052604090205460ff16155b801561191b5750600f5460ff165b801561193557505f600c54600b546119339190612637565b115b1561194257611942611c38565b6001600160a01b0385165f9081526012602052604090205460019060ff168061198257506001600160a01b0385165f9081526012602052604090205460ff165b806119965750600d54600160a01b900460ff165b1561199e57505f5b6001600160a01b0385165f9081526013602052604090205460ff16611a8e577f00000000000000000000000000000000000000000000000000000000000000006010546119ea60045490565b6119f4919061278a565b6119fe91906126cc565b84611a1d876001600160a01b03165f9081526002602052604090205490565b611a279190612637565b1115611a8e5760405162461bcd60e51b815260206004820152603060248201527f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460448201526f1a185b881dd85b1b195d081b1a5b5a5d60821b6064820152608401610804565b8015611c25576001600160a01b0386165f90815260116020526040812054819060ff1615611b31577f000000000000000000000000000000000000000000000000000000000000000060075487611ae5919061278a565b611aef91906126cc565b91507f000000000000000000000000000000000000000000000000000000000000000060095487611b20919061278a565b611b2a91906126cc565b9050611bc8565b6001600160a01b0387165f9081526011602052604090205460ff1615611bc8577f000000000000000000000000000000000000000000000000000000000000000060085487611b80919061278a565b611b8a91906126cc565b91507f0000000000000000000000000000000000000000000000000000000000000000600a5487611bbb919061278a565b611bc591906126cc565b90505b81600b5f828254611bd99190612637565b9250508190555080600c5f828254611bf19190612637565b909155505f9050611c028284612637565b90508015611c2157611c1481886127a1565b9650611c21893083612014565b5050505b611c30868686612014565b505050505050565b600d805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611c7e57611c7e6127b4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d1e91906127c8565b81600181518110611d3157611d316127b4565b6001600160a01b03909216602092830291909101820152305f9081526002909152604081205490505f600c54600b54611d6a9190612637565b90505f816002600b54611d7d91906126cc565b611d87908561278a565b611d9191906126cc565b90505f611d9e82856127a1565b90506002600b54611daf91906126cc565b611db990846127a1565b60405163791ac94760e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611e109084905f908a90309042906004016127e3565b5f604051808303815f87803b158015611e27575f80fd5b505af1925050508015611e38575060015b611e46575050505050611f64565b600c5447905f908590611e59908461278a565b611e6391906126cc565b90505f611e7082846127a1565b90505f85118015611e8057505f81115b15611f345760405163f305d71960e01b8152306004820152602481018690525f60448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015611f2b575060408051601f3d908101601f19168201909252611f2891810190612852565b60015b15611f34575050505b8115611f5257600d54611f50906001600160a01b031683612143565b505b50505f600b819055600c555050505050505b600d805460ff60a01b19169055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116659084906121b9565b6001600160a01b03831661203a5760405162461bcd60e51b815260040161080490612702565b6001600160a01b0382166120605760405162461bcd60e51b815260040161080490612747565b6001600160a01b0383165f90815260026020526040902054818110156120d75760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610804565b6001600160a01b038085165f8181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121369086815260200190565b60405180910390a3611858565b5f61214c61228c565b8147101561215b57505f6121b0565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f81146121a4576040519150601f19603f3d011682016040523d82523d5f602084013e6121a9565b606091505b5090925050505b61095360018055565b5f61220d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122e59092919063ffffffff16565b905080515f148061222d57508080602001905181019061222d919061287d565b6116655760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610804565b6002600154036122de5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610804565b6002600155565b60606122f384845f856122fb565b949350505050565b60608247101561235c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610804565b5f80866001600160a01b031685876040516123779190612898565b5f6040518083038185875af1925050503d805f81146123b1576040519150601f19603f3d011682016040523d82523d5f602084013e6123b6565b606091505b50915091506123c7878383876123d2565b979650505050505050565b606083156124405782515f03612439576001600160a01b0385163b6124395760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610804565b50816122f3565b6122f383838151156124555781518083602001fd5b8060405162461bcd60e51b815260040161080491906124b1565b5f8060408385031215612480575f80fd5b50508035926020909101359150565b5f5b838110156124a9578181015183820152602001612491565b50505f910152565b602081525f82518060208401526124cf81604085016020870161248f565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d3d575f80fd5b5f8060408385031215612508575f80fd5b8235612513816124e3565b946020939093013593505050565b8015158114610d3d575f80fd5b5f6020828403121561253e575f80fd5b813561254981612521565b9392505050565b5f805f60608486031215612562575f80fd5b833561256d816124e3565b9250602084013561257d816124e3565b929592945050506040919091013590565b5f6020828403121561259e575f80fd5b8135612549816124e3565b5f602082840312156125b9575f80fd5b5035919050565b5f80604083850312156125d1575f80fd5b82356125dc816124e3565b915060208301356125ec81612521565b809150509250929050565b5f8060408385031215612608575f80fd5b8235612613816124e3565b915060208301356125ec816124e3565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561095357610953612623565b600181811c9082168061265e57607f821691505b60208210810361267c57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b5f826126e657634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156126fb575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761095357610953612623565b8181038181111561095357610953612623565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156127d8575f80fd5b8151612549816124e3565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156128315784516001600160a01b03168352938301939183019160010161280c565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612864575f80fd5b8351925060208401519150604084015190509250925092565b5f6020828403121561288d575f80fd5b815161254981612521565b5f82516128a981846020870161248f565b919091019291505056fea2646970667358221220aed49778f03db51827c290eda4192241bceaf7cae0979803e8cbfc59f5bbeec064736f6c63430008150033

Deployed Bytecode

0x60806040526004361061023c575f3560e01c806371afc7131161012c5780639a7a23d6116100af578063d54f7d5e11610076578063d54f7d5e146106fc578063d63cad2214610710578063dd62ed3e1461072f578063e2f456051461074e578063f2fde38b14610763578063f9d0831a1461078257005b80639a7a23d614610649578063a457c2d714610668578063a8a69b9d14610687578063a9059cbb146106be578063afa4f3b2146106dd57005b80638123bdc8116100f35780638123bdc8146105b25780638a96082e146105c75780638da5cb5b146105e657806395d89b411461060257806396ce07951461061657005b806371afc71314610513578063721e623314610528578063728d41c91461053d57806375f0a8741461055c5780637949a4031461057b57005b8063313ce567116101bf57806352dfc8d01161018657806352dfc8d01461046a5780635d098b381461048357806366a88d96146104a257806366eb3785146104b757806370a08231146104cb578063715018a6146104ff57005b8063313ce567146103b157806339509351146103cc57806342d0b0bc146103eb57806349bd5a5e146104005780634fbee1931461043357005b806318160ddd1161020357806318160ddd1461032b5780631f88a23e1461033f57806323b872dd1461035e578063247b912d1461037d578063248ba7ed1461039c57005b806305a1f36d1461024557806306fdde0314610264578063095ea7b31461028e5780630abc8e7b146102bd5780631694505e146102e057005b3661024357005b005b348015610250575f80fd5b5061024361025f36600461246f565b6107a1565b34801561026f575f80fd5b506102786108b0565b60405161028591906124b1565b60405180910390f35b348015610299575f80fd5b506102ad6102a83660046124f7565b610940565b6040519015158152602001610285565b3480156102c8575f80fd5b506102d260075481565b604051908152602001610285565b3480156102eb575f80fd5b506103137f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610285565b348015610336575f80fd5b506004546102d2565b34801561034a575f80fd5b5061024361035936600461252e565b610959565b348015610369575f80fd5b506102ad610378366004612550565b610a03565b348015610388575f80fd5b5061024361039736600461246f565b610a26565b3480156103a7575f80fd5b506102d260085481565b3480156103bc575f80fd5b5060405160128152602001610285565b3480156103d7575f80fd5b506102ad6103e63660046124f7565b610b28565b3480156103f6575f80fd5b506102d2600a5481565b34801561040b575f80fd5b506103137f000000000000000000000000097b5a766cf4bf4eebff199fd7e65d74c9bc0ef581565b34801561043e575f80fd5b506102ad61044d36600461258e565b6001600160a01b03165f9081526012602052604090205460ff1690565b348015610475575f80fd5b50600f546102ad9060ff1681565b34801561048e575f80fd5b5061024361049d36600461258e565b610b49565b3480156104ad575f80fd5b506102d260105481565b3480156104c2575f80fd5b50610243610cd9565b3480156104d6575f80fd5b506102d26104e536600461258e565b6001600160a01b03165f9081526002602052604090205490565b34801561050a575f80fd5b50610243610d40565b34801561051e575f80fd5b506102d2600c5481565b348015610533575f80fd5b506102d260095481565b348015610548575f80fd5b506102436105573660046125a9565b610d53565b348015610567575f80fd5b50600d54610313906001600160a01b031681565b348015610586575f80fd5b506102ad61059536600461258e565b6001600160a01b03165f9081526011602052604090205460ff1690565b3480156105bd575f80fd5b506102d2600b5481565b3480156105d2575f80fd5b506102436105e13660046125c0565b610e9a565b3480156105f1575f80fd5b505f546001600160a01b0316610313565b34801561060d575f80fd5b5061027861102a565b348015610621575f80fd5b506102d27f000000000000000000000000000000000000000000000000000000000000271081565b348015610654575f80fd5b506102436106633660046125c0565b611039565b348015610673575f80fd5b506102ad6106823660046124f7565b611195565b348015610692575f80fd5b506102ad6106a136600461258e565b6001600160a01b03165f9081526013602052604090205460ff1690565b3480156106c9575f80fd5b506102ad6106d83660046124f7565b61120f565b3480156106e8575f80fd5b506102436106f73660046125a9565b61121c565b348015610707575f80fd5b50610313611348565b34801561071b575f80fd5b5061024361072a3660046125c0565b61140c565b34801561073a575f80fd5b506102d26107493660046125f7565b6114aa565b348015610759575f80fd5b506102d2600e5481565b34801561076e575f80fd5b5061024361077d36600461258e565b6114d4565b34801561078d575f80fd5b5061024361079c36600461258e565b61154a565b6107a961166a565b816007541415806107bc57508060095414155b61080d5760405162461bcd60e51b815260206004820152601e60248201527f4275792054617820616c7265616479206f6e207468617420616d6f756e74000060448201526064015b60405180910390fd5b610fa061081a8284612637565b11156108685760405162461bcd60e51b815260206004820152601f60248201527f427579205461782063616e6e6f74206265206d6f7265207468616e20313025006044820152606401610804565b6007829055600981905560408051838152602081018390527f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec91015b60405180910390a15050565b6060600580546108bf9061264a565b80601f01602080910402602001604051908101604052809291908181526020018280546108eb9061264a565b80156109365780601f1061090d57610100808354040283529160200191610936565b820191905f5260205f20905b81548152906001019060200180831161091957829003601f168201915b5050505050905090565b5f3361094d8185856116c3565b60019150505b92915050565b61096161166a565b600f5481151560ff9091161515036109bb5760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e207374617475730000000000006044820152606401610804565b600f805460ff19168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b5f33610a108582856117e6565b610a1b85858561185e565b506001949350505050565b610a2e61166a565b81600854141580610a41575080600a5414155b610a8d5760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74006044820152606401610804565b610fa0610a9a8284612637565b1115610ae85760405162461bcd60e51b815260206004820181905260248201527f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203130256044820152606401610804565b6008829055600a81905560408051838152602081018390527fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e91016108a4565b5f3361094d818585610b3a83836114aa565b610b449190612637565b6116c3565b610b5161166a565b600d546001600160a01b0390811690821603610bc05760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610804565b6001600160a01b038116610c2a5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610804565b6001600160a01b0381163b15610c905760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610804565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f0905f90a250565b305f9081526002602052604090205480610d355760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610804565b610d3d611c38565b50565b610d4861166a565b610d515f611f73565b565b610d5b61166a565b8060105403610dba5760405162461bcd60e51b815260206004820152602560248201527f6d617857616c6c65744c696d697420616c7265616479206f6e207468617420616044820152641b5bdd5b9d60da1b6064820152608401610804565b600a8110158015610dcd57506127108111155b610e655760405162461bcd60e51b815260206004820152606060248201527f6d617857616c6c65744c696d69742063616e6e6f742062652062656c6f77203060448201527f2e3125206f6620746f74616c537570706c792028313029206f72206d6f72652060648201527f7468616e2031303025206f6620746f74616c537570706c792028313030303029608482015260a401610804565b60108190556040518181527f071f030755f9025ecd66a1867810c7348bbb888c00d1ec32bf7c9d6a5a6001e8906020016109f8565b610ea261166a565b306001600160a01b03831603610f145760405162461bcd60e51b815260206004820152603160248201527f5374617465206f66207468697320636f6e747261637420616464726573732063604482015270185b9b9bdd081899481b5bd91a599a5959607a1b6064820152608401610804565b6001600160a01b0382165f9081526013602052604090205481151560ff909116151503610f535760405162461bcd60e51b815260040161080490612682565b7f000000000000000000000000097b5a766cf4bf4eebff199fd7e65d74c9bc0ef56001600160a01b0316826001600160a01b031603610fcb5760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610804565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f0e89fd97e9b48b2465436024d8fa33a1d7721523f27d529a278d7244d3ef5e5891015b60405180910390a25050565b6060600680546108bf9061264a565b61104161166a565b6001600160a01b0382165f9081526011602052604090205481151560ff9091161515036110c65760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201526c65206f6620277374617475732760981b6064820152608401610804565b7f000000000000000000000000097b5a766cf4bf4eebff199fd7e65d74c9bc0ef56001600160a01b0316826001600160a01b03160361113e5760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610804565b6001600160a01b0382165f81815260116020908152604091829020805460ff191685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f133205910161101e565b5f33816111a282866114aa565b9050838110156112025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610804565b610a1b82868684036116c3565b5f3361094d81858561185e565b61122461166a565b80600e54036112875760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e207468604482015268185d08185b5bdd5b9d60ba1b6064820152608401610804565b620f424061129460045490565b61129e91906126cc565b8110156113135760405162461bcd60e51b815260206004820152603e60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e20302e30303030303125206f6620546f74616c20537570706c7900006064820152608401610804565b600e8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e48906020016109f8565b5f4660380361136a57507310ed43c718714eb63d5aa57b78b54704e256024e90565b4660610361138b575073d99d1c33f9fc3444f8101754abc46c52416550d190565b466001148061139a5750466005145b156113b85750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401610804565b61141461166a565b6001600160a01b0382165f9081526012602052604090205481151560ff9091161515036114535760405162461bcd60e51b815260040161080490612682565b6001600160a01b0382165f81815260126020908152604091829020805460ff191685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe1910161101e565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b6114dc61166a565b6001600160a01b0381166115415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610804565b610d3d81611f73565b61155261166a565b306001600160a01b038216036115aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610804565b6001600160a01b0381166115e55760405133904780156108fc02915f818181858888f193505050501580156115e1573d5f803e3d5ffd5b5050565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa15801561162b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164f91906126eb565b90506116656001600160a01b0383163383611fc2565b505050565b5f546001600160a01b03163314610d515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610804565b6001600160a01b0383166117255760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610804565b6001600160a01b0382166117865760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610804565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6117f184846114aa565b90505f198114611858578181101561184b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610804565b61185884848484036116c3565b50505050565b6001600160a01b0383166118845760405162461bcd60e51b815260040161080490612702565b6001600160a01b0382166118aa5760405162461bcd60e51b815260040161080490612747565b805f036118bc5761166583835f612014565b305f90815260026020526040902054600e54811080159081906118e95750600d54600160a01b900460ff16155b801561190d57506001600160a01b0385165f9081526011602052604090205460ff16155b801561191b5750600f5460ff165b801561193557505f600c54600b546119339190612637565b115b1561194257611942611c38565b6001600160a01b0385165f9081526012602052604090205460019060ff168061198257506001600160a01b0385165f9081526012602052604090205460ff165b806119965750600d54600160a01b900460ff165b1561199e57505f5b6001600160a01b0385165f9081526013602052604090205460ff16611a8e577f00000000000000000000000000000000000000000000000000000000000027106010546119ea60045490565b6119f4919061278a565b6119fe91906126cc565b84611a1d876001600160a01b03165f9081526002602052604090205490565b611a279190612637565b1115611a8e5760405162461bcd60e51b815260206004820152603060248201527f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460448201526f1a185b881dd85b1b195d081b1a5b5a5d60821b6064820152608401610804565b8015611c25576001600160a01b0386165f90815260116020526040812054819060ff1615611b31577f000000000000000000000000000000000000000000000000000000000000271060075487611ae5919061278a565b611aef91906126cc565b91507f000000000000000000000000000000000000000000000000000000000000271060095487611b20919061278a565b611b2a91906126cc565b9050611bc8565b6001600160a01b0387165f9081526011602052604090205460ff1615611bc8577f000000000000000000000000000000000000000000000000000000000000271060085487611b80919061278a565b611b8a91906126cc565b91507f0000000000000000000000000000000000000000000000000000000000002710600a5487611bbb919061278a565b611bc591906126cc565b90505b81600b5f828254611bd99190612637565b9250508190555080600c5f828254611bf19190612637565b909155505f9050611c028284612637565b90508015611c2157611c1481886127a1565b9650611c21893083612014565b5050505b611c30868686612014565b505050505050565b600d805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611c7e57611c7e6127b4565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d1e91906127c8565b81600181518110611d3157611d316127b4565b6001600160a01b03909216602092830291909101820152305f9081526002909152604081205490505f600c54600b54611d6a9190612637565b90505f816002600b54611d7d91906126cc565b611d87908561278a565b611d9191906126cc565b90505f611d9e82856127a1565b90506002600b54611daf91906126cc565b611db990846127a1565b60405163791ac94760e01b81529093506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611e109084905f908a90309042906004016127e3565b5f604051808303815f87803b158015611e27575f80fd5b505af1925050508015611e38575060015b611e46575050505050611f64565b600c5447905f908590611e59908461278a565b611e6391906126cc565b90505f611e7082846127a1565b90505f85118015611e8057505f81115b15611f345760405163f305d71960e01b8152306004820152602481018690525f60448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015611f2b575060408051601f3d908101601f19168201909252611f2891810190612852565b60015b15611f34575050505b8115611f5257600d54611f50906001600160a01b031683612143565b505b50505f600b819055600c555050505050505b600d805460ff60a01b19169055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116659084906121b9565b6001600160a01b03831661203a5760405162461bcd60e51b815260040161080490612702565b6001600160a01b0382166120605760405162461bcd60e51b815260040161080490612747565b6001600160a01b0383165f90815260026020526040902054818110156120d75760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610804565b6001600160a01b038085165f8181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121369086815260200190565b60405180910390a3611858565b5f61214c61228c565b8147101561215b57505f6121b0565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f81146121a4576040519150601f19603f3d011682016040523d82523d5f602084013e6121a9565b606091505b5090925050505b61095360018055565b5f61220d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122e59092919063ffffffff16565b905080515f148061222d57508080602001905181019061222d919061287d565b6116655760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610804565b6002600154036122de5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610804565b6002600155565b60606122f384845f856122fb565b949350505050565b60608247101561235c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610804565b5f80866001600160a01b031685876040516123779190612898565b5f6040518083038185875af1925050503d805f81146123b1576040519150601f19603f3d011682016040523d82523d5f602084013e6123b6565b606091505b50915091506123c7878383876123d2565b979650505050505050565b606083156124405782515f03612439576001600160a01b0385163b6124395760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610804565b50816122f3565b6122f383838151156124555781518083602001fd5b8060405162461bcd60e51b815260040161080491906124b1565b5f8060408385031215612480575f80fd5b50508035926020909101359150565b5f5b838110156124a9578181015183820152602001612491565b50505f910152565b602081525f82518060208401526124cf81604085016020870161248f565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d3d575f80fd5b5f8060408385031215612508575f80fd5b8235612513816124e3565b946020939093013593505050565b8015158114610d3d575f80fd5b5f6020828403121561253e575f80fd5b813561254981612521565b9392505050565b5f805f60608486031215612562575f80fd5b833561256d816124e3565b9250602084013561257d816124e3565b929592945050506040919091013590565b5f6020828403121561259e575f80fd5b8135612549816124e3565b5f602082840312156125b9575f80fd5b5035919050565b5f80604083850312156125d1575f80fd5b82356125dc816124e3565b915060208301356125ec81612521565b809150509250929050565b5f8060408385031215612608575f80fd5b8235612613816124e3565b915060208301356125ec816124e3565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561095357610953612623565b600181811c9082168061265e57607f821691505b60208210810361267c57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b5f826126e657634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156126fb575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761095357610953612623565b8181038181111561095357610953612623565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156127d8575f80fd5b8151612549816124e3565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156128315784516001600160a01b03168352938301939183019160010161280c565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612864575f80fd5b8351925060208401519150604084015190509250925092565b5f6020828403121561288d575f80fd5b815161254981612521565b5f82516128a981846020870161248f565b919091019291505056fea2646970667358221220aed49778f03db51827c290eda4192241bceaf7cae0979803e8cbfc59f5bbeec064736f6c63430008150033

Deployed Bytecode Sourcemap

24089:13455:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28315:599;;;;;;;;;;-1:-1:-1;28315:599:0;;;;;:::i;:::-;;:::i;17717:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18715:226;;;;;;;;;;-1:-1:-1;18715:226:0;;;;;:::i;:::-;;:::i;:::-;;;1544:14:1;;1537:22;1519:41;;1507:2;1492:18;18715:226:0;1379:187:1;24186:30:0;;;;;;;;;;;;;;;;;;;1717:25:1;;;1705:2;1690:18;24186:30:0;1571:177:1;24616:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1943:32:1;;;1925:51;;1913:2;1898:18;24616:51:0;1753:229:1;18038:108:0;;;;;;;;;;-1:-1:-1;18126:12:0;;18038:108;;30595:224;;;;;;;;;;-1:-1:-1;30595:224:0;;;;;:::i;:::-;;:::i;18949:295::-;;;;;;;;;;-1:-1:-1;18949:295:0;;;;;:::i;:::-;;:::i;28922:617::-;;;;;;;;;;-1:-1:-1;28922:617:0;;;;;:::i;:::-;;:::i;24223:31::-;;;;;;;;;;;;;;;;17937:93;;;;;;;;;;-1:-1:-1;17937:93:0;;18020:2;2959:36:1;;2947:2;2932:18;17937:93:0;2817:184:1;19252:263:0;;;;;;;;;;-1:-1:-1;19252:263:0;;;;;:::i;:::-;;:::i;24300:31::-;;;;;;;;;;;;;;;;24674:38;;;;;;;;;;;;;;;32297:128;;;;;;;;;;-1:-1:-1;32297:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;32389:28:0;32365:4;32389:28;;;:19;:28;;;;;;;;;32297:128;24578:29;;;;;;;;;;-1:-1:-1;24578:29:0;;;;;;;;29547:580;;;;;;;;;;-1:-1:-1;29547:580:0;;;;;:::i;:::-;;:::i;24721:29::-;;;;;;;;;;;;;;;;37336:205;;;;;;;;;;;;;:::i;18154:143::-;;;;;;;;;;-1:-1:-1;18154:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18271:18:0;18244:7;18271:18;;;:9;:18;;;;;;;18154:143;23534:103;;;;;;;;;;;;;:::i;24427:35::-;;;;;;;;;;;;;;;;24263:30;;;;;;;;;;;;;;;;30827:463;;;;;;;;;;-1:-1:-1;30827:463:0;;;;;:::i;:::-;;:::i;24471:30::-;;;;;;;;;;-1:-1:-1;24471:30:0;;;;-1:-1:-1;;;;;24471:30:0;;;31764:154;;;;;;;;;;-1:-1:-1;31764:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;31877:33:0;31853:4;31877:33;;;:27;:33;;;;;;;;;31764:154;24385:35;;;;;;;;;;;;;;;;32433:616;;;;;;;;;;-1:-1:-1;32433:616:0;;;;;:::i;:::-;;:::i;23299:87::-;;;;;;;;;;-1:-1:-1;23345:7:0;23372:6;-1:-1:-1;;;;;23372:6:0;23299:87;;17825:104;;;;;;;;;;;;;:::i;24340:36::-;;;;;;;;;;;;;;;31300:456;;;;;;;;;;-1:-1:-1;31300:456:0;;;;;:::i;:::-;;:::i;19523:498::-;;;;;;;;;;-1:-1:-1;19523:498:0;;;;;:::i;:::-;;:::i;33057:164::-;;;;;;;;;;-1:-1:-1;33057:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;33175:38:0;33151:4;33175:38;;;:29;:38;;;;;;;;;33057:164;18305:218;;;;;;;;;;-1:-1:-1;18305:218:0;;;;;:::i;:::-;;:::i;30135:452::-;;;;;;;;;;-1:-1:-1;30135:452:0;;;;;:::i;:::-;;:::i;27362:490::-;;;;;;;;;;;;;:::i;31926:363::-;;;;;;;;;;-1:-1:-1;31926:363:0;;;;;:::i;:::-;;:::i;18531:176::-;;;;;;;;;;-1:-1:-1;18531:176:0;;;;;:::i;:::-;;:::i;24538:33::-;;;;;;;;;;;;;;;;23645:238;;;;;;;;;;-1:-1:-1;23645:238:0;;;;;:::i;:::-;;:::i;27860:447::-;;;;;;;;;;-1:-1:-1;27860:447:0;;;;;:::i;:::-;;:::i;28315:599::-;23258:13;:11;:13::i;:::-;28482:16:::1;28463:15;;:35;;:91;;;;28538:16;28519:15;;:35;;28463:91;28441:171;;;::::0;-1:-1:-1;;;28441:171:0;;4633:2:1;28441:171:0::1;::::0;::::1;4615:21:1::0;4672:2;4652:18;;;4645:30;4711:32;4691:18;;;4684:60;4761:18;;28441:171:0::1;;;;;;;;;28684:5;28645:35;28664:16:::0;28645;:35:::1;:::i;:::-;:44;;28623:125;;;::::0;-1:-1:-1;;;28623:125:0;;5254:2:1;28623:125:0::1;::::0;::::1;5236:21:1::0;5293:2;5273:18;;;5266:30;5332:33;5312:18;;;5305:61;5383:18;;28623:125:0::1;5052:355:1::0;28623:125:0::1;28761:15;:34:::0;;;28806:15:::1;:34:::0;;;28858:48:::1;::::0;;5586:25:1;;;5642:2;5627:18;;5620:34;;;28858:48:0::1;::::0;5559:18:1;28858:48:0::1;;;;;;;;28315:599:::0;;:::o;17717:100::-;17771:13;17804:5;17797:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17717:100;:::o;18715:226::-;18823:4;17177:10;18879:32;17177:10;18895:7;18904:6;18879:8;:32::i;:::-;18929:4;18922:11;;;18715:226;;;;;:::o;30595:224::-;23258:13;:11;:13::i;:::-;30670:17:::1;::::0;:27;::::1;;:17;::::0;;::::1;:27;;::::0;30662:66:::1;;;::::0;-1:-1:-1;;;30662:66:0;;6252:2:1;30662:66:0::1;::::0;::::1;6234:21:1::0;6291:2;6271:18;;;6264:30;6330:28;6310:18;;;6303:56;6376:18;;30662:66:0::1;6050:350:1::0;30662:66:0::1;30741:17;:26:::0;;-1:-1:-1;;30741:26:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30783:28:::1;::::0;1519:41:1;;;30783:28:0::1;::::0;1507:2:1;1492:18;30783:28:0::1;;;;;;;;30595:224:::0;:::o;18949:295::-;19080:4;17177:10;19138:38;19154:4;17177:10;19169:6;19138:15;:38::i;:::-;19187:27;19197:4;19203:2;19207:6;19187:9;:27::i;:::-;-1:-1:-1;19232:4:0;;18949:295;-1:-1:-1;;;;18949:295:0:o;28922:617::-;23258:13;:11;:13::i;:::-;29093:17:::1;29073:16;;:37;;:95;;;;29151:17;29131:16;;:37;;29073:95;29051:176;;;::::0;-1:-1:-1;;;29051:176:0;;6607:2:1;29051:176:0::1;::::0;::::1;6589:21:1::0;6646:2;6626:18;;;6619:30;6685:33;6665:18;;;6658:61;6736:18;;29051:176:0::1;6405:355:1::0;29051:176:0::1;29301:5;29260:37;29280:17:::0;29260;:37:::1;:::i;:::-;:46;;29238:128;;;::::0;-1:-1:-1;;;29238:128:0;;6967:2:1;29238:128:0::1;::::0;::::1;6949:21:1::0;;;6986:18;;;6979:30;7045:34;7025:18;;;7018:62;7097:18;;29238:128:0::1;6765:356:1::0;29238:128:0::1;29379:16;:36:::0;;;29426:16:::1;:36:::0;;;29480:51:::1;::::0;;5586:25:1;;;5642:2;5627:18;;5620:34;;;29480:51:0::1;::::0;5559:18:1;29480:51:0::1;5412:248:1::0;19252:263:0;19365:4;17177:10;19421:64;17177:10;19437:7;19474:10;19446:25;17177:10;19437:7;19446:9;:25::i;:::-;:38;;;;:::i;:::-;19421:8;:64::i;29547:580::-;23258:13;:11;:13::i;:::-;29673:15:::1;::::0;-1:-1:-1;;;;;29673:15:0;;::::1;29653:35:::0;;::::1;::::0;29631:125:::1;;;::::0;-1:-1:-1;;;29631:125:0;;7328:2:1;29631:125:0::1;::::0;::::1;7310:21:1::0;7367:2;7347:18;;;7340:30;7406:34;7386:18;;;7379:62;-1:-1:-1;;;7457:18:1;;;7450:38;7505:19;;29631:125:0::1;7126:404:1::0;29631:125:0::1;-1:-1:-1::0;;;;;29789:30:0;::::1;29767:123;;;::::0;-1:-1:-1;;;29767:123:0;;7737:2:1;29767:123:0::1;::::0;::::1;7719:21:1::0;7776:2;7756:18;;;7749:30;7815:34;7795:18;;;7788:62;-1:-1:-1;;;7866:18:1;;;7859:41;7917:19;;29767:123:0::1;7535:407:1::0;29767:123:0::1;-1:-1:-1::0;;;;;27323:19:0;;;:23;29901:116:::1;;;::::0;-1:-1:-1;;;29901:116:0;;8149:2:1;29901:116:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;8227:34;8207:18;;;8200:62;-1:-1:-1;;;8278:18:1;;;8271:35;8323:19;;29901:116:0::1;7947:401:1::0;29901:116:0::1;30030:15;:34:::0;;-1:-1:-1;;;;;;30030:34:0::1;-1:-1:-1::0;;;;;30030:34:0;::::1;::::0;;::::1;::::0;;;30080:39:::1;::::0;::::1;::::0;-1:-1:-1;;30080:39:0::1;29547:580:::0;:::o;37336:205::-;37431:4;37382:28;18271:18;;;:9;:18;;;;;;37458:24;37450:60;;;;-1:-1:-1;;;37450:60:0;;8555:2:1;37450:60:0;;;8537:21:1;8594:2;8574:18;;;8567:30;8633:25;8613:18;;;8606:53;8676:18;;37450:60:0;8353:347:1;37450:60:0;37523:10;:8;:10::i;:::-;37371:170;37336:205::o;23534:103::-;23258:13;:11;:13::i;:::-;23599:30:::1;23626:1;23599:18;:30::i;:::-;23534:103::o:0;30827:463::-;23258:13;:11;:13::i;:::-;30940:6:::1;30922:14;;:24:::0;30900:111:::1;;;::::0;-1:-1:-1;;;30900:111:0;;8907:2:1;30900:111:0::1;::::0;::::1;8889:21:1::0;8946:2;8926:18;;;8919:30;8985:34;8965:18;;;8958:62;-1:-1:-1;;;9036:18:1;;;9029:35;9081:19;;30900:111:0::1;8705:401:1::0;30900:111:0::1;31054:2;31044:6;:12;;:32;;;;;31070:6;31060;:16;;31044:32;31022:178;;;::::0;-1:-1:-1;;;31022:178:0;;9313:2:1;31022:178:0::1;::::0;::::1;9295:21:1::0;9352:2;9332:18;;;9325:30;9391:34;9371:18;;;9364:62;9462:34;9442:18;;;9435:62;9534:34;9513:19;;;9506:63;9586:19;;31022:178:0::1;9111:500:1::0;31022:178:0::1;31213:14;:23:::0;;;31254:28:::1;::::0;1717:25:1;;;31254:28:0::1;::::0;1705:2:1;1690:18;31254:28:0::1;1571:177:1::0;32433:616:0;23258:13;:11;:13::i;:::-;32599:4:::1;-1:-1:-1::0;;;;;32580:24:0;::::1;::::0;32558:123:::1;;;::::0;-1:-1:-1;;;32558:123:0;;9818:2:1;32558:123:0::1;::::0;::::1;9800:21:1::0;9857:2;9837:18;;;9830:30;9896:34;9876:18;;;9869:62;-1:-1:-1;;;9947:18:1;;;9940:47;10004:19;;32558:123:0::1;9616:413:1::0;32558:123:0::1;-1:-1:-1::0;;;;;32714:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;32692:142:::1;;;;-1:-1:-1::0;;;32692:142:0::1;;;;;;;:::i;:::-;32872:13;-1:-1:-1::0;;;;;32853:33:0::1;:7;-1:-1:-1::0;;;;;32853:33:0::1;::::0;32845:66:::1;;;::::0;-1:-1:-1;;;32845:66:0;;10647:2:1;32845:66:0::1;::::0;::::1;10629:21:1::0;10686:2;10666:18;;;10659:30;-1:-1:-1;;;10705:18:1;;;10698:50;10765:18;;32845:66:0::1;10445:344:1::0;32845:66:0::1;-1:-1:-1::0;;;;;32924:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;32924:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32991:50;;1519:41:1;;;32991:50:0::1;::::0;1492:18:1;32991:50:0::1;;;;;;;;32433:616:::0;;:::o;17825:104::-;17881:13;17914:7;17907:14;;;;;:::i;31300:456::-;23258:13;:11;:13::i;:::-;-1:-1:-1;;;;;31441:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;:43;::::1;;:33;::::0;;::::1;:43;;::::0;31419:138:::1;;;::::0;-1:-1:-1;;;31419:138:0;;10996:2:1;31419:138:0::1;::::0;::::1;10978:21:1::0;11035:2;11015:18;;;11008:30;11074:34;11054:18;;;11047:62;-1:-1:-1;;;11125:18:1;;;11118:43;11178:19;;31419:138:0::1;10794:409:1::0;31419:138:0::1;31592:13;-1:-1:-1::0;;;;;31576:30:0::1;:4;-1:-1:-1::0;;;;;31576:30:0::1;::::0;31568:63:::1;;;::::0;-1:-1:-1;;;31568:63:0;;10647:2:1;31568:63:0::1;::::0;::::1;10629:21:1::0;10686:2;10666:18;;;10659:30;-1:-1:-1;;;10705:18:1;;;10698:50;10765:18;;31568:63:0::1;10445:344:1::0;31568:63:0::1;-1:-1:-1::0;;;;;31644:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;;;;:42;;-1:-1:-1;;31644:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31704:44;;1519:41:1;;;31704:44:0::1;::::0;1492:18:1;31704:44:0::1;1379:187:1::0;19523:498:0;19641:4;17177:10;19641:4;19724:25;17177:10;19741:7;19724:9;:25::i;:::-;19697:52;;19802:15;19782:16;:35;;19760:122;;;;-1:-1:-1;;;19760:122:0;;11410:2:1;19760:122:0;;;11392:21:1;11449:2;11429:18;;;11422:30;11488:34;11468:18;;;11461:62;-1:-1:-1;;;11539:18:1;;;11532:35;11584:19;;19760:122:0;11208:401:1;19760:122:0;19918:60;19927:5;19934:7;19962:15;19943:16;:34;19918:8;:60::i;18305:218::-;18409:4;17177:10;18465:28;17177:10;18482:2;18486:6;18465:9;:28::i;30135:452::-;23258:13;:11;:13::i;:::-;30256:6:::1;30234:18;;:28:::0;30212:119:::1;;;::::0;-1:-1:-1;;;30212:119:0;;11816:2:1;30212:119:0::1;::::0;::::1;11798:21:1::0;11855:2;11835:18;;;11828:30;11894:34;11874:18;;;11867:62;-1:-1:-1;;;11945:18:1;;;11938:39;11994:19;;30212:119:0::1;11614:405:1::0;30212:119:0::1;30390:9;30374:13;18126:12:::0;;;18038:108;30374:13:::1;:25;;;;:::i;:::-;30364:6;:35;;30342:147;;;::::0;-1:-1:-1;;;30342:147:0;;12448:2:1;30342:147:0::1;::::0;::::1;12430:21:1::0;12487:2;12467:18;;;12460:30;12526:34;12506:18;;;12499:62;12597:32;12577:18;;;12570:60;12647:19;;30342:147:0::1;12246:426:1::0;30342:147:0::1;30502:18;:27:::0;;;30547:32:::1;::::0;1717:25:1;;;30547:32:0::1;::::0;1705:2:1;1690:18;30547:32:0::1;1571:177:1::0;27362:490:0;27411:7;27435:13;27452:2;27435:19;27431:414;;-1:-1:-1;27478:42:0;;27362:490::o;27431:414::-;27542:13;27559:2;27542:19;27538:307;;-1:-1:-1;27585:42:0;;27362:490::o;27538:307::-;27649:13;27666:1;27649:18;:40;;;;27671:13;27688:1;27671:18;27649:40;27645:200;;;-1:-1:-1;27713:42:0;;27362:490::o;27645:200::-;27788:45;;-1:-1:-1;;;27788:45:0;;12879:2:1;27788:45:0;;;12861:21:1;12918:2;12898:18;;;12891:30;12957:34;12937:18;;;12930:62;-1:-1:-1;;;13008:18:1;;;13001:33;13051:19;;27788:45:0;12677:399:1;31926:363:0;23258:13;:11;:13::i;:::-;-1:-1:-1;;;;;32063:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;32041:132:::1;;;;-1:-1:-1::0;;;32041:132:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32184:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;32184:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32241:40;;1519:41:1;;;32241:40:0::1;::::0;1492:18:1;32241:40:0::1;1379:187:1::0;18531:176:0;-1:-1:-1;;;;;18672:18:0;;;18645:7;18672:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18531:176::o;23645:238::-;23258:13;:11;:13::i;:::-;-1:-1:-1;;;;;23748:22:0;::::1;23726:110;;;::::0;-1:-1:-1;;;23726:110:0;;13283:2:1;23726:110:0::1;::::0;::::1;13265:21:1::0;13322:2;13302:18;;;13295:30;13361:34;13341:18;;;13334:62;-1:-1:-1;;;13412:18:1;;;13405:36;13458:19;;23726:110:0::1;13081:402:1::0;23726:110:0::1;23847:28;23866:8;23847:18;:28::i;27860:447::-:0;23258:13;:11;:13::i;:::-;27956:4:::1;-1:-1:-1::0;;;;;27939:22:0;::::1;::::0;27931:67:::1;;;::::0;-1:-1:-1;;;27931:67:0;;13690:2:1;27931:67:0::1;::::0;::::1;13672:21:1::0;;;13709:18;;;13702:30;13768:34;13748:18;;;13741:62;13820:18;;27931:67:0::1;13488:356:1::0;27931:67:0::1;-1:-1:-1::0;;;;;28015:21:0;::::1;28011:126;;28053:51;::::0;28061:10:::1;::::0;28082:21:::1;28053:51:::0;::::1;;;::::0;::::1;::::0;;;28082:21;28061:10;28053:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37371:170:::0;37336:205::o;28011:126::-:1;28209:35;::::0;-1:-1:-1;;;28209:35:0;;28238:4:::1;28209:35;::::0;::::1;1925:51:1::0;28174:5:0;;28147:17:::1;::::0;-1:-1:-1;;;;;28209:20:0;::::1;::::0;::::1;::::0;1898:18:1;;28209:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28191:53:::0;-1:-1:-1;28255:44:0::1;-1:-1:-1::0;;;;;28255:23:0;::::1;28279:10;28191:53:::0;28255:23:::1;:44::i;:::-;27920:387;;27860:447:::0;:::o;23394:132::-;23345:7;23372:6;-1:-1:-1;;;;;23372:6:0;17177:10;23458:23;23450:68;;;;-1:-1:-1;;;23450:68:0;;14240:2:1;23450:68:0;;;14222:21:1;;;14259:18;;;14252:30;14318:34;14298:18;;;14291:62;14370:18;;23450:68:0;14038:356:1;21799:380:0;-1:-1:-1;;;;;21935:19:0;;21927:68;;;;-1:-1:-1;;;21927:68:0;;14601:2:1;21927:68:0;;;14583:21:1;14640:2;14620:18;;;14613:30;14679:34;14659:18;;;14652:62;-1:-1:-1;;;14730:18:1;;;14723:34;14774:19;;21927:68:0;14399:400:1;21927:68:0;-1:-1:-1;;;;;22014:21:0;;22006:68;;;;-1:-1:-1;;;22006:68:0;;15006:2:1;22006:68:0;;;14988:21:1;15045:2;15025:18;;;15018:30;15084:34;15064:18;;;15057:62;-1:-1:-1;;;15135:18:1;;;15128:32;15177:19;;22006:68:0;14804:398:1;22006:68:0;-1:-1:-1;;;;;22087:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22139:32;;1717:25:1;;;22139:32:0;;1690:18:1;22139:32:0;;;;;;;21799:380;;;:::o;22187:502::-;22322:24;22349:25;22359:5;22366:7;22349:9;:25::i;:::-;22322:52;;-1:-1:-1;;22389:16:0;:37;22385:297;;22489:6;22469:16;:26;;22443:117;;;;-1:-1:-1;;;22443:117:0;;15409:2:1;22443:117:0;;;15391:21:1;15448:2;15428:18;;;15421:30;15487:31;15467:18;;;15460:59;15536:18;;22443:117:0;15207:353:1;22443:117:0;22604:51;22613:5;22620:7;22648:6;22629:16;:25;22604:8;:51::i;:::-;22311:378;22187:502;;;:::o;33229:2206::-;-1:-1:-1;;;;;33361:18:0;;33353:68;;;;-1:-1:-1;;;33353:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33440:16:0;;33432:64;;;;-1:-1:-1;;;33432:64:0;;;;;;;:::i;:::-;33513:6;33523:1;33513:11;33509:93;;33541:28;33557:4;33563:2;33567:1;33541:15;:28::i;33509:93::-;33663:4;33614:28;18271:18;;;:9;:18;;;;;;33721;;33697:42;;;;;;;33770:33;;-1:-1:-1;33795:8:0;;-1:-1:-1;;;33795:8:0;;;;33794:9;33770:33;:84;;;;-1:-1:-1;;;;;;33821:33:0;;;;;;:27;:33;;;;;;;;33820:34;33770:84;:118;;;;-1:-1:-1;33871:17:0;;;;33770:118;:182;;;;;33951:1;33928:20;;33905;;:43;;;;:::i;:::-;:47;33770:182;33752:249;;;33979:10;:8;:10::i;:::-;-1:-1:-1;;;;;34049:25:0;;34013:12;34049:25;;;:19;:25;;;;;;34028:4;;34049:25;;;:52;;-1:-1:-1;;;;;;34078:23:0;;;;;;:19;:23;;;;;;;;34049:52;:64;;;-1:-1:-1;34105:8:0;;-1:-1:-1;;;34105:8:0;;;;34049:64;34045:112;;;-1:-1:-1;34140:5:0;34045:112;-1:-1:-1;;;;;34175:33:0;;;;;;:29;:33;;;;;;;;34170:294;;34345:11;34327:14;;34311:13;18126:12;;;18038:108;34311:13;:30;;;;:::i;:::-;34310:46;;;;:::i;:::-;34275:6;34259:13;34269:2;-1:-1:-1;;;;;18271:18:0;18244:7;18271:18;;;:9;:18;;;;;;;18154:143;34259:13;:22;;;;:::i;:::-;:97;;34229:219;;;;-1:-1:-1;;;34229:219:0;;16750:2:1;34229:219:0;;;16732:21:1;16789:2;16769:18;;;16762:30;16828:34;16808:18;;;16801:62;-1:-1:-1;;;16879:18:1;;;16872:46;16935:19;;34229:219:0;16548:412:1;34229:219:0;34490:7;34486:896;;;-1:-1:-1;;;;;34604:33:0;;34514:27;34604:33;;;:27;:33;;;;;;34514:27;;34604:33;;34600:440;;;34709:11;34690:15;;34681:6;:24;;;;:::i;:::-;34680:40;;;;:::i;:::-;34658:62;;34790:11;34771:15;;34762:6;:24;;;;:::i;:::-;34761:40;;;;:::i;:::-;34739:62;;34600:440;;;-1:-1:-1;;;;;34827:31:0;;;;;;:27;:31;;;;;;;;34823:217;;;34931:11;34911:16;;34902:6;:25;;;;:::i;:::-;34901:41;;;;:::i;:::-;34879:63;;35013:11;34993:16;;34984:6;:25;;;;:::i;:::-;34983:41;;;;:::i;:::-;34961:63;;34823:217;35080:19;35056:20;;:43;;;;;;;:::i;:::-;;;;;;;;35138:19;35114:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;35174:12:0;;-1:-1:-1;35189:41:0;35211:19;35189;:41;:::i;:::-;35174:56;-1:-1:-1;35251:8:0;;35247:124;;35280:14;35290:4;35280:14;;:::i;:::-;;;35313:42;35329:4;35343;35350;35313:15;:42::i;:::-;34499:883;;;34486:896;35394:33;35410:4;35416:2;35420:6;35394:15;:33::i;:::-;33342:2093;;;33229:2206;;;:::o;35443:1607::-;24985:8;:15;;-1:-1:-1;;;;24985:15:0;-1:-1:-1;;;24985:15:0;;;35514:16:::1;::::0;;35528:1:::1;35514:16:::0;;;;;::::1;::::0;;-1:-1:-1;;35514:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;35514:16:0::1;35490:40;;35559:4;35541;35546:1;35541:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;35541:23:0::1;;;-1:-1:-1::0;;;;;35541:23:0::1;;;::::0;::::1;35585:15;-1:-1:-1::0;;;;;35585:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35575:4;35580:1;35575:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35575:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:32;35669:4:::1;35620:28;18271:18:::0;;;:9;:18;;;;;;;35620:55:::1;;35688:16;35730:20;;35707;;:43;;;;:::i;:::-;35688:62;;35763:20;35853:8;35847:1;35824:20;;:24;;;;:::i;:::-;35787:62;::::0;:20;:62:::1;:::i;:::-;35786:75;;;;:::i;:::-;35763:98:::0;-1:-1:-1;35874:22:0::1;35899:35;35763:98:::0;35899:20;:35:::1;:::i;:::-;35874:60;;35984:1;35960:20;;35959:26;;;;:::i;:::-;35947:38;::::0;;::::1;:::i;:::-;36015:223;::::0;-1:-1:-1;;;36015:223:0;;35947:38;;-1:-1:-1;;;;;;36015:15:0::1;:66;::::0;::::1;::::0;:223:::1;::::0;36100:14;;36133:1:::1;::::0;36153:4;;36184::::1;::::0;36208:15:::1;::::0;36015:223:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;35998:292;;36272:7;;;;;;;35998:292;36394:20;::::0;36323:21:::1;::::0;36302:18:::1;::::0;36418:8;;36381:33:::1;::::0;36323:21;36381:33:::1;:::i;:::-;36380:46;;;;:::i;:::-;36357:69:::0;-1:-1:-1;36437:18:0::1;36458:25;36357:69:::0;36458:10;:25:::1;:::i;:::-;36437:46;;36515:1;36500:12;:16;:34;;;;;36533:1;36520:10;:14;36500:34;36496:376;;;36572:264;::::0;-1:-1:-1;;;36572:264:0;;36653:4:::1;36572:264;::::0;::::1;18944:34:1::0;18994:18;;;18987:34;;;36716:1:0::1;19037:18:1::0;;;19030:34;;;19080:18;;;19073:34;36772:6:0::1;19123:19:1::0;;;19116:44;36802:15:0::1;19176:19:1::0;;;19169:35;36572:15:0::1;-1:-1:-1::0;;;;;36572:31:0::1;::::0;::::1;::::0;36611:10;;18878:19:1;;36572:264:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;36572:264:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;36572:264:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;36551:310:::0;::::1;;;;;;36888:16:::0;;36884:87:::1;;36929:15;::::0;36921:38:::1;::::0;-1:-1:-1;;;;;36929:15:0::1;36946:12:::0;36921:7:::1;:38::i;:::-;;36884:87;-1:-1:-1::0;;37006:1:0::1;36983:20;:24:::0;;;37018:20:::1;:24:::0;-1:-1:-1;;;;;;25011:1:0::1;25023:8:::0;:16;;-1:-1:-1;;;;25023:16:0;;;35443:1607::o;23891:191::-;23965:16;23984:6;;-1:-1:-1;;;;;24001:17:0;;;-1:-1:-1;;;;;;24001:17:0;;;;;;24034:40;;23984:6;;;;;;;24034:40;;23965:16;24034:40;23954:128;23891:191;:::o;12264:214::-;12401:58;;;-1:-1:-1;;;;;19718:32:1;;12401:58:0;;;19700:51:1;19767:18;;;;19760:34;;;12401:58:0;;;;;;;;;;19673:18:1;;;;12401:58:0;;;;;;;;-1:-1:-1;;;;;12401:58:0;-1:-1:-1;;;12401:58:0;;;12347:123;;12381:5;;12347:19;:123::i;20029:714::-;-1:-1:-1;;;;;20160:18:0;;20152:68;;;;-1:-1:-1;;;20152:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20239:16:0;;20231:64;;;;-1:-1:-1;;;20231:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20381:15:0;;20359:19;20381:15;;;:9;:15;;;;;;20429:21;;;;20407:109;;;;-1:-1:-1;;;20407:109:0;;20007:2:1;20407:109:0;;;19989:21:1;20046:2;20026:18;;;20019:30;20085:34;20065:18;;;20058:62;-1:-1:-1;;;20136:18:1;;;20129:36;20182:19;;20407:109:0;19805:402:1;20407:109:0;-1:-1:-1;;;;;20552:15:0;;;;;;;:9;:15;;;;;;20570:20;;;20552:38;;20607:13;;;;;;;;;;:23;;;;;;20659:26;;;;;;20584:6;1717:25:1;;1705:2;1690:18;;1571:177;20659:26:0;;;;;;;;20698:37;27860:447;37058:270;37160:4;16621:21;:19;:21::i;:::-;37205:6:::1;37181:21;:30;37177:48;;;-1:-1:-1::0;37220:5:0::1;37213:12;;37177:48;37239:12;37265:3;-1:-1:-1::0;;;;;37257:17:0::1;37282:6;37257:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;37238:55:0;;-1:-1:-1;;;16653:1:0::1;16665:20:::0;16437:1;16910:22;;16861:79;15372:380;15453:23;15479:106;15521:4;15479:106;;;;;;;;;;;;;;;;;15487:5;-1:-1:-1;;;;;15479:27:0;;;:106;;;;;:::i;:::-;15453:132;;15618:10;:17;15639:1;15618:22;:56;;;;15655:10;15644:30;;;;;;;;;;;;:::i;:::-;15596:148;;;;-1:-1:-1;;;15596:148:0;;20874:2:1;15596:148:0;;;20856:21:1;20913:2;20893:18;;;20886:30;20952:34;20932:18;;;20925:62;-1:-1:-1;;;21003:18:1;;;20996:40;21053:19;;15596:148:0;20672:406:1;16701:152:0;16481:1;16759:7;;:19;16751:63;;;;-1:-1:-1;;;16751:63:0;;21285:2:1;16751:63:0;;;21267:21:1;21324:2;21304:18;;;21297:30;21363:33;21343:18;;;21336:61;21414:18;;16751:63:0;21083:355:1;16751:63:0;16481:1;16827:7;:18;16701:152::o;7069:229::-;7206:12;7238:52;7260:6;7268:4;7274:1;7277:12;7238:21;:52::i;:::-;7231:59;7069:229;-1:-1:-1;;;;7069:229:0:o;7670:612::-;7840:12;7912:5;7887:21;:30;;7865:118;;;;-1:-1:-1;;;7865:118:0;;21645:2:1;7865:118:0;;;21627:21:1;21684:2;21664:18;;;21657:30;21723:34;21703:18;;;21696:62;-1:-1:-1;;;21774:18:1;;;21767:36;21820:19;;7865:118:0;21443:402:1;7865:118:0;7995:12;8009:23;8036:6;-1:-1:-1;;;;;8036:11:0;8055:5;8076:4;8036:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7994:97;;;;8122:152;8167:6;8192:7;8218:10;8247:12;8122:26;:152::i;:::-;8102:172;7670:612;-1:-1:-1;;;;;;;7670:612:0:o;9786:477::-;9971:12;10000:7;9996:260;;;10028:10;:17;10049:1;10028:22;10024:123;;-1:-1:-1;;;;;27323:19:0;;;10071:60;;;;-1:-1:-1;;;10071:60:0;;22344:2:1;10071:60:0;;;22326:21:1;22383:2;22363:18;;;22356:30;22422:31;22402:18;;;22395:59;22471:18;;10071:60:0;22142:353:1;10071:60:0;-1:-1:-1;10168:10:0;10161:17;;9996:260;10211:33;10219:10;10231:12;10707:17;;:21;10703:299;;10850:10;10844:17;10907:15;10894:10;10890:2;10886:19;10879:44;10703:299;10977:12;10970:20;;-1:-1:-1;;;10970:20:0;;;;;;;;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:250::-;352:1;362:113;376:6;373:1;370:13;362:113;;;452:11;;;446:18;433:11;;;426:39;398:2;391:10;362:113;;;-1:-1:-1;;509:1:1;491:16;;484:27;267:250::o;522:396::-;671:2;660:9;653:21;634:4;703:6;697:13;746:6;741:2;730:9;726:18;719:34;762:79;834:6;829:2;818:9;814:18;809:2;801:6;797:15;762:79;:::i;:::-;902:2;881:15;-1:-1:-1;;877:29:1;862:45;;;;909:2;858:54;;522:396;-1:-1:-1;;522:396:1:o;923:131::-;-1:-1:-1;;;;;998:31:1;;988:42;;978:70;;1044:1;1041;1034:12;1059:315;1127:6;1135;1188:2;1176:9;1167:7;1163:23;1159:32;1156:52;;;1204:1;1201;1194:12;1156:52;1243:9;1230:23;1262:31;1287:5;1262:31;:::i;:::-;1312:5;1364:2;1349:18;;;;1336:32;;-1:-1:-1;;;1059:315:1:o;1987:118::-;2073:5;2066:13;2059:21;2052:5;2049:32;2039:60;;2095:1;2092;2085:12;2110:241;2166:6;2219:2;2207:9;2198:7;2194:23;2190:32;2187:52;;;2235:1;2232;2225:12;2187:52;2274:9;2261:23;2293:28;2315:5;2293:28;:::i;:::-;2340:5;2110:241;-1:-1:-1;;;2110:241:1:o;2356:456::-;2433:6;2441;2449;2502:2;2490:9;2481:7;2477:23;2473:32;2470:52;;;2518:1;2515;2508:12;2470:52;2557:9;2544:23;2576:31;2601:5;2576:31;:::i;:::-;2626:5;-1:-1:-1;2683:2:1;2668:18;;2655:32;2696:33;2655:32;2696:33;:::i;:::-;2356:456;;2748:7;;-1:-1:-1;;;2802:2:1;2787:18;;;;2774:32;;2356:456::o;3214:247::-;3273:6;3326:2;3314:9;3305:7;3301:23;3297:32;3294:52;;;3342:1;3339;3332:12;3294:52;3381:9;3368:23;3400:31;3425:5;3400:31;:::i;3466:180::-;3525:6;3578:2;3566:9;3557:7;3553:23;3549:32;3546:52;;;3594:1;3591;3584:12;3546:52;-1:-1:-1;3617:23:1;;3466:180;-1:-1:-1;3466:180:1:o;3651:382::-;3716:6;3724;3777:2;3765:9;3756:7;3752:23;3748:32;3745:52;;;3793:1;3790;3783:12;3745:52;3832:9;3819:23;3851:31;3876:5;3851:31;:::i;:::-;3901:5;-1:-1:-1;3958:2:1;3943:18;;3930:32;3971:30;3930:32;3971:30;:::i;:::-;4020:7;4010:17;;;3651:382;;;;;:::o;4038:388::-;4106:6;4114;4167:2;4155:9;4146:7;4142:23;4138:32;4135:52;;;4183:1;4180;4173:12;4135:52;4222:9;4209:23;4241:31;4266:5;4241:31;:::i;:::-;4291:5;-1:-1:-1;4348:2:1;4333:18;;4320:32;4361:33;4320:32;4361:33;:::i;4790:127::-;4851:10;4846:3;4842:20;4839:1;4832:31;4882:4;4879:1;4872:15;4906:4;4903:1;4896:15;4922:125;4987:9;;;5008:10;;;5005:36;;;5021:18;;:::i;5665:380::-;5744:1;5740:12;;;;5787;;;5808:61;;5862:4;5854:6;5850:17;5840:27;;5808:61;5915:2;5907:6;5904:14;5884:18;5881:38;5878:161;;5961:10;5956:3;5952:20;5949:1;5942:31;5996:4;5993:1;5986:15;6024:4;6021:1;6014:15;5878:161;;5665:380;;;:::o;10034:406::-;10236:2;10218:21;;;10275:2;10255:18;;;10248:30;10314:34;10309:2;10294:18;;10287:62;-1:-1:-1;;;10380:2:1;10365:18;;10358:40;10430:3;10415:19;;10034:406::o;12024:217::-;12064:1;12090;12080:132;;12134:10;12129:3;12125:20;12122:1;12115:31;12169:4;12166:1;12159:15;12197:4;12194:1;12187:15;12080:132;-1:-1:-1;12226:9:1;;12024:217::o;13849:184::-;13919:6;13972:2;13960:9;13951:7;13947:23;13943:32;13940:52;;;13988:1;13985;13978:12;13940:52;-1:-1:-1;14011:16:1;;13849:184;-1:-1:-1;13849:184:1:o;15565:401::-;15767:2;15749:21;;;15806:2;15786:18;;;15779:30;15845:34;15840:2;15825:18;;15818:62;-1:-1:-1;;;15911:2:1;15896:18;;15889:35;15956:3;15941:19;;15565:401::o;15971:399::-;16173:2;16155:21;;;16212:2;16192:18;;;16185:30;16251:34;16246:2;16231:18;;16224:62;-1:-1:-1;;;16317:2:1;16302:18;;16295:33;16360:3;16345:19;;15971:399::o;16375:168::-;16448:9;;;16479;;16496:15;;;16490:22;;16476:37;16466:71;;16517:18;;:::i;16965:128::-;17032:9;;;17053:11;;;17050:37;;;17067:18;;:::i;17230:127::-;17291:10;17286:3;17282:20;17279:1;17272:31;17322:4;17319:1;17312:15;17346:4;17343:1;17336:15;17362:251;17432:6;17485:2;17473:9;17464:7;17460:23;17456:32;17453:52;;;17501:1;17498;17491:12;17453:52;17533:9;17527:16;17552:31;17577:5;17552:31;:::i;17618:980::-;17880:4;17928:3;17917:9;17913:19;17959:6;17948:9;17941:25;17985:2;18023:6;18018:2;18007:9;18003:18;17996:34;18066:3;18061:2;18050:9;18046:18;18039:31;18090:6;18125;18119:13;18156:6;18148;18141:22;18194:3;18183:9;18179:19;18172:26;;18233:2;18225:6;18221:15;18207:29;;18254:1;18264:195;18278:6;18275:1;18272:13;18264:195;;;18343:13;;-1:-1:-1;;;;;18339:39:1;18327:52;;18434:15;;;;18399:12;;;;18375:1;18293:9;18264:195;;;-1:-1:-1;;;;;;;18515:32:1;;;;18510:2;18495:18;;18488:60;-1:-1:-1;;;18579:3:1;18564:19;18557:35;18476:3;17618:980;-1:-1:-1;;;17618:980:1:o;19215:306::-;19303:6;19311;19319;19372:2;19360:9;19351:7;19347:23;19343:32;19340:52;;;19388:1;19385;19378:12;19340:52;19417:9;19411:16;19401:26;;19467:2;19456:9;19452:18;19446:25;19436:35;;19511:2;19500:9;19496:18;19490:25;19480:35;;19215:306;;;;;:::o;20422:245::-;20489:6;20542:2;20530:9;20521:7;20517:23;20513:32;20510:52;;;20558:1;20555;20548:12;20510:52;20590:9;20584:16;20609:28;20631:5;20609:28;:::i;21850:287::-;21979:3;22017:6;22011:13;22033:66;22092:6;22087:3;22080:4;22072:6;22068:17;22033:66;:::i;:::-;22115:16;;;;;21850:287;-1:-1:-1;;21850:287:1:o

Swarm Source

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