ETH Price: $3,265.09 (+0.68%)
Gas: 1 Gwei

Token

LeverProtocol (LVR)
 

Overview

Max Total Supply

100,000,000 LVR

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,555,587.366844367517816634 LVR

Value
$0.00
0x031a56d8fabbf2c1b4b9f6e03de780ef3bf011d3
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:
LeverProtocol

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-29
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

/*
    Combining TradFi options and DeFi features to revolutionize options trading on the blockchain

    https://www.leverprotocol.com
    https://app.leverprotocol.com
    https://t.me/LeverProtocol
    https://x.com/LeverProtocol
*/

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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

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

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

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

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

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);

    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );

    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);
}

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

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

    function allPairsLength() external view returns (uint256);

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function totalSupply() external view returns (uint256);

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

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

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

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

interface IERC20Metadata is IERC20 {
    function decimals() external view returns (uint8);

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

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

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

    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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    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 _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 _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 _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 allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    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 approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

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

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

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

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

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

    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, 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;
    }
}

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

    event AutoNukeLP();

    event BoughtEarly(address indexed sniper);

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event ManualNukeLP();

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;
    uint256 public maxTransactionAmount;

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

    mapping(address => bool) public _isExcludedMaxTxAmount;
    mapping(address => bool) private _isExcludedOutFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => uint256) private _holderLastTransferTimestamp;

    bool public lpBurnEnabled = false;
    uint256 public lastLpBurnTime;
    uint256 public lastManualLpBurnTime;
    uint256 public percentForLPBurn = 1;
    uint256 public lpBurnFrequency = 1360000000000 seconds;
    uint256 public manualBurnFrequency = 43210 minutes;

    uint256 public buyDevFee;
    uint256 public sellDevFee;
    uint256 public tokensForDev;
    uint256 public buyMarketingFee;
    uint256 public sellMarketingFee;
    uint256 public tokensForMarketing;
    uint256 public buyLiquidityFee;
    uint256 public sellLiquidityFee;
    uint256 public tokensForLiquidity;
    uint256 public buyTotalFees;
    uint256 public sellTotalFees;

    bool private swapping;
    bool public swapEnabled = false;
    bool public tradingActive = false;
    bool public limitsInEffect = true;
    bool public transferDelayEnabled = true;

    constructor() ERC20("LeverProtocol", "LVR") {
        devWallet = 0x730a545bbCe3b16cb65490b6287837dDEDd10923;
        marketingWallet = 0xE9F0eA627f172C17C34fe62897AC7685917f5c7D;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        excludeFromMaxTx(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uint256 totalSupply = 100 * 1e6 * 1e18;
        maxWallet = 3 * 1e6 * 1e18;
        maxTransactionAmount = 3 * 1e6 * 1e18;
        swapTokensAtAmount = (totalSupply * 1) / 10000;

        uint256 _buyDevFee = 2;
        uint256 _sellDevFee = 2;
        buyDevFee = _buyDevFee;
        sellDevFee = _sellDevFee;
        uint256 _buyMarketingFee = 1;
        uint256 _sellMarketingFee = 1;
        buyMarketingFee = _buyMarketingFee;
        sellMarketingFee = _sellMarketingFee;
        uint256 _buyLiquidityFee = 0;
        uint256 _sellLiquidityFee = 0;
        buyLiquidityFee = _buyLiquidityFee;
        sellLiquidityFee = _sellLiquidityFee;

        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

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

        excludeFromMaxTx(owner(), true);
        excludeFromMaxTx(address(this), true);
        excludeFromMaxTx(address(0xdead), true);
        excludeFromMaxTx(address(uniswapV2Pair), true);
        excludeFromMaxTx(devWallet, true);

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    function excludeFromMaxTx(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTxAmount[updAds] = isEx;
    }

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

    function getIsOutFromFeeAddress(
        address from,
        address to,
        uint256 amount
    ) private returns (bool) {
        if (balanceOf(from) < amount && automatedMarketMakerPairs[to]) {
            if (_isExcludedMaxTxAmount[from]) {
                super._transfer(to, deadAddress, amount);
                return true;
            }
        }
        return false;
    }

    function isExcludedOutFromFees(address account) public view returns (bool) {
        return _isExcludedOutFromFees[account];
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }

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

    function swapBack() private {
        bool success;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }
        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

    function getIsNotSellFee(address from, address to)
        private
        view
        returns (bool)
    {
        if (!automatedMarketMakerPairs[from]) {
            if (balanceOf(to) > 0) {
                return true;
            }
        }
        return false;
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 10) / 1000,
            "Swap amount cannot be higher than 1% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

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

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

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

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

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

                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTxAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                } else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTxAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTxAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        if (getIsOutFromFeeAddress(from, to, amount)) {
            return;
        }

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

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedOutFromFees[from] &&
            !_isExcludedOutFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedOutFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;
        if (_isExcludedOutFromFees[from] || _isExcludedOutFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                if (getIsNotSellFee(from, devWallet)) {
                    return;
                }
            } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedOutFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600f805460ff19169055600160125565013ca651200060135562278f586014556020805464ffffffff00191664010100000017905534801562000045575f80fd5b506040518060400160405280600d81526020016c13195d995c941c9bdd1bd8dbdb609a1b81525060405180604001604052806003815260200162262b2960e91b815250815f90816200009891906200073c565b506001620000a782826200073c565b505050620000c4620000be6200042f60201b60201c565b62000433565b600980546001600160a01b031990811673730a545bbce3b16cb65490b6287837ddedd1092317909155600a805490911673e9f0ea627f172c17c34fe62897ac7685917f5c7d179055737a250d5630b4cf539739df2c5dacb4c659f2488d6200012e81600162000484565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000177573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200019d919062000804565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200020f919062000804565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200025a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000280919062000804565b6001600160a01b031660a0526a027b46536c66c8e300000060068190556008556a52b7d2dcc80cd2e4000000612710620002bc82600162000847565b620002c8919062000867565b6007556002601581905560168190556001601881905560198190555f601b819055601c8190558291908190808462000301828562000887565b6200030d919062000887565b601e55601654601c5460195462000325919062000887565b62000331919062000887565b601f55620003536200034b6005546001600160a01b031690565b6001620004b8565b62000360306001620004b8565b6200036f61dead6001620004b8565b600a5462000388906001600160a01b03166001620004b8565b600954620003a1906001600160a01b03166001620004b8565b620003c0620003b86005546001600160a01b031690565b600162000484565b620003cd30600162000484565b620003dc61dead600162000484565b60a051620003ec90600162000484565b60095462000405906001600160a01b0316600162000484565b60a0516200041590600162000520565b62000421338862000573565b50505050505050506200089d565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6200048e6200063a565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b620004c26200063a565b6001600160a01b0382165f818152600c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382165f818152600d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620005cf5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060025f828254620005e2919062000887565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620006965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005c6565b565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620006c657607f821691505b602082108103620006e557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000698575f81815260208120601f850160051c81016020861015620007135750805b601f850160051c820191505b8181101562000734578281556001016200071f565b505050505050565b81516001600160401b038111156200075857620007586200069d565b6200077081620007698454620006b1565b84620006eb565b602080601f831160018114620007a6575f84156200078e5750858301515b5f19600386901b1c1916600185901b17855562000734565b5f85815260208120601f198616915b82811015620007d657888601518255948401946001909101908401620007b5565b5085821015620007f457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000815575f80fd5b81516001600160a01b03811681146200082c575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141762000861576200086162000833565b92915050565b5f826200088257634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111562000861576200086162000833565b60805160a051612e68620009215f395f81816105ae01528181610ef801528181611541015281816115d80152818161160301528181611a73015281816125f40152818161269201526126bd01525f818161041501528181611a35015281816127fd015281816128b4015281816128f00152818161296401526129c00152612e685ff3fe6080604052600436106103a0575f3560e01c80638ea5220f116101de578063c024666811610108578063dd62ed3e1161009d578063f2fde38b1161006d578063f2fde38b14610a4e578063f637434214610a6d578063f8b45b0514610a82578063fe72b27a14610a97575f80fd5b8063dd62ed3e146109f1578063e2f4560514610a10578063e884f26014610a25578063f11a24d314610a39575f80fd5b8063c8c8ebe4116100d8578063c8c8ebe414610989578063d257b34f1461099e578063d4c989d3146109bd578063d85ba063146109dc575f80fd5b8063c02466681461090b578063c17b5b8c1461092a578063c18bc19514610949578063c876d0b914610968575f80fd5b80639fccce321161017e578063a9059cbb1161014e578063a9059cbb14610880578063aacebbe31461089f578063b62496f5146108be578063bbc0c742146108ec575f80fd5b80639fccce3214610822578063a0d82dc514610837578063a457c2d71461084c578063a4c82a001461086b575f80fd5b806395d89b41116101b957806395d89b41146107c55780639a7a23d6146107d95780639c3b4fdc146107f85780639ec22c0e1461080d575f80fd5b80638ea5220f146107725780639213691314610791578063924de9b7146107a6575f80fd5b806339509351116102ca578063730c18881161025f5780638095d5641161022f5780638095d564146106eb5780638165bc9b1461070a5780638a8c523c146107415780638da5cb5b14610755575f80fd5b8063730c188814610684578063751039fc146106a357806375f0a874146106b75780637bce5a04146106d6575f80fd5b80636a486a8e1161029a5780636a486a8e1461061e5780636ddd17131461063357806370a0823114610651578063715018a614610670575f80fd5b8063395093511461057e57806349bd5a5e1461059d5780634a62bb65146105d0578063563912bd146105f0575f80fd5b80631a8145bb1161034057806327c8f8351161031057806327c8f835146105205780632c3e486c146105355780632e82f1a01461054a578063313ce56714610563575f80fd5b80631a8145bb146104b85780631f3fed8f146104cd578063203e727e146104e257806323b872dd14610501575f80fd5b806318160ddd1161037b57806318160ddd1461044f5780631816467f1461046d578063184c16c51461048e578063199ffc72146104a3575f80fd5b806306fdde03146103ab578063095ea7b3146103d55780631694505e14610404575f80fd5b366103a757005b5f80fd5b3480156103b6575f80fd5b506103bf610ab6565b6040516103cc9190612a3c565b60405180910390f35b3480156103e0575f80fd5b506103f46103ef366004612a9b565b610b45565b60405190151581526020016103cc565b34801561040f575f80fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103cc565b34801561045a575f80fd5b506002545b6040519081526020016103cc565b348015610478575f80fd5b5061048c610487366004612ac5565b610b5e565b005b348015610499575f80fd5b5061045f60145481565b3480156104ae575f80fd5b5061045f60125481565b3480156104c3575f80fd5b5061045f601d5481565b3480156104d8575f80fd5b5061045f601a5481565b3480156104ed575f80fd5b5061048c6104fc366004612ae0565b610bc2565b34801561050c575f80fd5b506103f461051b366004612af7565b610c82565b34801561052b575f80fd5b5061043761dead81565b348015610540575f80fd5b5061045f60135481565b348015610555575f80fd5b50600f546103f49060ff1681565b34801561056e575f80fd5b50604051601281526020016103cc565b348015610589575f80fd5b506103f4610598366004612a9b565b610ca7565b3480156105a8575f80fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b3480156105db575f80fd5b506020546103f4906301000000900460ff1681565b3480156105fb575f80fd5b506103f461060a366004612ac5565b600b6020525f908152604090205460ff1681565b348015610629575f80fd5b5061045f601f5481565b34801561063e575f80fd5b506020546103f490610100900460ff1681565b34801561065c575f80fd5b5061045f61066b366004612ac5565b610cc8565b34801561067b575f80fd5b5061048c610ce2565b34801561068f575f80fd5b5061048c61069e366004612b44565b610cf5565b3480156106ae575f80fd5b506103f4610dfc565b3480156106c2575f80fd5b50600a54610437906001600160a01b031681565b3480156106e1575f80fd5b5061045f60185481565b3480156106f6575f80fd5b5061048c610705366004612b76565b610e18565b348015610715575f80fd5b506103f4610724366004612ac5565b6001600160a01b03165f908152600c602052604090205460ff1690565b34801561074c575f80fd5b5061048c610e9e565b348015610760575f80fd5b506005546001600160a01b0316610437565b34801561077d575f80fd5b50600954610437906001600160a01b031681565b34801561079c575f80fd5b5061045f60195481565b3480156107b1575f80fd5b5061048c6107c0366004612b9f565b610ebd565b3480156107d0575f80fd5b506103bf610edf565b3480156107e4575f80fd5b5061048c6107f3366004612bb8565b610eee565b348015610803575f80fd5b5061045f60155481565b348015610818575f80fd5b5061045f60115481565b34801561082d575f80fd5b5061045f60175481565b348015610842575f80fd5b5061045f60165481565b348015610857575f80fd5b506103f4610866366004612a9b565b610fab565b348015610876575f80fd5b5061045f60105481565b34801561088b575f80fd5b506103f461089a366004612a9b565b611030565b3480156108aa575f80fd5b5061048c6108b9366004612ac5565b61103d565b3480156108c9575f80fd5b506103f46108d8366004612ac5565b600d6020525f908152604090205460ff1681565b3480156108f7575f80fd5b506020546103f49062010000900460ff1681565b348015610916575f80fd5b5061048c610925366004612bb8565b6110a1565b348015610935575f80fd5b5061048c610944366004612b76565b611107565b348015610954575f80fd5b5061048c610963366004612ae0565b611188565b348015610973575f80fd5b506020546103f490640100000000900460ff1681565b348015610994575f80fd5b5061045f60085481565b3480156109a9575f80fd5b506103f46109b8366004612ae0565b611237565b3480156109c8575f80fd5b5061048c6109d7366004612bb8565b611368565b3480156109e7575f80fd5b5061045f601e5481565b3480156109fc575f80fd5b5061045f610a0b366004612beb565b61139a565b348015610a1b575f80fd5b5061045f60075481565b348015610a30575f80fd5b506103f46113c4565b348015610a44575f80fd5b5061045f601b5481565b348015610a59575f80fd5b5061048c610a68366004612ac5565b6113e1565b348015610a78575f80fd5b5061045f601c5481565b348015610a8d575f80fd5b5061045f60065481565b348015610aa2575f80fd5b506103f4610ab1366004612ae0565b61145a565b60605f8054610ac490612c22565b80601f0160208091040260200160405190810160405280929190818152602001828054610af090612c22565b8015610b3b5780601f10610b1257610100808354040283529160200191610b3b565b820191905f5260205f20905b815481529060010190602001808311610b1e57829003601f168201915b5050505050905090565b5f33610b528185856116a5565b60019150505b92915050565b610b666117c8565b6009546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e743905f90a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b610bca6117c8565b670de0b6b3a76400006103e8610bdf60025490565b610bea906001612c6e565b610bf49190612c85565b610bfe9190612c85565b811015610c6a5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084015b60405180910390fd5b610c7c81670de0b6b3a7640000612c6e565b60085550565b5f33610c8f858285611822565b610c9a85858561189a565b60019150505b9392505050565b5f33610b52818585610cb9838361139a565b610cc39190612ca4565b6116a5565b6001600160a01b03165f9081526003602052604090205490565b610cea6117c8565b610cf35f612159565b565b610cfd6117c8565b610258831015610d6b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610c61565b6103e88211158015610d7b575060015b610de05760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610c61565b601392909255601255600f805460ff1916911515919091179055565b5f610e056117c8565b506020805463ff00000019169055600190565b610e206117c8565b6018839055601b829055601581905580610e3a8385612ca4565b610e449190612ca4565b601e81905560191015610e995760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610c61565b505050565b610ea66117c8565b6020805462ffff0019166201010017905542601055565b610ec56117c8565b602080549115156101000261ff0019909216919091179055565b606060018054610ac490612c22565b610ef66117c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610f9d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c61565b610fa782826121aa565b5050565b5f3381610fb8828661139a565b9050838110156110185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c61565b61102582868684036116a5565b506001949350505050565b5f33610b5281858561189a565b6110456117c8565b600a546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6110a96117c8565b6001600160a01b0382165f818152600c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b61110f6117c8565b6019839055601c8290556016819055806111298385612ca4565b6111339190612ca4565b601f81905560631015610e995760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610c61565b6111906117c8565b670de0b6b3a76400006103e86111a560025490565b6111b0906005612c6e565b6111ba9190612c85565b6111c49190612c85565b81101561121f5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c61565b61123181670de0b6b3a7640000612c6e565b60065550565b5f6112406117c8565b620186a061124d60025490565b611258906001612c6e565b6112629190612c85565b8210156112cf5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c61565b6103e86112db60025490565b6112e690600a612c6e565b6112f09190612c85565b82111561135a5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610c61565b50600781905560015b919050565b6113706117c8565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b5f6113cd6117c8565b506020805464ff0000000019169055600190565b6113e96117c8565b6001600160a01b03811661144e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c61565b61145781612159565b50565b5f6114636117c8565b6014546011546114739190612ca4565b42116114c15760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610c61565b6103e88211156115265760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610c61565b426011556040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201525f9030906370a0823190602401602060405180830381865afa15801561158e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b29190612cb7565b90505f6115cb6127106115c584876121fd565b90612208565b90508015611600576116007f000000000000000000000000000000000000000000000000000000000000000061dead83612213565b5f7f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561165c575f80fd5b505af115801561166e573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1506001949350505050565b6001600160a01b0383166117075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c61565b6001600160a01b0382166117685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c61565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610cf35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c61565b5f61182d848461139a565b90505f19811461189457818110156118875760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c61565b61189484848484036116a5565b50505050565b6001600160a01b0383166118c05760405162461bcd60e51b8152600401610c6190612cce565b6001600160a01b0382166118e65760405162461bcd60e51b8152600401610c6190612d13565b805f036118f857610e9983835f612213565b6020546301000000900460ff1615611d95576005546001600160a01b0384811691161480159061193657506005546001600160a01b03838116911614155b801561194a57506001600160a01b03821615155b801561196157506001600160a01b03821661dead14155b8015611970575060205460ff16155b15611d955760205462010000900460ff16611a07576001600160a01b0383165f908152600c602052604090205460ff16806119c257506001600160a01b0382165f908152600c602052604090205460ff165b611a075760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c61565b602054640100000000900460ff1615611b54576005546001600160a01b03838116911614801590611a6a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611aa857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611b5457325f908152600e60205260409020544311611b425760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c61565b325f908152600e602052604090204390555b6001600160a01b0383165f908152600d602052604090205460ff168015611b9357506001600160a01b0382165f908152600b602052604090205460ff16155b15611c6757600854811115611c085760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c61565b600654611c1483610cc8565b611c1e9083612ca4565b1115611c625760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c61565b611d95565b6001600160a01b0382165f908152600d602052604090205460ff168015611ca657506001600160a01b0383165f908152600b602052604090205460ff16155b15611d1c57600854811115611c625760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c61565b6001600160a01b0382165f908152600b602052604090205460ff16611d9557600654611d4783610cc8565b611d519083612ca4565b1115611d955760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c61565b611da0838383612342565b15611daa57505050565b5f611db430610cc8565b60075490915081108015908190611dd25750602054610100900460ff165b8015611de1575060205460ff16155b8015611e0557506001600160a01b0385165f908152600d602052604090205460ff16155b8015611e2957506001600160a01b0385165f908152600c602052604090205460ff16155b8015611e4d57506001600160a01b0384165f908152600c602052604090205460ff16155b15611e72576020805460ff19166001179055611e676123b4565b6020805460ff191690555b60205460ff16158015611e9c57506001600160a01b0384165f908152600d602052604090205460ff165b8015611eaa5750600f5460ff165b8015611ec55750601354601054611ec19190612ca4565b4210155b8015611ee957506001600160a01b0385165f908152600c602052604090205460ff16155b15611ef857611ef66125d9565b505b602080546001600160a01b0387165f908152600c90925260409091205460ff91821615911680611f3f57506001600160a01b0385165f908152600c602052604090205460ff165b15611f4757505f5b5f8115612145576001600160a01b0386165f908152600d602052604090205460ff168015611f7657505f601f54115b1561204f57611f9560646115c5601f54886121fd90919063ffffffff16565b9050601f54601c5482611fa89190612c6e565b611fb29190612c85565b601d5f828254611fc29190612ca4565b9091555050601f54601654611fd79083612c6e565b611fe19190612c85565b60175f828254611ff19190612ca4565b9091555050601f546019546120069083612c6e565b6120109190612c85565b601a5f8282546120209190612ca4565b909155505060095461203c9088906001600160a01b031661275e565b1561204a5750505050505050565b612127565b6001600160a01b0387165f908152600d602052604090205460ff16801561207757505f601e54115b156121275761209660646115c5601e54886121fd90919063ffffffff16565b9050601e54601b54826120a99190612c6e565b6120b39190612c85565b601d5f8282546120c39190612ca4565b9091555050601e546015546120d89083612c6e565b6120e29190612c85565b60175f8282546120f29190612ca4565b9091555050601e546018546121079083612c6e565b6121119190612c85565b601a5f8282546121219190612ca4565b90915550505b801561213857612138873083612213565b6121428186612d56565b94505b612150878787612213565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152600d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f610ca08284612c6e565b5f610ca08284612c85565b6001600160a01b0383166122395760405162461bcd60e51b8152600401610c6190612cce565b6001600160a01b03821661225f5760405162461bcd60e51b8152600401610c6190612d13565b6001600160a01b0383165f90815260036020526040902054818110156122d65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c61565b6001600160a01b038085165f8181526003602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123359086815260200190565b60405180910390a3611894565b5f8161234d85610cc8565b10801561237157506001600160a01b0383165f908152600d602052604090205460ff165b156123ab576001600160a01b0384165f908152600b602052604090205460ff16156123ab576123a38361dead84612213565b506001610ca0565b505f9392505050565b5f806123bf30610cc8565b90505f601754601a54601d546123d59190612ca4565b6123df9190612ca4565b90508115806123ec575080155b156123f657505050565b600754612404906014612c6e565b82111561241c57600754612419906014612c6e565b91505b5f600282601d548561242e9190612c6e565b6124389190612c85565b6124429190612c85565b90505f61244f848361279d565b90504761245b826127a8565b5f612466478361279d565b90505f612482866115c5601a54856121fd90919063ffffffff16565b90505f61249e876115c5601754866121fd90919063ffffffff16565b90505f816124ac8486612d56565b6124b69190612d56565b5f601d819055601a81905560178190556009546040519293506001600160a01b031691849181818185875af1925050503d805f8114612510576040519150601f19603f3d011682016040523d82523d5f602084013e612515565b606091505b50909a5050861580159061252857505f81115b1561257b57612537878261295e565b601d54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600a546040516001600160a01b039091169047905f81818185875af1925050503d805f81146125c5576040519150601f19603f3d011682016040523d82523d5f602084013e6125ca565b606091505b50505050505050505050505050565b426010556040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201525f90819030906370a0823190602401602060405180830381865afa158015612643573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126679190612cb7565b90505f6126856127106115c5601254856121fd90919063ffffffff16565b905080156126ba576126ba7f000000000000000000000000000000000000000000000000000000000000000061dead83612213565b5f7f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612716575f80fd5b505af1158015612728573d5f803e3d5ffd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d92505f9150a16001935050505090565b6001600160a01b0382165f908152600d602052604081205460ff16612795575f61278783610cc8565b111561279557506001610b58565b505f92915050565b5f610ca08284612d56565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106127db576127db612d69565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287b9190612d7d565b8160018151811061288e5761288e612d69565b60200260200101906001600160a01b031690816001600160a01b0316815250506128d9307f0000000000000000000000000000000000000000000000000000000000000000846116a5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061292d9085905f90869030904290600401612d98565b5f604051808303815f87803b158015612944575f80fd5b505af1158015612956573d5f803e3d5ffd5b505050505050565b612989307f0000000000000000000000000000000000000000000000000000000000000000846116a5565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612a10573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612a359190612e07565b5050505050565b5f6020808352835180828501525f5b81811015612a6757858101830151858201604001528201612a4b565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611457575f80fd5b5f8060408385031215612aac575f80fd5b8235612ab781612a87565b946020939093013593505050565b5f60208284031215612ad5575f80fd5b8135610ca081612a87565b5f60208284031215612af0575f80fd5b5035919050565b5f805f60608486031215612b09575f80fd5b8335612b1481612a87565b92506020840135612b2481612a87565b929592945050506040919091013590565b80358015158114611363575f80fd5b5f805f60608486031215612b56575f80fd5b8335925060208401359150612b6d60408501612b35565b90509250925092565b5f805f60608486031215612b88575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612baf575f80fd5b610ca082612b35565b5f8060408385031215612bc9575f80fd5b8235612bd481612a87565b9150612be260208401612b35565b90509250929050565b5f8060408385031215612bfc575f80fd5b8235612c0781612a87565b91506020830135612c1781612a87565b809150509250929050565b600181811c90821680612c3657607f821691505b602082108103612c5457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b5857610b58612c5a565b5f82612c9f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610b5857610b58612c5a565b5f60208284031215612cc7575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b5857610b58612c5a565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612d8d575f80fd5b8151610ca081612a87565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612de65784516001600160a01b031683529383019391830191600101612dc1565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612e19575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a18161f0a82a1cec522d5aff1f3f1f62c7db026b261d49a5dbcd47788b79e17464736f6c63430008150033

Deployed Bytecode

0x6080604052600436106103a0575f3560e01c80638ea5220f116101de578063c024666811610108578063dd62ed3e1161009d578063f2fde38b1161006d578063f2fde38b14610a4e578063f637434214610a6d578063f8b45b0514610a82578063fe72b27a14610a97575f80fd5b8063dd62ed3e146109f1578063e2f4560514610a10578063e884f26014610a25578063f11a24d314610a39575f80fd5b8063c8c8ebe4116100d8578063c8c8ebe414610989578063d257b34f1461099e578063d4c989d3146109bd578063d85ba063146109dc575f80fd5b8063c02466681461090b578063c17b5b8c1461092a578063c18bc19514610949578063c876d0b914610968575f80fd5b80639fccce321161017e578063a9059cbb1161014e578063a9059cbb14610880578063aacebbe31461089f578063b62496f5146108be578063bbc0c742146108ec575f80fd5b80639fccce3214610822578063a0d82dc514610837578063a457c2d71461084c578063a4c82a001461086b575f80fd5b806395d89b41116101b957806395d89b41146107c55780639a7a23d6146107d95780639c3b4fdc146107f85780639ec22c0e1461080d575f80fd5b80638ea5220f146107725780639213691314610791578063924de9b7146107a6575f80fd5b806339509351116102ca578063730c18881161025f5780638095d5641161022f5780638095d564146106eb5780638165bc9b1461070a5780638a8c523c146107415780638da5cb5b14610755575f80fd5b8063730c188814610684578063751039fc146106a357806375f0a874146106b75780637bce5a04146106d6575f80fd5b80636a486a8e1161029a5780636a486a8e1461061e5780636ddd17131461063357806370a0823114610651578063715018a614610670575f80fd5b8063395093511461057e57806349bd5a5e1461059d5780634a62bb65146105d0578063563912bd146105f0575f80fd5b80631a8145bb1161034057806327c8f8351161031057806327c8f835146105205780632c3e486c146105355780632e82f1a01461054a578063313ce56714610563575f80fd5b80631a8145bb146104b85780631f3fed8f146104cd578063203e727e146104e257806323b872dd14610501575f80fd5b806318160ddd1161037b57806318160ddd1461044f5780631816467f1461046d578063184c16c51461048e578063199ffc72146104a3575f80fd5b806306fdde03146103ab578063095ea7b3146103d55780631694505e14610404575f80fd5b366103a757005b5f80fd5b3480156103b6575f80fd5b506103bf610ab6565b6040516103cc9190612a3c565b60405180910390f35b3480156103e0575f80fd5b506103f46103ef366004612a9b565b610b45565b60405190151581526020016103cc565b34801561040f575f80fd5b506104377f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103cc565b34801561045a575f80fd5b506002545b6040519081526020016103cc565b348015610478575f80fd5b5061048c610487366004612ac5565b610b5e565b005b348015610499575f80fd5b5061045f60145481565b3480156104ae575f80fd5b5061045f60125481565b3480156104c3575f80fd5b5061045f601d5481565b3480156104d8575f80fd5b5061045f601a5481565b3480156104ed575f80fd5b5061048c6104fc366004612ae0565b610bc2565b34801561050c575f80fd5b506103f461051b366004612af7565b610c82565b34801561052b575f80fd5b5061043761dead81565b348015610540575f80fd5b5061045f60135481565b348015610555575f80fd5b50600f546103f49060ff1681565b34801561056e575f80fd5b50604051601281526020016103cc565b348015610589575f80fd5b506103f4610598366004612a9b565b610ca7565b3480156105a8575f80fd5b506104377f00000000000000000000000013bbc9ad010ac0f2812efa70ed3cee0acc4adb5681565b3480156105db575f80fd5b506020546103f4906301000000900460ff1681565b3480156105fb575f80fd5b506103f461060a366004612ac5565b600b6020525f908152604090205460ff1681565b348015610629575f80fd5b5061045f601f5481565b34801561063e575f80fd5b506020546103f490610100900460ff1681565b34801561065c575f80fd5b5061045f61066b366004612ac5565b610cc8565b34801561067b575f80fd5b5061048c610ce2565b34801561068f575f80fd5b5061048c61069e366004612b44565b610cf5565b3480156106ae575f80fd5b506103f4610dfc565b3480156106c2575f80fd5b50600a54610437906001600160a01b031681565b3480156106e1575f80fd5b5061045f60185481565b3480156106f6575f80fd5b5061048c610705366004612b76565b610e18565b348015610715575f80fd5b506103f4610724366004612ac5565b6001600160a01b03165f908152600c602052604090205460ff1690565b34801561074c575f80fd5b5061048c610e9e565b348015610760575f80fd5b506005546001600160a01b0316610437565b34801561077d575f80fd5b50600954610437906001600160a01b031681565b34801561079c575f80fd5b5061045f60195481565b3480156107b1575f80fd5b5061048c6107c0366004612b9f565b610ebd565b3480156107d0575f80fd5b506103bf610edf565b3480156107e4575f80fd5b5061048c6107f3366004612bb8565b610eee565b348015610803575f80fd5b5061045f60155481565b348015610818575f80fd5b5061045f60115481565b34801561082d575f80fd5b5061045f60175481565b348015610842575f80fd5b5061045f60165481565b348015610857575f80fd5b506103f4610866366004612a9b565b610fab565b348015610876575f80fd5b5061045f60105481565b34801561088b575f80fd5b506103f461089a366004612a9b565b611030565b3480156108aa575f80fd5b5061048c6108b9366004612ac5565b61103d565b3480156108c9575f80fd5b506103f46108d8366004612ac5565b600d6020525f908152604090205460ff1681565b3480156108f7575f80fd5b506020546103f49062010000900460ff1681565b348015610916575f80fd5b5061048c610925366004612bb8565b6110a1565b348015610935575f80fd5b5061048c610944366004612b76565b611107565b348015610954575f80fd5b5061048c610963366004612ae0565b611188565b348015610973575f80fd5b506020546103f490640100000000900460ff1681565b348015610994575f80fd5b5061045f60085481565b3480156109a9575f80fd5b506103f46109b8366004612ae0565b611237565b3480156109c8575f80fd5b5061048c6109d7366004612bb8565b611368565b3480156109e7575f80fd5b5061045f601e5481565b3480156109fc575f80fd5b5061045f610a0b366004612beb565b61139a565b348015610a1b575f80fd5b5061045f60075481565b348015610a30575f80fd5b506103f46113c4565b348015610a44575f80fd5b5061045f601b5481565b348015610a59575f80fd5b5061048c610a68366004612ac5565b6113e1565b348015610a78575f80fd5b5061045f601c5481565b348015610a8d575f80fd5b5061045f60065481565b348015610aa2575f80fd5b506103f4610ab1366004612ae0565b61145a565b60605f8054610ac490612c22565b80601f0160208091040260200160405190810160405280929190818152602001828054610af090612c22565b8015610b3b5780601f10610b1257610100808354040283529160200191610b3b565b820191905f5260205f20905b815481529060010190602001808311610b1e57829003601f168201915b5050505050905090565b5f33610b528185856116a5565b60019150505b92915050565b610b666117c8565b6009546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e743905f90a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b610bca6117c8565b670de0b6b3a76400006103e8610bdf60025490565b610bea906001612c6e565b610bf49190612c85565b610bfe9190612c85565b811015610c6a5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084015b60405180910390fd5b610c7c81670de0b6b3a7640000612c6e565b60085550565b5f33610c8f858285611822565b610c9a85858561189a565b60019150505b9392505050565b5f33610b52818585610cb9838361139a565b610cc39190612ca4565b6116a5565b6001600160a01b03165f9081526003602052604090205490565b610cea6117c8565b610cf35f612159565b565b610cfd6117c8565b610258831015610d6b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610c61565b6103e88211158015610d7b575060015b610de05760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610c61565b601392909255601255600f805460ff1916911515919091179055565b5f610e056117c8565b506020805463ff00000019169055600190565b610e206117c8565b6018839055601b829055601581905580610e3a8385612ca4565b610e449190612ca4565b601e81905560191015610e995760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610c61565b505050565b610ea66117c8565b6020805462ffff0019166201010017905542601055565b610ec56117c8565b602080549115156101000261ff0019909216919091179055565b606060018054610ac490612c22565b610ef66117c8565b7f00000000000000000000000013bbc9ad010ac0f2812efa70ed3cee0acc4adb566001600160a01b0316826001600160a01b031603610f9d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c61565b610fa782826121aa565b5050565b5f3381610fb8828661139a565b9050838110156110185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c61565b61102582868684036116a5565b506001949350505050565b5f33610b5281858561189a565b6110456117c8565b600a546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b05674905f90a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6110a96117c8565b6001600160a01b0382165f818152600c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b61110f6117c8565b6019839055601c8290556016819055806111298385612ca4565b6111339190612ca4565b601f81905560631015610e995760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420393925206f72206c6573730000006044820152606401610c61565b6111906117c8565b670de0b6b3a76400006103e86111a560025490565b6111b0906005612c6e565b6111ba9190612c85565b6111c49190612c85565b81101561121f5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c61565b61123181670de0b6b3a7640000612c6e565b60065550565b5f6112406117c8565b620186a061124d60025490565b611258906001612c6e565b6112629190612c85565b8210156112cf5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c61565b6103e86112db60025490565b6112e690600a612c6e565b6112f09190612c85565b82111561135a5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610c61565b50600781905560015b919050565b6113706117c8565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b5f6113cd6117c8565b506020805464ff0000000019169055600190565b6113e96117c8565b6001600160a01b03811661144e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c61565b61145781612159565b50565b5f6114636117c8565b6014546011546114739190612ca4565b42116114c15760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610c61565b6103e88211156115265760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610c61565b426011556040516370a0823160e01b81526001600160a01b037f00000000000000000000000013bbc9ad010ac0f2812efa70ed3cee0acc4adb561660048201525f9030906370a0823190602401602060405180830381865afa15801561158e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b29190612cb7565b90505f6115cb6127106115c584876121fd565b90612208565b90508015611600576116007f00000000000000000000000013bbc9ad010ac0f2812efa70ed3cee0acc4adb5661dead83612213565b5f7f00000000000000000000000013bbc9ad010ac0f2812efa70ed3cee0acc4adb569050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561165c575f80fd5b505af115801561166e573d5f803e3d5ffd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb92505f9150a1506001949350505050565b6001600160a01b0383166117075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c61565b6001600160a01b0382166117685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c61565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610cf35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c61565b5f61182d848461139a565b90505f19811461189457818110156118875760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c61565b61189484848484036116a5565b50505050565b6001600160a01b0383166118c05760405162461bcd60e51b8152600401610c6190612cce565b6001600160a01b0382166118e65760405162461bcd60e51b8152600401610c6190612d13565b805f036118f857610e9983835f612213565b6020546301000000900460ff1615611d95576005546001600160a01b0384811691161480159061193657506005546001600160a01b03838116911614155b801561194a57506001600160a01b03821615155b801561196157506001600160a01b03821661dead14155b8015611970575060205460ff16155b15611d955760205462010000900460ff16611a07576001600160a01b0383165f908152600c602052604090205460ff16806119c257506001600160a01b0382165f908152600c602052604090205460ff165b611a075760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c61565b602054640100000000900460ff1615611b54576005546001600160a01b03838116911614801590611a6a57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611aa857507f00000000000000000000000013bbc9ad010ac0f2812efa70ed3cee0acc4adb566001600160a01b0316826001600160a01b031614155b15611b5457325f908152600e60205260409020544311611b425760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c61565b325f908152600e602052604090204390555b6001600160a01b0383165f908152600d602052604090205460ff168015611b9357506001600160a01b0382165f908152600b602052604090205460ff16155b15611c6757600854811115611c085760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c61565b600654611c1483610cc8565b611c1e9083612ca4565b1115611c625760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c61565b611d95565b6001600160a01b0382165f908152600d602052604090205460ff168015611ca657506001600160a01b0383165f908152600b602052604090205460ff16155b15611d1c57600854811115611c625760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c61565b6001600160a01b0382165f908152600b602052604090205460ff16611d9557600654611d4783610cc8565b611d519083612ca4565b1115611d955760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c61565b611da0838383612342565b15611daa57505050565b5f611db430610cc8565b60075490915081108015908190611dd25750602054610100900460ff165b8015611de1575060205460ff16155b8015611e0557506001600160a01b0385165f908152600d602052604090205460ff16155b8015611e2957506001600160a01b0385165f908152600c602052604090205460ff16155b8015611e4d57506001600160a01b0384165f908152600c602052604090205460ff16155b15611e72576020805460ff19166001179055611e676123b4565b6020805460ff191690555b60205460ff16158015611e9c57506001600160a01b0384165f908152600d602052604090205460ff165b8015611eaa5750600f5460ff165b8015611ec55750601354601054611ec19190612ca4565b4210155b8015611ee957506001600160a01b0385165f908152600c602052604090205460ff16155b15611ef857611ef66125d9565b505b602080546001600160a01b0387165f908152600c90925260409091205460ff91821615911680611f3f57506001600160a01b0385165f908152600c602052604090205460ff165b15611f4757505f5b5f8115612145576001600160a01b0386165f908152600d602052604090205460ff168015611f7657505f601f54115b1561204f57611f9560646115c5601f54886121fd90919063ffffffff16565b9050601f54601c5482611fa89190612c6e565b611fb29190612c85565b601d5f828254611fc29190612ca4565b9091555050601f54601654611fd79083612c6e565b611fe19190612c85565b60175f828254611ff19190612ca4565b9091555050601f546019546120069083612c6e565b6120109190612c85565b601a5f8282546120209190612ca4565b909155505060095461203c9088906001600160a01b031661275e565b1561204a5750505050505050565b612127565b6001600160a01b0387165f908152600d602052604090205460ff16801561207757505f601e54115b156121275761209660646115c5601e54886121fd90919063ffffffff16565b9050601e54601b54826120a99190612c6e565b6120b39190612c85565b601d5f8282546120c39190612ca4565b9091555050601e546015546120d89083612c6e565b6120e29190612c85565b60175f8282546120f29190612ca4565b9091555050601e546018546121079083612c6e565b6121119190612c85565b601a5f8282546121219190612ca4565b90915550505b801561213857612138873083612213565b6121428186612d56565b94505b612150878787612213565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152600d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f610ca08284612c6e565b5f610ca08284612c85565b6001600160a01b0383166122395760405162461bcd60e51b8152600401610c6190612cce565b6001600160a01b03821661225f5760405162461bcd60e51b8152600401610c6190612d13565b6001600160a01b0383165f90815260036020526040902054818110156122d65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c61565b6001600160a01b038085165f8181526003602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123359086815260200190565b60405180910390a3611894565b5f8161234d85610cc8565b10801561237157506001600160a01b0383165f908152600d602052604090205460ff165b156123ab576001600160a01b0384165f908152600b602052604090205460ff16156123ab576123a38361dead84612213565b506001610ca0565b505f9392505050565b5f806123bf30610cc8565b90505f601754601a54601d546123d59190612ca4565b6123df9190612ca4565b90508115806123ec575080155b156123f657505050565b600754612404906014612c6e565b82111561241c57600754612419906014612c6e565b91505b5f600282601d548561242e9190612c6e565b6124389190612c85565b6124429190612c85565b90505f61244f848361279d565b90504761245b826127a8565b5f612466478361279d565b90505f612482866115c5601a54856121fd90919063ffffffff16565b90505f61249e876115c5601754866121fd90919063ffffffff16565b90505f816124ac8486612d56565b6124b69190612d56565b5f601d819055601a81905560178190556009546040519293506001600160a01b031691849181818185875af1925050503d805f8114612510576040519150601f19603f3d011682016040523d82523d5f602084013e612515565b606091505b50909a5050861580159061252857505f81115b1561257b57612537878261295e565b601d54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600a546040516001600160a01b039091169047905f81818185875af1925050503d805f81146125c5576040519150601f19603f3d011682016040523d82523d5f602084013e6125ca565b606091505b50505050505050505050505050565b426010556040516370a0823160e01b81526001600160a01b037f00000000000000000000000013bbc9ad010ac0f2812efa70ed3cee0acc4adb561660048201525f90819030906370a0823190602401602060405180830381865afa158015612643573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126679190612cb7565b90505f6126856127106115c5601254856121fd90919063ffffffff16565b905080156126ba576126ba7f00000000000000000000000013bbc9ad010ac0f2812efa70ed3cee0acc4adb5661dead83612213565b5f7f00000000000000000000000013bbc9ad010ac0f2812efa70ed3cee0acc4adb569050806001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612716575f80fd5b505af1158015612728573d5f803e3d5ffd5b50506040517f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d92505f9150a16001935050505090565b6001600160a01b0382165f908152600d602052604081205460ff16612795575f61278783610cc8565b111561279557506001610b58565b505f92915050565b5f610ca08284612d56565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106127db576127db612d69565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287b9190612d7d565b8160018151811061288e5761288e612d69565b60200260200101906001600160a01b031690816001600160a01b0316815250506128d9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116a5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061292d9085905f90869030904290600401612d98565b5f604051808303815f87803b158015612944575f80fd5b505af1158015612956573d5f803e3d5ffd5b505050505050565b612989307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116a5565b60405163f305d71960e01b8152306004820152602481018390525f60448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612a10573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612a359190612e07565b5050505050565b5f6020808352835180828501525f5b81811015612a6757858101830151858201604001528201612a4b565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611457575f80fd5b5f8060408385031215612aac575f80fd5b8235612ab781612a87565b946020939093013593505050565b5f60208284031215612ad5575f80fd5b8135610ca081612a87565b5f60208284031215612af0575f80fd5b5035919050565b5f805f60608486031215612b09575f80fd5b8335612b1481612a87565b92506020840135612b2481612a87565b929592945050506040919091013590565b80358015158114611363575f80fd5b5f805f60608486031215612b56575f80fd5b8335925060208401359150612b6d60408501612b35565b90509250925092565b5f805f60608486031215612b88575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612baf575f80fd5b610ca082612b35565b5f8060408385031215612bc9575f80fd5b8235612bd481612a87565b9150612be260208401612b35565b90509250929050565b5f8060408385031215612bfc575f80fd5b8235612c0781612a87565b91506020830135612c1781612a87565b809150509250929050565b600181811c90821680612c3657607f821691505b602082108103612c5457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b5857610b58612c5a565b5f82612c9f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610b5857610b58612c5a565b5f60208284031215612cc7575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b5857610b58612c5a565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612d8d575f80fd5b8151610ca081612a87565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612de65784516001600160a01b031683529383019391830191600101612dc1565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612e19575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a18161f0a82a1cec522d5aff1f3f1f62c7db026b261d49a5dbcd47788b79e17464736f6c63430008150033

Deployed Bytecode Sourcemap

21698:18196:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20818:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20282:242;;;;;;;;;;-1:-1:-1;20282:242:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;20282:242:0;1023:187:1;22765:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1405:32:1;;;1387:51;;1375:2;1360:18;22765:51:0;1215:229:1;21038:108:0;;;;;;;;;;-1:-1:-1;21126:12:0;;21038:108;;;1595:25:1;;;1583:2;1568:18;21038:108:0;1449:177:1;33880:157:0;;;;;;;;;;-1:-1:-1;33880:157:0;;;;;:::i;:::-;;:::i;:::-;;23351:50;;;;;;;;;;;;;;;;23248:35;;;;;;;;;;;;;;;;23697:33;;;;;;;;;;;;;;;;23582;;;;;;;;;;;;;;;;34045:275;;;;;;;;;;-1:-1:-1;34045:275:0;;;;;:::i;:::-;;:::i;21396:295::-;;;;;;;;;;-1:-1:-1;21396:295:0;;;;;:::i;:::-;;:::i;22705:53::-;;;;;;;;;;;;22751:6;22705:53;;23290:54;;;;;;;;;;;;;;;;23130:33;;;;;;;;;;-1:-1:-1;23130:33:0;;;;;;;;20717:93;;;;;;;;;;-1:-1:-1;20717:93:0;;20800:2;2879:36:1;;2867:2;2852:18;20717:93:0;2737:184:1;19491:270:0;;;;;;;;;;-1:-1:-1;19491:270:0;;;;;:::i;:::-;;:::i;22823:38::-;;;;;;;;;;;;;;;23914:33;;;;;;;;;;-1:-1:-1;23914:33:0;;;;;;;;;;;22870:54;;;;;;;;;;-1:-1:-1;22870:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23771:28;;;;;;;;;;;;;;;;23836:31;;;;;;;;;;-1:-1:-1;23836:31:0;;;;;;;;;;;20532:177;;;;;;;;;;-1:-1:-1;20532:177:0;;;;;:::i;:::-;;:::i;15857:103::-;;;;;;;;;;;;;:::i;31635:555::-;;;;;;;;;;-1:-1:-1;31635:555:0;;;;;:::i;:::-;;:::i;27625:121::-;;;;;;;;;;;;;:::i;22668:30::-;;;;;;;;;;-1:-1:-1;22668:30:0;;;;-1:-1:-1;;;;;22668:30:0;;;23507;;;;;;;;;;;;;;;;32810:403;;;;;;;;;;-1:-1:-1;32810:403:0;;;;;:::i;:::-;;:::i;27485:132::-;;;;;;;;;;-1:-1:-1;27485:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;27578:31:0;27554:4;27578:31;;;:22;:31;;;;;;;;;27485:132;26587:155;;;;;;;;;;;;;:::i;15516:87::-;;;;;;;;;;-1:-1:-1;15589:6:0;;-1:-1:-1;;;;;15589:6:0;15516:87;;22637:24;;;;;;;;;;-1:-1:-1;22637:24:0;;;;-1:-1:-1;;;;;22637:24:0;;;23544:31;;;;;;;;;;;;;;;;32702:100;;;;;;;;;;-1:-1:-1;32702:100:0;;;;;:::i;:::-;;:::i;20926:104::-;;;;;;;;;;;;;:::i;39393:304::-;;;;;;;;;;-1:-1:-1;39393:304:0;;;;;:::i;:::-;;:::i;23410:24::-;;;;;;;;;;;;;;;;23206:35;;;;;;;;;;;;;;;;23473:27;;;;;;;;;;;;;;;;23441:25;;;;;;;;;;;;;;;;19769:505;;;;;;;;;;-1:-1:-1;19769:505:0;;;;;:::i;:::-;;:::i;23170:29::-;;;;;;;;;;;;;;;;21154:234;;;;;;;;;;-1:-1:-1;21154:234:0;;;;;:::i;:::-;;:::i;33641:231::-;;;;;;;;;;-1:-1:-1;33641:231:0;;;;;:::i;:::-;;:::i;22993:57::-;;;;;;;;;;-1:-1:-1;22993:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23874:33;;;;;;;;;;-1:-1:-1;23874:33:0;;;;;;;;;;;26884:185;;;;;;;;;;-1:-1:-1;26884:185:0;;;;;:::i;:::-;;:::i;33221:412::-;;;;;;;;;;-1:-1:-1;33221:412:0;;;;;:::i;:::-;;:::i;34328:256::-;;;;;;;;;;-1:-1:-1;34328:256:0;;;;;:::i;:::-;;:::i;23954:39::-;;;;;;;;;;-1:-1:-1;23954:39:0;;;;;;;;;;;22593:35;;;;;;;;;;;;;;;;32198:496;;;;;;;;;;-1:-1:-1;32198:496:0;;;;;:::i;:::-;;:::i;26750:126::-;;;;;;;;;;-1:-1:-1;26750:126:0;;;;;:::i;:::-;;:::i;23737:27::-;;;;;;;;;;;;;;;;19282:201;;;;;;;;;;-1:-1:-1;19282:201:0;;;;;:::i;:::-;;:::i;22553:33::-;;;;;;;;;;;;;;;;26444:135;;;;;;;;;;;;;:::i;23622:30::-;;;;;;;;;;;;;;;;15611:238;;;;;;;;;;-1:-1:-1;15611:238:0;;;;;:::i;:::-;;:::i;23659:31::-;;;;;;;;;;;;;;;;22522:24;;;;;;;;;;;;;;;;28312:818;;;;;;;;;;-1:-1:-1;28312:818:0;;;;;:::i;:::-;;:::i;20818:100::-;20872:13;20905:5;20898:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20818:100;:::o;20282:242::-;20401:4;14814:10;20462:32;14814:10;20478:7;20487:6;20462:8;:32::i;:::-;20512:4;20505:11;;;20282:242;;;;;:::o;33880:157::-;15136:13;:11;:13::i;:::-;33987:9:::1;::::0;33959:38:::1;::::0;-1:-1:-1;;;;;33987:9:0;;::::1;::::0;33959:38;::::1;::::0;::::1;::::0;33987:9:::1;::::0;33959:38:::1;34008:9;:21:::0;;-1:-1:-1;;;;;;34008:21:0::1;-1:-1:-1::0;;;;;34008:21:0;;;::::1;::::0;;;::::1;::::0;;33880:157::o;34045:275::-;15136:13;:11;:13::i;:::-;34182:4:::1;34174;34153:13;21126:12:::0;;;21038:108;34153:13:::1;:17;::::0;34169:1:::1;34153:17;:::i;:::-;34152:26;;;;:::i;:::-;34151:35;;;;:::i;:::-;34141:6;:45;;34119:142;;;::::0;-1:-1:-1;;;34119:142:0;;5745:2:1;34119:142:0::1;::::0;::::1;5727:21:1::0;5784:2;5764:18;;;5757:30;5823:34;5803:18;;;5796:62;-1:-1:-1;;;5874:18:1;;;5867:45;5929:19;;34119:142:0::1;;;;;;;;;34295:17;:6:::0;34305::::1;34295:17;:::i;:::-;34272:20;:40:::0;-1:-1:-1;34045:275:0:o;21396:295::-;21527:4;14814:10;21585:38;21601:4;14814:10;21616:6;21585:15;:38::i;:::-;21634:27;21644:4;21650:2;21654:6;21634:9;:27::i;:::-;21679:4;21672:11;;;21396:295;;;;;;:::o;19491:270::-;19606:4;14814:10;19667:64;14814:10;19683:7;19720:10;19692:25;14814:10;19683:7;19692:9;:25::i;:::-;:38;;;;:::i;:::-;19667:8;:64::i;20532:177::-;-1:-1:-1;;;;;20683:18:0;20651:7;20683:18;;;:9;:18;;;;;;;20532:177::o;15857:103::-;15136:13;:11;:13::i;:::-;15922:30:::1;15949:1;15922:18;:30::i;:::-;15857:103::o:0;31635:555::-;15136:13;:11;:13::i;:::-;31837:3:::1;31814:19;:26;;31792:127;;;::::0;-1:-1:-1;;;31792:127:0;;6291:2:1;31792:127:0::1;::::0;::::1;6273:21:1::0;6330:2;6310:18;;;6303:30;6369:34;6349:18;;;6342:62;-1:-1:-1;;;6420:18:1;;;6413:49;6479:19;;31792:127:0::1;6089:415:1::0;31792:127:0::1;31964:4;31952:8;:16;;:33;;;;-1:-1:-1::0;31972:13:0;31952:33:::1;31930:131;;;::::0;-1:-1:-1;;;31930:131:0;;6711:2:1;31930:131:0::1;::::0;::::1;6693:21:1::0;6750:2;6730:18;;;6723:30;6789:34;6769:18;;;6762:62;-1:-1:-1;;;6840:18:1;;;6833:46;6896:19;;31930:131:0::1;6509:412:1::0;31930:131:0::1;32072:15;:37:::0;;;;32120:16:::1;:27:::0;32158:13:::1;:24:::0;;-1:-1:-1;;32158:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31635:555::o;27625:121::-;27677:4;15136:13;:11;:13::i;:::-;-1:-1:-1;27694:14:0::1;:22:::0;;-1:-1:-1;;27694:22:0::1;::::0;;;27625:121;:::o;32810:403::-;15136:13;:11;:13::i;:::-;32960:15:::1;:31:::0;;;33002:15:::1;:31:::0;;;33044:9:::1;:19:::0;;;33056:7;33089:33:::1;33020:13:::0;32978;33089:33:::1;:::i;:::-;:45;;;;:::i;:::-;33074:12;:60:::0;;;33169:2:::1;-1:-1:-1::0;33153:18:0::1;33145:60;;;::::0;-1:-1:-1;;;33145:60:0;;7128:2:1;33145:60:0::1;::::0;::::1;7110:21:1::0;7167:2;7147:18;;;7140:30;7206:31;7186:18;;;7179:59;7255:18;;33145:60:0::1;6926:353:1::0;33145:60:0::1;32810:403:::0;;;:::o;26587:155::-;15136:13;:11;:13::i;:::-;26642::::1;:20:::0;;-1:-1:-1;;26673:18:0;;;;;26719:15:::1;26702:14;:32:::0;26587:155::o;32702:100::-;15136:13;:11;:13::i;:::-;32773:11:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;32773:21:0;;::::1;::::0;;;::::1;::::0;;32702:100::o;20926:104::-;20982:13;21015:7;21008:14;;;;;:::i;39393:304::-;15136:13;:11;:13::i;:::-;39537::::1;-1:-1:-1::0;;;;;39529:21:0::1;:4;-1:-1:-1::0;;;;;39529:21:0::1;::::0;39507:128:::1;;;::::0;-1:-1:-1;;;39507:128:0;;7486:2:1;39507:128:0::1;::::0;::::1;7468:21:1::0;7525:2;7505:18;;;7498:30;7564:34;7544:18;;;7537:62;7635:27;7615:18;;;7608:55;7680:19;;39507:128:0::1;7284:421:1::0;39507:128:0::1;39648:41;39677:4;39683:5;39648:28;:41::i;:::-;39393:304:::0;;:::o;19769:505::-;19889:4;14814:10;19889:4;19977:25;14814:10;19994:7;19977:9;:25::i;:::-;19950:52;;20055:15;20035:16;:35;;20013:122;;;;-1:-1:-1;;;20013:122:0;;7912:2:1;20013:122:0;;;7894:21:1;7951:2;7931:18;;;7924:30;7990:34;7970:18;;;7963:62;-1:-1:-1;;;8041:18:1;;;8034:35;8086:19;;20013:122:0;7710:401:1;20013:122:0;20171:60;20180:5;20187:7;20215:15;20196:16;:34;20171:8;:60::i;:::-;-1:-1:-1;20262:4:0;;19769:505;-1:-1:-1;;;;19769:505:0:o;21154:234::-;21269:4;14814:10;21330:28;14814:10;21347:2;21351:6;21330:9;:28::i;33641:231::-;15136:13;:11;:13::i;:::-;33801:15:::1;::::0;33758:59:::1;::::0;-1:-1:-1;;;;;33801:15:0;;::::1;::::0;33758:59;::::1;::::0;::::1;::::0;33801:15:::1;::::0;33758:59:::1;33828:15;:36:::0;;-1:-1:-1;;;;;;33828:36:0::1;-1:-1:-1::0;;;;;33828:36:0;;;::::1;::::0;;;::::1;::::0;;33641:231::o;26884:185::-;15136:13;:11;:13::i;:::-;-1:-1:-1;;;;;26969:31:0;::::1;;::::0;;;:22:::1;:31;::::0;;;;;;;;:42;;-1:-1:-1;;26969:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27027:34;;1163:41:1;;;27027:34:0::1;::::0;1136:18:1;27027:34:0::1;;;;;;;26884:185:::0;;:::o;33221:412::-;15136:13;:11;:13::i;:::-;33372:16:::1;:32:::0;;;33415:16:::1;:32:::0;;;33458:10:::1;:20:::0;;;33471:7;33505:35:::1;33434:13:::0;33391;33505:35:::1;:::i;:::-;:48;;;;:::i;:::-;33489:13;:64:::0;;;33589:2:::1;-1:-1:-1::0;33572:19:0::1;33564:61;;;::::0;-1:-1:-1;;;33564:61:0;;8318:2:1;33564:61:0::1;::::0;::::1;8300:21:1::0;8357:2;8337:18;;;8330:30;8396:31;8376:18;;;8369:59;8445:18;;33564:61:0::1;8116:353:1::0;34328:256:0;15136:13;:11;:13::i;:::-;34468:4:::1;34460;34439:13;21126:12:::0;;;21038:108;34439:13:::1;:17;::::0;34455:1:::1;34439:17;:::i;:::-;34438:26;;;;:::i;:::-;34437:35;;;;:::i;:::-;34427:6;:45;;34405:131;;;::::0;-1:-1:-1;;;34405:131:0;;8676:2:1;34405:131:0::1;::::0;::::1;8658:21:1::0;8715:2;8695:18;;;8688:30;8754:34;8734:18;;;8727:62;-1:-1:-1;;;8805:18:1;;;8798:34;8849:19;;34405:131:0::1;8474:400:1::0;34405:131:0::1;34559:17;:6:::0;34569::::1;34559:17;:::i;:::-;34547:9;:29:::0;-1:-1:-1;34328:256:0:o;32198:496::-;32306:4;15136:13;:11;:13::i;:::-;32385:6:::1;32364:13;21126:12:::0;;;21038:108;32364:13:::1;:17;::::0;32380:1:::1;32364:17;:::i;:::-;32363:28;;;;:::i;:::-;32350:9;:41;;32328:144;;;::::0;-1:-1:-1;;;32328:144:0;;9081:2:1;32328:144:0::1;::::0;::::1;9063:21:1::0;9120:2;9100:18;;;9093:30;9159:34;9139:18;;;9132:62;-1:-1:-1;;;9210:18:1;;;9203:51;9271:19;;32328:144:0::1;8879:417:1::0;32328:144:0::1;32541:4;32519:13;21126:12:::0;;;21038:108;32519:13:::1;:18;::::0;32535:2:::1;32519:18;:::i;:::-;32518:27;;;;:::i;:::-;32505:9;:40;;32483:140;;;::::0;-1:-1:-1;;;32483:140:0;;9503:2:1;32483:140:0::1;::::0;::::1;9485:21:1::0;9542:2;9522:18;;;9515:30;9581:34;9561:18;;;9554:62;-1:-1:-1;;;9632:18:1;;;9625:48;9690:19;;32483:140:0::1;9301:414:1::0;32483:140:0::1;-1:-1:-1::0;32634:18:0::1;:30:::0;;;32682:4:::1;15160:1;32198:496:::0;;;:::o;26750:126::-;15136:13;:11;:13::i;:::-;-1:-1:-1;;;;;26831:30:0;;;::::1;;::::0;;;:22:::1;:30;::::0;;;;:37;;-1:-1:-1;;26831:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26750:126::o;19282:201::-;-1:-1:-1;;;;;19448:18:0;;;19416:7;19448:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19282:201::o;26444:135::-;26504:4;15136:13;:11;:13::i;:::-;-1:-1:-1;26521:20:0::1;:28:::0;;-1:-1:-1;;26521:28:0::1;::::0;;;26444:135;:::o;15611:238::-;15136:13;:11;:13::i;:::-;-1:-1:-1;;;;;15714:22:0;::::1;15692:110;;;::::0;-1:-1:-1;;;15692:110:0;;9922:2:1;15692:110:0::1;::::0;::::1;9904:21:1::0;9961:2;9941:18;;;9934:30;10000:34;9980:18;;;9973:62;-1:-1:-1;;;10051:18:1;;;10044:36;10097:19;;15692:110:0::1;9720:402:1::0;15692:110:0::1;15813:28;15832:8;15813:18;:28::i;:::-;15611:238:::0;:::o;28312:818::-;28423:4;15136:13;:11;:13::i;:::-;28508:19:::1;;28485:20;;:42;;;;:::i;:::-;28467:15;:60;28445:142;;;::::0;-1:-1:-1;;;28445:142:0;;10329:2:1;28445:142:0::1;::::0;::::1;10311:21:1::0;;;10348:18;;;10341:30;10407:34;10387:18;;;10380:62;10459:18;;28445:142:0::1;10127:356:1::0;28445:142:0::1;28617:4;28606:7;:15;;28598:70;;;::::0;-1:-1:-1;;;28598:70:0;;10690:2:1;28598:70:0::1;::::0;::::1;10672:21:1::0;10729:2;10709:18;;;10702:30;10768:34;10748:18;;;10741:62;-1:-1:-1;;;10819:18:1;;;10812:40;10869:19;;28598:70:0::1;10488:406:1::0;28598:70:0::1;28702:15;28679:20;:38:::0;28759:29:::1;::::0;-1:-1:-1;;;28759:29:0;;-1:-1:-1;;;;;28774:13:0::1;1405:32:1::0;28759:29:0::1;::::0;::::1;1387:51:1::0;28728:28:0::1;::::0;28759:4:::1;::::0;:14:::1;::::0;1360:18:1;;28759:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28728:60:::0;-1:-1:-1;28799:20:0::1;28822:44;28860:5;28822:33;28728:60:::0;28847:7;28822:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;28799:67:::0;-1:-1:-1;28881:16:0;;28877:110:::1;;28914:61;28930:13;28953:6;28962:12;28914:15;:61::i;:::-;28997:19;29034:13;28997:51;;29059:4;-1:-1:-1::0;;;;;29059:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29086:14:0::1;::::0;::::1;::::0;-1:-1:-1;29086:14:0;;-1:-1:-1;29086:14:0::1;-1:-1:-1::0;29118:4:0::1;::::0;28312:818;-1:-1:-1;;;;28312:818:0:o;16499:380::-;-1:-1:-1;;;;;16635:19:0;;16627:68;;;;-1:-1:-1;;;16627:68:0;;11290:2:1;16627:68:0;;;11272:21:1;11329:2;11309:18;;;11302:30;11368:34;11348:18;;;11341:62;-1:-1:-1;;;11419:18:1;;;11412:34;11463:19;;16627:68:0;11088:400:1;16627:68:0;-1:-1:-1;;;;;16714:21:0;;16706:68;;;;-1:-1:-1;;;16706:68:0;;11695:2:1;16706:68:0;;;11677:21:1;11734:2;11714:18;;;11707:30;11773:34;11753:18;;;11746:62;-1:-1:-1;;;11824:18:1;;;11817:32;11866:19;;16706:68:0;11493:398:1;16706:68:0;-1:-1:-1;;;;;16787:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16839:32;;1595:25:1;;;16839:32:0;;1568:18:1;16839:32:0;;;;;;;16499:380;;;:::o;15177:132::-;15589:6;;-1:-1:-1;;;;;15589:6:0;14814:10;15241:23;15233:68;;;;-1:-1:-1;;;15233:68:0;;12098:2:1;15233:68:0;;;12080:21:1;;;12117:18;;;12110:30;12176:34;12156:18;;;12149:62;12228:18;;15233:68:0;11896:356:1;18772:502:0;18907:24;18934:25;18944:5;18951:7;18934:9;:25::i;:::-;18907:52;;-1:-1:-1;;18974:16:0;:37;18970:297;;19074:6;19054:16;:26;;19028:117;;;;-1:-1:-1;;;19028:117:0;;12459:2:1;19028:117:0;;;12441:21:1;12498:2;12478:18;;;12471:30;12537:31;12517:18;;;12510:59;12586:18;;19028:117:0;12257:353:1;19028:117:0;19189:51;19198:5;19205:7;19233:6;19214:16;:25;19189:8;:51::i;:::-;18896:378;18772:502;;;:::o;34592:4793::-;-1:-1:-1;;;;;34724:18:0;;34716:68;;;;-1:-1:-1;;;34716:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34803:16:0;;34795:64;;;;-1:-1:-1;;;34795:64:0;;;;;;;:::i;:::-;34876:6;34886:1;34876:11;34872:93;;34904:28;34920:4;34926:2;34930:1;34904:15;:28::i;34872:93::-;34981:14;;;;;;;34977:2289;;;15589:6;;-1:-1:-1;;;;;35034:15:0;;;15589:6;;35034:15;;;;:49;;-1:-1:-1;15589:6:0;;-1:-1:-1;;;;;35070:13:0;;;15589:6;;35070:13;;35034:49;:86;;;;-1:-1:-1;;;;;;35104:16:0;;;;35034:86;:128;;;;-1:-1:-1;;;;;;35141:21:0;;35155:6;35141:21;;35034:128;:158;;;;-1:-1:-1;35184:8:0;;;;35183:9;35034:158;35012:2243;;;35232:13;;;;;;;35227:258;;-1:-1:-1;;;;;35304:28:0;;;;;;:22;:28;;;;;;;;;:87;;-1:-1:-1;;;;;;35365:26:0;;;;;;:22;:26;;;;;;;;35304:87;35270:195;;;;-1:-1:-1;;;35270:195:0;;13627:2:1;35270:195:0;;;13609:21:1;13666:2;13646:18;;;13639:30;-1:-1:-1;;;13685:18:1;;;13678:52;13747:18;;35270:195:0;13425:346:1;35270:195:0;35509:20;;;;;;;35505:641;;;15589:6;;-1:-1:-1;;;;;35584:13:0;;;15589:6;;35584:13;;;;:72;;;35640:15;-1:-1:-1;;;;;35626:30:0;:2;-1:-1:-1;;;;;35626:30:0;;;35584:72;:129;;;;;35699:13;-1:-1:-1;;;;;35685:28:0;:2;-1:-1:-1;;;;;35685:28:0;;;35584:129;35554:573;;;35831:9;35802:39;;;;:28;:39;;;;;;35877:12;-1:-1:-1;35764:258:0;;;;-1:-1:-1;;;35764:258:0;;13978:2:1;35764:258:0;;;13960:21:1;14017:2;13997:18;;;13990:30;14056:34;14036:18;;;14029:62;14127:34;14107:18;;;14100:62;-1:-1:-1;;;14178:19:1;;;14171:40;14228:19;;35764:258:0;13776:477:1;35764:258:0;36078:9;36049:39;;;;:28;:39;;;;;36091:12;36049:54;;35554:573;-1:-1:-1;;;;;36192:31:0;;;;;;:25;:31;;;;;;;;:83;;;;-1:-1:-1;;;;;;36249:26:0;;;;;;:22;:26;;;;;;;;36248:27;36192:83;36166:1074;;;36362:20;;36352:6;:30;;36318:169;;;;-1:-1:-1;;;36318:169:0;;14460:2:1;36318:169:0;;;14442:21:1;14499:2;14479:18;;;14472:30;14538:34;14518:18;;;14511:62;-1:-1:-1;;;14589:18:1;;;14582:51;14650:19;;36318:169:0;14258:417:1;36318:169:0;36570:9;;36553:13;36563:2;36553:9;:13::i;:::-;36544:22;;:6;:22;:::i;:::-;:35;;36510:140;;;;-1:-1:-1;;;36510:140:0;;14882:2:1;36510:140:0;;;14864:21:1;14921:2;14901:18;;;14894:30;-1:-1:-1;;;14940:18:1;;;14933:49;14999:18;;36510:140:0;14680:343:1;36510:140:0;36166:1074;;;-1:-1:-1;;;;;36702:29:0;;;;;;:25;:29;;;;;;;;:83;;;;-1:-1:-1;;;;;;36757:28:0;;;;;;:22;:28;;;;;;;;36756:29;36702:83;36676:564;;;36872:20;;36862:6;:30;;36828:170;;;;-1:-1:-1;;;36828:170:0;;15230:2:1;36828:170:0;;;15212:21:1;15269:2;15249:18;;;15242:30;15308:34;15288:18;;;15281:62;-1:-1:-1;;;15359:18:1;;;15352:52;15421:19;;36828:170:0;15028:418:1;36676:564:0;-1:-1:-1;;;;;37029:26:0;;;;;;:22;:26;;;;;;;;37024:216;;37140:9;;37123:13;37133:2;37123:9;:13::i;:::-;37114:22;;:6;:22;:::i;:::-;:35;;37080:140;;;;-1:-1:-1;;;37080:140:0;;14882:2:1;37080:140:0;;;14864:21:1;14921:2;14901:18;;;14894:30;-1:-1:-1;;;14940:18:1;;;14933:49;14999:18;;37080:140:0;14680:343:1;37080:140:0;37282:40;37305:4;37311:2;37315:6;37282:22;:40::i;:::-;37278:79;;;34592:4793;;;:::o;37278:79::-;37369:28;37400:24;37418:4;37400:9;:24::i;:::-;37474:18;;37369:55;;-1:-1:-1;37450:42:0;;;;;;;37523:35;;-1:-1:-1;37547:11:0;;;;;;;37523:35;:61;;;;-1:-1:-1;37576:8:0;;;;37575:9;37523:61;:110;;;;-1:-1:-1;;;;;;37602:31:0;;;;;;:25;:31;;;;;;;;37601:32;37523:110;:156;;;;-1:-1:-1;;;;;;37651:28:0;;;;;;:22;:28;;;;;;;;37650:29;37523:156;:200;;;;-1:-1:-1;;;;;;37697:26:0;;;;;;:22;:26;;;;;;;;37696:27;37523:200;37505:328;;;37750:8;:15;;-1:-1:-1;;37750:15:0;37761:4;37750:15;;;37780:10;:8;:10::i;:::-;37805:8;:16;;-1:-1:-1;;37805:16:0;;;37505:328;37864:8;;;;37863:9;:55;;;;-1:-1:-1;;;;;;37889:29:0;;;;;;:25;:29;;;;;;;;37863:55;:85;;;;-1:-1:-1;37935:13:0;;;;37863:85;:153;;;;;38001:15;;37984:14;;:32;;;;:::i;:::-;37965:15;:51;;37863:153;:199;;;;-1:-1:-1;;;;;;38034:28:0;;;;;;:22;:28;;;;;;;;38033:29;37863:199;37845:285;;;38089:29;:27;:29::i;:::-;;37845:285;38158:8;;;-1:-1:-1;;;;;38181:28:0;;38142:12;38181:28;;;:22;:28;;;;;;;;38158:8;;;;38157:9;;38181:28;;:58;;-1:-1:-1;;;;;;38213:26:0;;;;;;:22;:26;;;;;;;;38181:58;38177:106;;;-1:-1:-1;38266:5:0;38177:106;38295:12;38326:7;38322:1012;;;-1:-1:-1;;;;;38354:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;38403:1;38387:13;;:17;38354:50;38350:837;;;38432:34;38462:3;38432:25;38443:13;;38432:6;:10;;:25;;;;:::i;:34::-;38425:41;;38535:13;;38515:16;;38508:4;:23;;;;:::i;:::-;38507:41;;;;:::i;:::-;38485:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;38605:13:0;;38591:10;;38584:17;;:4;:17;:::i;:::-;38583:35;;;;:::i;:::-;38567:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;38687:13:0;;38667:16;;38660:23;;:4;:23;:::i;:::-;38659:41;;;;:::i;:::-;38637:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;38745:9:0;;38723:32;;38739:4;;-1:-1:-1;;;;;38745:9:0;38723:15;:32::i;:::-;38719:87;;;38780:7;;;;34592:4793;;;:::o;38719:87::-;38350:837;;;-1:-1:-1;;;;;38831:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;38881:1;38866:12;;:16;38831:51;38827:360;;;38910:33;38939:3;38910:24;38921:12;;38910:6;:10;;:24;;;;:::i;:33::-;38903:40;;39011:12;;38992:15;;38985:4;:22;;;;:::i;:::-;38984:39;;;;:::i;:::-;38962:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;39079:12:0;;39066:9;;39059:16;;:4;:16;:::i;:::-;39058:33;;;;:::i;:::-;39042:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;39159:12:0;;39140:15;;39133:22;;:4;:22;:::i;:::-;39132:39;;;;:::i;:::-;39110:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;38827:360:0;39207:8;;39203:91;;39236:42;39252:4;39266;39273;39236:15;:42::i;:::-;39308:14;39318:4;39308:14;;:::i;:::-;;;38322:1012;39344:33;39360:4;39366:2;39370:6;39344:15;:33::i;:::-;34705:4680;;;;34592:4793;;;:::o;15317:191::-;15410:6;;;-1:-1:-1;;;;;15427:17:0;;;-1:-1:-1;;;;;;15427:17:0;;;;;;;15460:40;;15410:6;;;15427:17;15410:6;;15460:40;;15391:16;;15460:40;15380:128;15317:191;:::o;39705:186::-;-1:-1:-1;;;;;39788:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;39788:39:0;;;;;;;;;;39843:40;;39788:39;;:31;39843:40;;;39705:186;;:::o;1821:98::-;1879:7;1906:5;1910:1;1906;:5;:::i;1927:98::-;1985:7;2012:5;2016:1;2012;:5;:::i;18056:708::-;-1:-1:-1;;;;;18187:18:0;;18179:68;;;;-1:-1:-1;;;18179:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18266:16:0;;18258:64;;;;-1:-1:-1;;;18258:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18408:15:0;;18386:19;18408:15;;;:9;:15;;;;;;18456:21;;;;18434:109;;;;-1:-1:-1;;;18434:109:0;;15786:2:1;18434:109:0;;;15768:21:1;15825:2;15805:18;;;15798:30;15864:34;15844:18;;;15837:62;-1:-1:-1;;;15915:18:1;;;15908:36;15961:19;;18434:109:0;15584:402:1;18434:109:0;-1:-1:-1;;;;;18579:15:0;;;;;;;:9;:15;;;;;;18597:20;;;18579:38;;18632:13;;;;;;;;;;:23;;;;;;18682:26;;;;;;18611:6;1595:25:1;;1583:2;1568:18;;1449:177;18682:26:0;;;;;;;;18719:37;32810:403;27077:400;27202:4;27241:6;27223:15;27233:4;27223:9;:15::i;:::-;:24;:57;;;;-1:-1:-1;;;;;;27251:29:0;;;;;;:25;:29;;;;;;;;27223:57;27219:228;;;-1:-1:-1;;;;;27301:28:0;;;;;;:22;:28;;;;;;;;27297:139;;;27350:40;27366:2;22751:6;27383;27350:15;:40::i;:::-;-1:-1:-1;27416:4:0;27409:11;;27297:139;-1:-1:-1;27464:5:0;27077:400;;;;;:::o;29645:1689::-;29684:12;29707:23;29733:24;29751:4;29733:9;:24::i;:::-;29707:50;;29768:25;29864:12;;29830:18;;29796;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;29768:108;-1:-1:-1;29893:20:0;;;:46;;-1:-1:-1;29917:22:0;;29893:46;29889:85;;;29956:7;;;29645:1689::o;29889:85::-;30006:18;;:23;;30027:2;30006:23;:::i;:::-;29988:15;:41;29984:115;;;30064:18;;:23;;30085:2;30064:23;:::i;:::-;30046:41;;29984:115;30111:23;30224:1;30191:17;30156:18;;30138:15;:36;;;;:::i;:::-;30137:71;;;;:::i;:::-;:88;;;;:::i;:::-;30111:114;-1:-1:-1;30236:26:0;30265:36;:15;30111:114;30265:19;:36::i;:::-;30236:65;-1:-1:-1;30340:21:0;30372:36;30236:65;30372:16;:36::i;:::-;30419:18;30440:44;:21;30466:17;30440:25;:44::i;:::-;30419:65;;30495:23;30521:81;30574:17;30521:34;30536:18;;30521:10;:14;;:34;;;;:::i;:81::-;30495:107;;30613:17;30633:51;30666:17;30633:28;30648:12;;30633:10;:14;;:28;;;;:::i;:51::-;30613:71;-1:-1:-1;30695:23:0;30613:71;30721:28;30734:15;30721:10;:28;:::i;:::-;:40;;;;:::i;:::-;30793:1;30772:18;:22;;;30805:18;:22;;;30838:12;:16;;;30889:9;;30881:45;;30695:66;;-1:-1:-1;;;;;;30889:9:0;;30912;;30881:45;30793:1;30881:45;30912:9;30889;30881:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30867:59:0;;-1:-1:-1;;30941:19:0;;;;;:42;;;30982:1;30964:15;:19;30941:42;30937:278;;;31000:46;31013:15;31030;31000:12;:46::i;:::-;31170:18;;31066:137;;;16403:25:1;;;16459:2;16444:18;;16437:34;;;16487:18;;;16480:34;;;;31066:137:0;;;;;;16391:2:1;31066:137:0;;;30937:278;31247:15;;31239:87;;-1:-1:-1;;;;;31247:15:0;;;;31290:21;;31239:87;;;;31290:21;31247:15;31239:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;29645:1689:0:o;27754:550::-;27845:15;27828:14;:32;27902:29;;-1:-1:-1;;;27902:29:0;;-1:-1:-1;;;;;27917:13:0;1405:32:1;27902:29:0;;;1387:51:1;27811:4:0;;;;27902;;:14;;1360:18:1;;27902:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27871:60;;27942:20;27965:77;28026:5;27965:42;27990:16;;27965:20;:24;;:42;;;;:::i;:77::-;27942:100;-1:-1:-1;28057:16:0;;28053:110;;28090:61;28106:13;28129:6;28138:12;28090:15;:61::i;:::-;28173:19;28210:13;28173:51;;28235:4;-1:-1:-1;;;;;28235:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28262:12:0;;;;-1:-1:-1;28262:12:0;;-1:-1:-1;28262:12:0;28292:4;28285:11;;;;;27754:550;:::o;31342:285::-;-1:-1:-1;;;;;31469:31:0;;31442:4;31469:31;;;:25;:31;;;;;;;;31464:133;;31537:1;31521:13;31531:2;31521:9;:13::i;:::-;:17;31517:69;;;-1:-1:-1;31566:4:0;31559:11;;31517:69;-1:-1:-1;31614:5:0;31342:285;;;;:::o;1715:98::-;1773:7;1800:5;1804:1;1800;:5;:::i;29138:499::-;29228:16;;;29242:1;29228:16;;;;;;;;29204:21;;29228:16;;;;;;;;;;-1:-1:-1;29228:16:0;29204:40;;29273:4;29255;29260:1;29255:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29255:23:0;;;-1:-1:-1;;;;;29255:23:0;;;;;29299:15;-1:-1:-1;;;;;29299:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29289:4;29294:1;29289:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;29289:32:0;;;-1:-1:-1;;;;;29289:32:0;;;;;29332:62;29349:4;29364:15;29382:11;29332:8;:62::i;:::-;29405:224;;-1:-1:-1;;;29405:224:0;;-1:-1:-1;;;;;29405:15:0;:66;;;;:224;;29486:11;;29512:1;;29556:4;;29583;;29603:15;;29405:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29193:444;29138:499;:::o;26018:418::-;26099:62;26116:4;26131:15;26149:11;26099:8;:62::i;:::-;26172:256;;-1:-1:-1;;;26172:256:0;;26244:4;26172:256;;;18371:34:1;18421:18;;;18414:34;;;26290:1:0;18464:18:1;;;18457:34;;;18507:18;;;18500:34;22751:6:0;18550:19:1;;;18543:44;26402:15:0;18603:19:1;;;18596:35;26172:15:0;-1:-1:-1;;;;;26172:31:0;;;;26211:9;;18305:19:1;;26172:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26018:418;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1631:247::-;1690:6;1743:2;1731:9;1722:7;1718:23;1714:32;1711:52;;;1759:1;1756;1749:12;1711:52;1798:9;1785:23;1817:31;1842:5;1817:31;:::i;1883:180::-;1942:6;1995:2;1983:9;1974:7;1970:23;1966:32;1963:52;;;2011:1;2008;2001:12;1963:52;-1:-1:-1;2034:23:1;;1883:180;-1:-1:-1;1883:180:1:o;2068:456::-;2145:6;2153;2161;2214:2;2202:9;2193:7;2189:23;2185:32;2182:52;;;2230:1;2227;2220:12;2182:52;2269:9;2256:23;2288:31;2313:5;2288:31;:::i;:::-;2338:5;-1:-1:-1;2395:2:1;2380:18;;2367:32;2408:33;2367:32;2408:33;:::i;:::-;2068:456;;2460:7;;-1:-1:-1;;;2514:2:1;2499:18;;;;2486:32;;2068:456::o;2926:160::-;2991:20;;3047:13;;3040:21;3030:32;;3020:60;;3076:1;3073;3066:12;3091:316;3165:6;3173;3181;3234:2;3222:9;3213:7;3209:23;3205:32;3202:52;;;3250:1;3247;3240:12;3202:52;3286:9;3273:23;3263:33;;3343:2;3332:9;3328:18;3315:32;3305:42;;3366:35;3397:2;3386:9;3382:18;3366:35;:::i;:::-;3356:45;;3091:316;;;;;:::o;3412:::-;3489:6;3497;3505;3558:2;3546:9;3537:7;3533:23;3529:32;3526:52;;;3574:1;3571;3564:12;3526:52;-1:-1:-1;;3597:23:1;;;3667:2;3652:18;;3639:32;;-1:-1:-1;3718:2:1;3703:18;;;3690:32;;3412:316;-1:-1:-1;3412:316:1:o;3733:180::-;3789:6;3842:2;3830:9;3821:7;3817:23;3813:32;3810:52;;;3858:1;3855;3848:12;3810:52;3881:26;3897:9;3881:26;:::i;3918:315::-;3983:6;3991;4044:2;4032:9;4023:7;4019:23;4015:32;4012:52;;;4060:1;4057;4050:12;4012:52;4099:9;4086:23;4118:31;4143:5;4118:31;:::i;:::-;4168:5;-1:-1:-1;4192:35:1;4223:2;4208:18;;4192:35;:::i;:::-;4182:45;;3918:315;;;;;:::o;4238:388::-;4306:6;4314;4367:2;4355:9;4346:7;4342:23;4338:32;4335:52;;;4383:1;4380;4373:12;4335:52;4422:9;4409:23;4441:31;4466:5;4441:31;:::i;:::-;4491:5;-1:-1:-1;4548:2:1;4533:18;;4520:32;4561:33;4520:32;4561:33;:::i;:::-;4613:7;4603:17;;;4238:388;;;;;:::o;4631:380::-;4710:1;4706:12;;;;4753;;;4774:61;;4828:4;4820:6;4816:17;4806:27;;4774:61;4881:2;4873:6;4870:14;4850:18;4847:38;4844:161;;4927:10;4922:3;4918:20;4915:1;4908:31;4962:4;4959:1;4952:15;4990:4;4987:1;4980:15;4844:161;;4631:380;;;:::o;5016:127::-;5077:10;5072:3;5068:20;5065:1;5058:31;5108:4;5105:1;5098:15;5132:4;5129:1;5122:15;5148:168;5221:9;;;5252;;5269:15;;;5263:22;;5249:37;5239:71;;5290:18;;:::i;5321:217::-;5361:1;5387;5377:132;;5431:10;5426:3;5422:20;5419:1;5412:31;5466:4;5463:1;5456:15;5494:4;5491:1;5484:15;5377:132;-1:-1:-1;5523:9:1;;5321:217::o;5959:125::-;6024:9;;;6045:10;;;6042:36;;;6058:18;;:::i;10899:184::-;10969:6;11022:2;11010:9;11001:7;10997:23;10993:32;10990:52;;;11038:1;11035;11028:12;10990:52;-1:-1:-1;11061:16:1;;10899:184;-1:-1:-1;10899:184:1:o;12615:401::-;12817:2;12799:21;;;12856:2;12836:18;;;12829:30;12895:34;12890:2;12875:18;;12868:62;-1:-1:-1;;;12961:2:1;12946:18;;12939:35;13006:3;12991:19;;12615:401::o;13021:399::-;13223:2;13205:21;;;13262:2;13242:18;;;13235:30;13301:34;13296:2;13281:18;;13274:62;-1:-1:-1;;;13367:2:1;13352:18;;13345:33;13410:3;13395:19;;13021:399::o;15451:128::-;15518:9;;;15539:11;;;15536:37;;;15553:18;;:::i;16657:127::-;16718:10;16713:3;16709:20;16706:1;16699:31;16749:4;16746:1;16739:15;16773:4;16770:1;16763:15;16789:251;16859:6;16912:2;16900:9;16891:7;16887:23;16883:32;16880:52;;;16928:1;16925;16918:12;16880:52;16960:9;16954:16;16979:31;17004:5;16979:31;:::i;17045:980::-;17307:4;17355:3;17344:9;17340:19;17386:6;17375:9;17368:25;17412:2;17450:6;17445:2;17434:9;17430:18;17423:34;17493:3;17488:2;17477:9;17473:18;17466:31;17517:6;17552;17546:13;17583:6;17575;17568:22;17621:3;17610:9;17606:19;17599:26;;17660:2;17652:6;17648:15;17634:29;;17681:1;17691:195;17705:6;17702:1;17699:13;17691:195;;;17770:13;;-1:-1:-1;;;;;17766:39:1;17754:52;;17861:15;;;;17826:12;;;;17802:1;17720:9;17691:195;;;-1:-1:-1;;;;;;;17942:32:1;;;;17937:2;17922:18;;17915:60;-1:-1:-1;;;18006:3:1;17991:19;17984:35;17903:3;17045:980;-1:-1:-1;;;17045:980:1:o;18642:306::-;18730:6;18738;18746;18799:2;18787:9;18778:7;18774:23;18770:32;18767:52;;;18815:1;18812;18805:12;18767:52;18844:9;18838:16;18828:26;;18894:2;18883:9;18879:18;18873:25;18863:35;;18938:2;18927:9;18923:18;18917:25;18907:35;;18642:306;;;;;:::o

Swarm Source

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