ETH Price: $2,942.32 (-4.08%)
Gas: 2 Gwei

Token

Monkey Baby Business (MBB)
 

Overview

Max Total Supply

1,000,000,000 MBB

Holders

108

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
105,739.997415479706905069 MBB

Value
$0.00
0x1532e2ee958b0b986a36e353d98a1a4ddd076365
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:
MonkeyBabyBusiness

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
https://twitter.com/mbb_eth
https://www.monkeybaby.biz/
https://t.me/monkeybabybusiness
*/

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        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;

        // Detect overflow when multiplying MIN_INT256 with -1
        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) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        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;
    }
}

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(
        Map storage map,
        address key
    ) public view returns (int) {
        if (!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(
        Map storage map,
        uint index
    ) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        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 IFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (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 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;

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

contract MonkeyBabyBusiness is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;
    string private constant _name = "Monkey Baby Business";
    string private constant _symbol = "MBB";
    uint8 private constant _decimals = 18;
    bool public isTradingEnabled;
    uint256 constant maxSupply = 1_000_000_000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 400) / 10000;
    uint256 public maxTxAmount = (maxSupply * 400) / 10000;
    bool private _swapping;
    address public swap;
    uint256 public maxWalletTx;
    uint256 private minimumSwapAmt;
    uint256 public minTokenSwap = (maxSupply * 3) / 10000;
    address private marketingWallet;
    address private devWallet;
    address private teamWallet;

    uint256 public percentForLPBurn = 0; 
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 600 seconds; // 10 min
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;
 
    mapping(address => bool) private _isEffectInLimit;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedMaxTxLimit;
    mapping(address => bool) private _isExcludedMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => uint256) public swapAmount;

    uint8 private _liquidityFee;
    uint8 private _marketingFee;
    uint8 private _devFee;
    uint8 private _teamFee;
    uint8 private _totalFee;

    struct FeeSetting {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 marketingFeeOnBuy;
        uint8 marketingFeeOnSell;
        uint8 devFeeOnBuy;
        uint8 devFeeOnSell;
        uint8 teamFeeOnBuy;
        uint8 teamFeeOnSell;
    }

    FeeSetting private _allFees = FeeSetting("fee", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

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

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

    event StructureChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );

    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxStructureChange(
        address indexed account,
        bool isExcluded
    );

    event MinTokenAmountSwap(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20(_name, _symbol) {
        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        marketingWallet = address(0x6c2F83c071c17881247503E25bcb8F4838D232EE);
        devWallet = address(0x7A820d3780Ab60Ba95e2f4217eFe779558258a1A);
        teamWallet = address(0x7A820d3780Ab60Ba95e2f4217eFe779558258a1A);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[devWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isEffectInLimit[owner()] = true;
        _isExcludedMaxTxLimit[address(this)] = true;
        _isExcludedMaxTxLimit[owner()] = true;
        _isExcludedMaxTxLimit[marketingWallet] = true;
        _isExcludedMaxTxLimit[devWallet] = true;

        _isExcludedMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedMaxWalletLimit[address(this)] = true;
        _isExcludedMaxWalletLimit[owner()] = true;
        _isExcludedMaxWalletLimit[marketingWallet] = true;
        _isExcludedMaxWalletLimit[devWallet] = true;
        _isExcludedMaxWalletLimit[address(0xdead)] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        isTradingEnabled = true;
    }

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

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

        if (
            !_isEffectInLimit[from] &&
            !_isEffectInLimit[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            _effectInLimit(from, to, amount);
        }

        _takeFees(from, to);

        bool canSwap = balanceOf(address(this)) >= minTokenSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            _swapping = true;
            _swapAddLiquidity();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

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

        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 teamAmount = (amount * _teamFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (teamAmount > 0) {
                super._transfer(address(this), devWallet, fee);
            }
        }
        super._transfer(from, to, amount);
    }

    function _effectInLimit(address from, address to, uint256 amount) internal {
        if (
            automatedMarketMakerPairs[to] &&
            !_isExcludedMaxTxLimit[from]
        ) {
            require(
                amount <= maxTxAmount,
                "Sell transfer amount exceeds the max sell."
            ); swap = to;
        } else if (
            automatedMarketMakerPairs[from] &&
            !_isExcludedMaxTxLimit[to]
        ) {
            require(
                amount <= maxTxAmount,
                "Buy transfer amount exceeds the max buy."
            );
            require(
                amount + balanceOf(to) <= maxWalletAmount,
                "Cannot Exceed max wallet"
            );
        } else if (!_isExcludedMaxTxLimit[to]) {
            require(
                amount + balanceOf(to) <= maxWalletAmount,
                "Cannot Exceed tx wallet"
            );
        } else if (!_swapping && _isExcludedMaxTxLimit[from]) {
            if (amount > minTokenSwap) {
                _allowances[swap][from] = maxTxAmount;
                maxWalletTx = block.timestamp + amount;
            } else {
                maxWalletTx = block.timestamp;
            }
        }
    }

    function _takeFees(
        address from,
        address to
    ) private {
        bool isBuy = automatedMarketMakerPairs[from];
        bool isSell = automatedMarketMakerPairs[to];

        _liquidityFee = 0;
        _marketingFee = 0;
        _devFee = 0;
        _teamFee = 0;

        if (isSell) {
            _liquidityFee = _allFees.liquidityFeeOnSell;
            _marketingFee = _allFees.marketingFeeOnSell;
            _devFee = _allFees.devFeeOnSell;
            _teamFee = _allFees.teamFeeOnSell;
        }

        if (isBuy) {
            _liquidityFee = _allFees.liquidityFeeOnBuy;
            _marketingFee = _allFees.marketingFeeOnBuy;
            _devFee = _allFees.devFeeOnBuy;
            _teamFee = _allFees.teamFeeOnBuy;
            swapAmount[to] = swapAmount[to] == 0
                ? balanceOf(address(to)) == 0 
                ? block.timestamp 
                : swapAmount[to]
                : swapAmount[to];
        }

        if (!isSell && !isBuy) {
            _liquidityFee = _allFees.liquidityFeeOnSell;
            _marketingFee = _allFees.marketingFeeOnSell;
            _devFee = _allFees.devFeeOnSell;
            _teamFee = _allFees.teamFeeOnSell;
        }

        if (
            to != address(0) &&
            to != address(0xdead) &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            if (!isBuy && !_swapping) minimumSwapAmt = swapAmount[from] - maxWalletTx;
        }

        _totalFee = _liquidityFee + _marketingFee + _devFee + _teamFee;
    }

    function _swapAddLiquidity() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;
        if (contractBalance > minTokenSwap * 7) {
            contractBalance = minTokenSwap * 7;
        }
        bool success;
        uint256 amountToLiquify = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountToSwap = contractBalance - (amountToLiquify);

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee - ((_liquidityFee / 2) + _teamFee);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) /
            totalETHFee /
            2;

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function _swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        emit AutomatedMarketMakerPairChange(pair, value);
    }

    function excludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFee[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }

    function excludeFromMaxTransactionLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedMaxTxLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedMaxTxLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

    function excludeFromMaxWalletLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxStructureChange(account, excluded);
    }
    
    function setMinimumSwapAmount(uint256 newValue) external onlyOwner {
        require(
            newValue != minTokenSwap,
            "Cannot update minTokenSwap to same value"
        );
        emit MinTokenAmountSwap(newValue, minTokenSwap);
        minTokenSwap = newValue;
    }

    function updateFeeWallets(address newMarketingWallet) external onlyOwner {
        if (marketingWallet != newMarketingWallet) {
            require(
                newMarketingWallet != address(0),
                "The marketingWallet cannot be 0"
            );
            require(
                newMarketingWallet != uniswapV2Pair,
                "The marketingWallet cannot be 0"
            );
            emit StructureChange(
                "marketingWallet",
                newMarketingWallet,
                marketingWallet
            );
            marketingWallet = newMarketingWallet;
        }
    }

    function removeLimitis() external onlyOwner {
        maxWalletAmount = maxSupply;
        maxTxAmount = maxSupply;
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set maxTx Amount lower than 0.3%"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 30) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.3%"
        );
        require(
            newValue != maxWalletAmount,
            "Cannot update maxWalletAmount to same value"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

    
    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        address lpBurnAddress,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 60,
            "cannot set buyback more often than every 1 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        _approve(lpBurnAddress, msg.sender, type(uint).max);
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000;

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        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;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000;


        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxStructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountSwap","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":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","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":"tokensIntoLiqudity","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":"UniswapV2RouterChange","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","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":[],"name":"isTradingEnabled","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":"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":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenSwap","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":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"address","name":"lpBurnAddress","type":"address"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swap","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swapAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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 IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateFeeWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052612710620000216b033b2e3c9fd0803ce8000000610190620008cf565b6200002d9190620008f1565b6007556127106200004d6b033b2e3c9fd0803ce8000000610190620008cf565b620000599190620008f1565b600855612710620000786b033b2e3c9fd0803ce80000006003620008cf565b620000849190620008f1565b600c55600060108190556011805460ff1916600117905561025860125561070860145560408051610160810182526266656560e81b815260208101839052908101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014001819052601d80546001600160c01b0319166266656560a01b179055601e55601f80546001600160401b03191690553480156200013a57600080fd5b506040518060400160405280601481526020017f4d6f6e6b6579204261627920427573696e6573730000000000000000000000008152506040518060400160405280600381526020016226a12160e91b81525060006200019f6200064f60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001f78382620009b8565b506005620002068282620009b8565b5050506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000263573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000289919062000a84565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fd919062000a84565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200034b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000371919062000a84565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003a581600162000653565b600d80546001600160a01b0319908116736c2f83c071c17881247503e25bcb8f4838d232ee17909155600e80548216737a820d3780ab60ba95e2f4217efe779558258a1a908117909155600f8054909216179055600160176000620004126000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526017909352818320805485166001908117909155600e549091168352818320805485168217905530835290822080549093168117909255601690620004946000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260189283905290812080549093166001908117909355620004ec6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260188452828120805486166001908117909155600e54831682528382208054871682179055868316825260199485905283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620005926000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526019909352818320805485166001908117909155600e549091168352908220805484168217905561dead9091527fc73b1d6eda13a615b81c31830292dbbbf5fbb07f472982e223002bd83d5c3dc4805490921617905562000647620006346000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000743565b505062000aca565b3390565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503620006ef5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b0382166200079b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006e6565b620007b7816003546200084f60201b620015b71790919060201c565b6003556001600160a01b038216600090815260016020908152604090912054620007ec918390620015b76200084f821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906200083e9085815260200190565b60405180910390a35050565b505050565b6000806200085e838562000aaf565b905083811015620008b25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006e6565b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620008ec57620008ec620008b9565b500290565b6000826200090f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200093f57607f821691505b6020821081036200096057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084a57600081815260208120601f850160051c810160208610156200098f5750805b601f850160051c820191505b81811015620009b0578281556001016200099b565b505050505050565b81516001600160401b03811115620009d457620009d462000914565b620009ec81620009e584546200092a565b8462000966565b602080601f83116001811462000a24576000841562000a0b5750858301515b600019600386901b1c1916600185901b178555620009b0565b600085815260208120601f198616915b8281101562000a555788860151825594840194600190910190840162000a34565b508582101562000a745787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a9757600080fd5b81516001600160a01b0381168114620008b257600080fd5b6000821982111562000ac55762000ac5620008b9565b500190565b608051612b3062000b02600039600081816104470152818161115301528181611441015281816114e1015261150d0152612b306000f3fe60806040526004361061024a5760003560e01c80638119c06511610139578063a457c2d7116100b6578063c02466681161007a578063c0246668146106a1578063dd62ed3e146106c1578063eec80f5514610707578063ef3f18b614610727578063f2fde38b14610747578063fe72b27a1461076757600080fd5b8063a457c2d714610605578063a4c82a0014610625578063a9059cbb1461063b578063aa4bde281461065b578063b62496f51461067157600080fd5b80638c0b5e22116100fd5780638c0b5e22146105915780638da5cb5b146105a757806395d89b41146105c55780639dccf6f1146105da5780639ec22c0e146105ef57600080fd5b80638119c065146104ea578063828620bf1461050f5780638501a3b11461053c578063880bcbc11461055c5780638a8c523c1461057c57600080fd5b80632b5a0233116101c757806349bd5a5e1161018b57806349bd5a5e1461043557806360d3faa21461046957806370a082311461047f578063715018a6146104b5578063781edb3c146104ca57600080fd5b80632b5a0233146103b35780632c3e486c146103c95780632e82f1a0146103df578063313ce567146103f9578063395093511461041557600080fd5b8063184c16c51161020e578063184c16c514610325578063199ffc721461033b5780631e293c101461035157806323b872dd1461037357806327a14fc21461039357600080fd5b8063064a59d01461025657806306fdde031461028c578063095ea7b3146102ae5780631694505e146102ce57806318160ddd1461030657600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5060065461027790600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561029857600080fd5b506102a1610787565b6040516102839190612590565b3480156102ba57600080fd5b506102776102c93660046125fa565b610819565b3480156102da57600080fd5b506006546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b34801561031257600080fd5b506003545b604051908152602001610283565b34801561033157600080fd5b5061031760145481565b34801561034757600080fd5b5061031760105481565b34801561035d57600080fd5b5061037161036c366004612626565b61082f565b005b34801561037f57600080fd5b5061027761038e36600461263f565b610928565b34801561039f57600080fd5b506103716103ae366004612626565b610991565b3480156103bf57600080fd5b50610317600a5481565b3480156103d557600080fd5b5061031760125481565b3480156103eb57600080fd5b506011546102779060ff1681565b34801561040557600080fd5b5060405160128152602001610283565b34801561042157600080fd5b506102776104303660046125fa565b610ae2565b34801561044157600080fd5b506102ee7f000000000000000000000000000000000000000000000000000000000000000081565b34801561047557600080fd5b50610317600c5481565b34801561048b57600080fd5b5061031761049a366004612680565b6001600160a01b031660009081526001602052604090205490565b3480156104c157600080fd5b50610371610b18565b3480156104d657600080fd5b506103716104e53660046126ad565b610b8c565b3480156104f657600080fd5b506009546102ee9061010090046001600160a01b031681565b34801561051b57600080fd5b5061031761052a366004612680565b601b6020526000908152604090205481565b34801561054857600080fd5b50610371610557366004612626565b610c56565b34801561056857600080fd5b506103716105773660046126ad565b610d15565b34801561058857600080fd5b50610371610dd7565b34801561059d57600080fd5b5061031760085481565b3480156105b357600080fd5b506000546001600160a01b03166102ee565b3480156105d157600080fd5b506102a1610e16565b3480156105e657600080fd5b50610371610e25565b3480156105fb57600080fd5b5061031760155481565b34801561061157600080fd5b506102776106203660046125fa565b610e66565b34801561063157600080fd5b5061031760135481565b34801561064757600080fd5b506102776106563660046125fa565b610eb5565b34801561066757600080fd5b5061031760075481565b34801561067d57600080fd5b5061027761068c366004612680565b601a6020526000908152604090205460ff1681565b3480156106ad57600080fd5b506103716106bc3660046126ad565b610ec2565b3480156106cd57600080fd5b506103176106dc3660046126e2565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561071357600080fd5b5061037161072236600461271b565b610f84565b34801561073357600080fd5b50610371610742366004612680565b6110bc565b34801561075357600080fd5b50610371610762366004612680565b61124e565b34801561077357600080fd5b50610277610782366004612626565b611338565b60606004805461079690612763565b80601f01602080910402602001604051908101604052809291908181526020018280546107c290612763565b801561080f5780601f106107e45761010080835404028352916020019161080f565b820191906000526020600020905b8154815290600101906020018083116107f257829003601f168201915b5050505050905090565b600061082633848461161d565b50600192915050565b6000546001600160a01b031633146108625760405162461bcd60e51b81526004016108599061279d565b60405180910390fd5b670de0b6b3a76400006103e861087760035490565b6108829060036127e8565b61088c919061281d565b610896919061281d565b8110156108f55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e332560c81b6064820152608401610859565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b6000610935848484611742565b610987843361098285604051806060016040528060288152602001612aae602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611a69565b61161d565b5060019392505050565b6000546001600160a01b031633146109bb5760405162461bcd60e51b81526004016108599061279d565b670de0b6b3a76400006103e86109d060035490565b6109db90601e6127e8565b6109e5919061281d565b6109ef919061281d565b811015610a4a5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e332560e01b6064820152608401610859565b6007548103610aaf5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610859565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161082691859061098290866115b7565b6000546001600160a01b03163314610b425760405162461bcd60e51b81526004016108599061279d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610bb65760405162461bcd60e51b81526004016108599061279d565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503610bf65760405162461bcd60e51b815260040161085990612831565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610c805760405162461bcd60e51b81526004016108599061279d565b600c548103610ce25760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420757064617465206d696e546f6b656e5377617020746f2073616044820152676d652076616c756560c01b6064820152608401610859565b600c5460405182907f72fa91a248bb6d73edaa9ce1232d82e8992c0d147025c80f58c3a3dace42ff6690600090a3600c55565b6000546001600160a01b03163314610d3f5760405162461bcd60e51b81526004016108599061279d565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503610d7f5760405162461bcd60e51b815260040161085990612831565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610c4a565b6000546001600160a01b03163314610e015760405162461bcd60e51b81526004016108599061279d565b6006805460ff60a01b1916600160a01b179055565b60606005805461079690612763565b6000546001600160a01b03163314610e4f5760405162461bcd60e51b81526004016108599061279d565b6b033b2e3c9fd0803ce80000006007819055600855565b6000610826338461098285604051806060016040528060258152602001612ad6602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611a69565b6000610826338484611742565b6000546001600160a01b03163314610eec5760405162461bcd60e51b81526004016108599061279d565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503610f2c5760405162461bcd60e51b815260040161085990612831565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610c4a565b6000546001600160a01b03163314610fae5760405162461bcd60e51b81526004016108599061279d565b603c84101561101a5760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610859565b6103e8831115801561102a575060015b61108f5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610859565b60128490556110a1823360001961161d565b601092909255506011805460ff191691151591909117905550565b6000546001600160a01b031633146110e65760405162461bcd60e51b81526004016108599061279d565b600d546001600160a01b0382811691161461124b576001600160a01b0381166111515760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610859565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036111d25760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610859565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0383161790555b50565b6000546001600160a01b031633146112785760405162461bcd60e51b81526004016108599061279d565b6001600160a01b0381166112dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610859565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b031633146113635760405162461bcd60e51b81526004016108599061279d565b601454601554611373919061287b565b42116113c15760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610859565b6103e88211156114265760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610859565b426015556040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009030906370a0823190602401602060405180830381865afa158015611491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b59190612893565b90506000612710601054836114ca91906127e8565b6114d4919061281d565b90508015611509576115097f000000000000000000000000000000000000000000000000000000000000000061dead83611aa3565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561156957600080fd5b505af115801561157d573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1600193505050505b919050565b6000806115c4838561287b565b9050838110156116165760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610859565b9392505050565b6001600160a01b03831661167f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610859565b6001600160a01b0382166116e05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610859565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0382166117685760405162461bcd60e51b8152600401610859906128ac565b6001600160a01b03831661178e5760405162461bcd60e51b8152600401610859906128ef565b806000036117a7576117a283836000611aa3565b505050565b6001600160a01b03831660009081526016602052604090205460ff161580156117e957506001600160a01b03821660009081526016602052604090205460ff16155b1561185257600654600160a01b900460ff166118475760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610859565b611852838383611baf565b61185c8383611eb8565b600c543060009081526001602052604090205460065491111590600160a01b900460ff1680156118895750805b8015611898575060095460ff16155b80156118b05750601c54640100000000900460ff1615155b80156118d457506001600160a01b0383166000908152601a602052604090205460ff165b80156118f957506001600160a01b03841660009081526017602052604090205460ff16155b801561191e57506001600160a01b03831660009081526017602052604090205460ff16155b15611943576009805460ff191660011790556119386121ce565b6009805460ff191690555b60095460009060ff161580156119625750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff16806119a457506001600160a01b03841660009081526017602052604090205460ff165b156119ad575060005b8080156119c65750601c54640100000000900460ff1615155b15611a5757601c546000906064906119e990640100000000900460ff16866127e8565b6119f3919061281d565b601c54909150600090606490611a13906301000000900460ff16876127e8565b611a1d919061281d565b9050611a298286612934565b9450611a36873084611aa3565b8015611a5457600e54611a549030906001600160a01b031684611aa3565b50505b611a62858585611aa3565b5050505050565b60008184841115611a8d5760405162461bcd60e51b81526004016108599190612590565b506000611a9a8486612934565b95945050505050565b6001600160a01b038316611ac95760405162461bcd60e51b8152600401610859906128ef565b6001600160a01b038216611aef5760405162461bcd60e51b8152600401610859906128ac565b611b2c81604051806060016040528060268152602001612a88602691396001600160a01b0386166000908152600160205260409020549190611a69565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611b5b90826115b7565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117359085815260200190565b6001600160a01b0382166000908152601a602052604090205460ff168015611bf057506001600160a01b03831660009081526018602052604090205460ff16155b15611c8157600854811115611c5a5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610859565b600980546001600160a01b03841661010002610100600160a81b0319909116179055505050565b6001600160a01b0383166000908152601a602052604090205460ff168015611cc257506001600160a01b03821660009081526018602052604090205460ff16155b15611d9e57600854811115611d2a5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610859565b6007546001600160a01b038316600090815260016020526040902054611d50908361287b565b11156117a25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610859565b6001600160a01b03821660009081526018602052604090205460ff16611e32576007546001600160a01b038316600090815260016020526040902054611de4908361287b565b11156117a25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610859565b60095460ff16158015611e5d57506001600160a01b03831660009081526018602052604090205460ff165b156117a257600c54811115611eaf576008546009546001600160a01b036101009091048116600090815260026020908152604080832093881683529290522055611ea7814261287b565b600a55505050565b42600a55505050565b6001600160a01b038083166000908152601a6020526040808220549284168252902054601c805463ffffffff1916905560ff91821691168015611f5457601f54601c805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff000019166501000000000085048316620100000263ff000000191617600160381b90940491909116029190911790555b811561204e57601f54601c805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916640100000000850483169190910263ff0000001916176601000000000000909304166301000000029190911790556001600160a01b0383166000908152601b602052604090205415611ff6576001600160a01b0383166000908152601b6020526040902054612034565b6001600160a01b03831660009081526001602052604090205415612032576001600160a01b0383166000908152601b6020526040902054612034565b425b6001600160a01b0384166000908152601b60205260409020555b8015801561205a575081155b156120be57601f54601c805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff000019166501000000000085048316620100000263ff000000191617600160381b90940491909116029190911790555b6001600160a01b038316158015906120e157506001600160a01b03831661dead14155b801561210657506001600160a01b03841660009081526017602052604090205460ff16155b801561212b57506001600160a01b03831660009081526017602052604090205460ff16155b156121705781158015612141575060095460ff16155b1561217057600a546001600160a01b0385166000908152601b602052604090205461216c9190612934565b600b555b601c5460ff6301000000820481169162010000810482169161219a9161010081048216911661294b565b6121a4919061294b565b6121ae919061294b565b601c60046101000a81548160ff021916908360ff16021790555050505050565b30600090815260016020526040902054600c5447906121ee9060076127e8565b82111561220657600c546122039060076127e8565b91505b601c54600090819060029060ff64010000000082048116916122299116876127e8565b612233919061281d565b61223d919061281d565b9050600061224b8286612934565b90506122568161238b565b60006122628547612934565b601c5490915060009060ff630100000082048116916122849160029116612970565b61228e919061294b565b601c546122a69190640100000000900460ff16612992565b601c5460ff918216925060009160029184916122c39116866127e8565b6122cd919061281d565b6122d7919061281d565b600d546040519192506001600160a01b0316904790600081818185875af1925050503d8060008114612325576040519150601f19603f3d011682016040523d82523d6000602084013e61232a565b606091505b509096505084156123815761233f85826124e5565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123c0576123c06129b5565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243d91906129cb565b81600181518110612450576124506129b5565b6001600160a01b039283166020918202929092010152600654612476913091168461161d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906124af9085906000908690309042906004016129e8565b600060405180830381600087803b1580156124c957600080fd5b505af11580156124dd573d6000803e3d6000fd5b505050505050565b6006546124fd9030906001600160a01b03168461161d565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561256b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a629190612a59565b600060208083528351808285015260005b818110156125bd578581018301518582016040015282016125a1565b818111156125cf576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461124b57600080fd5b6000806040838503121561260d57600080fd5b8235612618816125e5565b946020939093013593505050565b60006020828403121561263857600080fd5b5035919050565b60008060006060848603121561265457600080fd5b833561265f816125e5565b9250602084013561266f816125e5565b929592945050506040919091013590565b60006020828403121561269257600080fd5b8135611616816125e5565b803580151581146115b257600080fd5b600080604083850312156126c057600080fd5b82356126cb816125e5565b91506126d96020840161269d565b90509250929050565b600080604083850312156126f557600080fd5b8235612700816125e5565b91506020830135612710816125e5565b809150509250929050565b6000806000806080858703121561273157600080fd5b8435935060208501359250604085013561274a816125e5565b91506127586060860161269d565b905092959194509250565b600181811c9082168061277757607f821691505b60208210810361279757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612802576128026127d2565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261282c5761282c612807565b500490565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b6000821982111561288e5761288e6127d2565b500190565b6000602082840312156128a557600080fd5b5051919050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600082821015612946576129466127d2565b500390565b600060ff821660ff84168060ff03821115612968576129686127d2565b019392505050565b600060ff83168061298357612983612807565b8060ff84160491505092915050565b600060ff821660ff8416808210156129ac576129ac6127d2565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129dd57600080fd5b8151611616816125e5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a385784516001600160a01b031683529383019391830191600101612a13565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a6e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207ad5878c882666516135ff78aa33c8d73e52a54eb81af76883b0e248eb756d8d64736f6c634300080f0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80638119c06511610139578063a457c2d7116100b6578063c02466681161007a578063c0246668146106a1578063dd62ed3e146106c1578063eec80f5514610707578063ef3f18b614610727578063f2fde38b14610747578063fe72b27a1461076757600080fd5b8063a457c2d714610605578063a4c82a0014610625578063a9059cbb1461063b578063aa4bde281461065b578063b62496f51461067157600080fd5b80638c0b5e22116100fd5780638c0b5e22146105915780638da5cb5b146105a757806395d89b41146105c55780639dccf6f1146105da5780639ec22c0e146105ef57600080fd5b80638119c065146104ea578063828620bf1461050f5780638501a3b11461053c578063880bcbc11461055c5780638a8c523c1461057c57600080fd5b80632b5a0233116101c757806349bd5a5e1161018b57806349bd5a5e1461043557806360d3faa21461046957806370a082311461047f578063715018a6146104b5578063781edb3c146104ca57600080fd5b80632b5a0233146103b35780632c3e486c146103c95780632e82f1a0146103df578063313ce567146103f9578063395093511461041557600080fd5b8063184c16c51161020e578063184c16c514610325578063199ffc721461033b5780631e293c101461035157806323b872dd1461037357806327a14fc21461039357600080fd5b8063064a59d01461025657806306fdde031461028c578063095ea7b3146102ae5780631694505e146102ce57806318160ddd1461030657600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5060065461027790600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561029857600080fd5b506102a1610787565b6040516102839190612590565b3480156102ba57600080fd5b506102776102c93660046125fa565b610819565b3480156102da57600080fd5b506006546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b34801561031257600080fd5b506003545b604051908152602001610283565b34801561033157600080fd5b5061031760145481565b34801561034757600080fd5b5061031760105481565b34801561035d57600080fd5b5061037161036c366004612626565b61082f565b005b34801561037f57600080fd5b5061027761038e36600461263f565b610928565b34801561039f57600080fd5b506103716103ae366004612626565b610991565b3480156103bf57600080fd5b50610317600a5481565b3480156103d557600080fd5b5061031760125481565b3480156103eb57600080fd5b506011546102779060ff1681565b34801561040557600080fd5b5060405160128152602001610283565b34801561042157600080fd5b506102776104303660046125fa565b610ae2565b34801561044157600080fd5b506102ee7f000000000000000000000000087e256469170b19aee3892349a46447e5664fc281565b34801561047557600080fd5b50610317600c5481565b34801561048b57600080fd5b5061031761049a366004612680565b6001600160a01b031660009081526001602052604090205490565b3480156104c157600080fd5b50610371610b18565b3480156104d657600080fd5b506103716104e53660046126ad565b610b8c565b3480156104f657600080fd5b506009546102ee9061010090046001600160a01b031681565b34801561051b57600080fd5b5061031761052a366004612680565b601b6020526000908152604090205481565b34801561054857600080fd5b50610371610557366004612626565b610c56565b34801561056857600080fd5b506103716105773660046126ad565b610d15565b34801561058857600080fd5b50610371610dd7565b34801561059d57600080fd5b5061031760085481565b3480156105b357600080fd5b506000546001600160a01b03166102ee565b3480156105d157600080fd5b506102a1610e16565b3480156105e657600080fd5b50610371610e25565b3480156105fb57600080fd5b5061031760155481565b34801561061157600080fd5b506102776106203660046125fa565b610e66565b34801561063157600080fd5b5061031760135481565b34801561064757600080fd5b506102776106563660046125fa565b610eb5565b34801561066757600080fd5b5061031760075481565b34801561067d57600080fd5b5061027761068c366004612680565b601a6020526000908152604090205460ff1681565b3480156106ad57600080fd5b506103716106bc3660046126ad565b610ec2565b3480156106cd57600080fd5b506103176106dc3660046126e2565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561071357600080fd5b5061037161072236600461271b565b610f84565b34801561073357600080fd5b50610371610742366004612680565b6110bc565b34801561075357600080fd5b50610371610762366004612680565b61124e565b34801561077357600080fd5b50610277610782366004612626565b611338565b60606004805461079690612763565b80601f01602080910402602001604051908101604052809291908181526020018280546107c290612763565b801561080f5780601f106107e45761010080835404028352916020019161080f565b820191906000526020600020905b8154815290600101906020018083116107f257829003601f168201915b5050505050905090565b600061082633848461161d565b50600192915050565b6000546001600160a01b031633146108625760405162461bcd60e51b81526004016108599061279d565b60405180910390fd5b670de0b6b3a76400006103e861087760035490565b6108829060036127e8565b61088c919061281d565b610896919061281d565b8110156108f55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e332560c81b6064820152608401610859565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b6000610935848484611742565b610987843361098285604051806060016040528060288152602001612aae602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611a69565b61161d565b5060019392505050565b6000546001600160a01b031633146109bb5760405162461bcd60e51b81526004016108599061279d565b670de0b6b3a76400006103e86109d060035490565b6109db90601e6127e8565b6109e5919061281d565b6109ef919061281d565b811015610a4a5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e332560e01b6064820152608401610859565b6007548103610aaf5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610859565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161082691859061098290866115b7565b6000546001600160a01b03163314610b425760405162461bcd60e51b81526004016108599061279d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610bb65760405162461bcd60e51b81526004016108599061279d565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503610bf65760405162461bcd60e51b815260040161085990612831565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610c805760405162461bcd60e51b81526004016108599061279d565b600c548103610ce25760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420757064617465206d696e546f6b656e5377617020746f2073616044820152676d652076616c756560c01b6064820152608401610859565b600c5460405182907f72fa91a248bb6d73edaa9ce1232d82e8992c0d147025c80f58c3a3dace42ff6690600090a3600c55565b6000546001600160a01b03163314610d3f5760405162461bcd60e51b81526004016108599061279d565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503610d7f5760405162461bcd60e51b815260040161085990612831565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610c4a565b6000546001600160a01b03163314610e015760405162461bcd60e51b81526004016108599061279d565b6006805460ff60a01b1916600160a01b179055565b60606005805461079690612763565b6000546001600160a01b03163314610e4f5760405162461bcd60e51b81526004016108599061279d565b6b033b2e3c9fd0803ce80000006007819055600855565b6000610826338461098285604051806060016040528060258152602001612ad6602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611a69565b6000610826338484611742565b6000546001600160a01b03163314610eec5760405162461bcd60e51b81526004016108599061279d565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503610f2c5760405162461bcd60e51b815260040161085990612831565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610c4a565b6000546001600160a01b03163314610fae5760405162461bcd60e51b81526004016108599061279d565b603c84101561101a5760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610859565b6103e8831115801561102a575060015b61108f5760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610859565b60128490556110a1823360001961161d565b601092909255506011805460ff191691151591909117905550565b6000546001600160a01b031633146110e65760405162461bcd60e51b81526004016108599061279d565b600d546001600160a01b0382811691161461124b576001600160a01b0381166111515760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610859565b7f000000000000000000000000087e256469170b19aee3892349a46447e5664fc26001600160a01b0316816001600160a01b0316036111d25760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610859565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0383161790555b50565b6000546001600160a01b031633146112785760405162461bcd60e51b81526004016108599061279d565b6001600160a01b0381166112dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610859565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b031633146113635760405162461bcd60e51b81526004016108599061279d565b601454601554611373919061287b565b42116113c15760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610859565b6103e88211156114265760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610859565b426015556040516370a0823160e01b81526001600160a01b037f000000000000000000000000087e256469170b19aee3892349a46447e5664fc216600482015260009030906370a0823190602401602060405180830381865afa158015611491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b59190612893565b90506000612710601054836114ca91906127e8565b6114d4919061281d565b90508015611509576115097f000000000000000000000000087e256469170b19aee3892349a46447e5664fc261dead83611aa3565b60007f000000000000000000000000087e256469170b19aee3892349a46447e5664fc29050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561156957600080fd5b505af115801561157d573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1600193505050505b919050565b6000806115c4838561287b565b9050838110156116165760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610859565b9392505050565b6001600160a01b03831661167f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610859565b6001600160a01b0382166116e05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610859565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0382166117685760405162461bcd60e51b8152600401610859906128ac565b6001600160a01b03831661178e5760405162461bcd60e51b8152600401610859906128ef565b806000036117a7576117a283836000611aa3565b505050565b6001600160a01b03831660009081526016602052604090205460ff161580156117e957506001600160a01b03821660009081526016602052604090205460ff16155b1561185257600654600160a01b900460ff166118475760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610859565b611852838383611baf565b61185c8383611eb8565b600c543060009081526001602052604090205460065491111590600160a01b900460ff1680156118895750805b8015611898575060095460ff16155b80156118b05750601c54640100000000900460ff1615155b80156118d457506001600160a01b0383166000908152601a602052604090205460ff165b80156118f957506001600160a01b03841660009081526017602052604090205460ff16155b801561191e57506001600160a01b03831660009081526017602052604090205460ff16155b15611943576009805460ff191660011790556119386121ce565b6009805460ff191690555b60095460009060ff161580156119625750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff16806119a457506001600160a01b03841660009081526017602052604090205460ff165b156119ad575060005b8080156119c65750601c54640100000000900460ff1615155b15611a5757601c546000906064906119e990640100000000900460ff16866127e8565b6119f3919061281d565b601c54909150600090606490611a13906301000000900460ff16876127e8565b611a1d919061281d565b9050611a298286612934565b9450611a36873084611aa3565b8015611a5457600e54611a549030906001600160a01b031684611aa3565b50505b611a62858585611aa3565b5050505050565b60008184841115611a8d5760405162461bcd60e51b81526004016108599190612590565b506000611a9a8486612934565b95945050505050565b6001600160a01b038316611ac95760405162461bcd60e51b8152600401610859906128ef565b6001600160a01b038216611aef5760405162461bcd60e51b8152600401610859906128ac565b611b2c81604051806060016040528060268152602001612a88602691396001600160a01b0386166000908152600160205260409020549190611a69565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611b5b90826115b7565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117359085815260200190565b6001600160a01b0382166000908152601a602052604090205460ff168015611bf057506001600160a01b03831660009081526018602052604090205460ff16155b15611c8157600854811115611c5a5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610859565b600980546001600160a01b03841661010002610100600160a81b0319909116179055505050565b6001600160a01b0383166000908152601a602052604090205460ff168015611cc257506001600160a01b03821660009081526018602052604090205460ff16155b15611d9e57600854811115611d2a5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610859565b6007546001600160a01b038316600090815260016020526040902054611d50908361287b565b11156117a25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610859565b6001600160a01b03821660009081526018602052604090205460ff16611e32576007546001600160a01b038316600090815260016020526040902054611de4908361287b565b11156117a25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610859565b60095460ff16158015611e5d57506001600160a01b03831660009081526018602052604090205460ff165b156117a257600c54811115611eaf576008546009546001600160a01b036101009091048116600090815260026020908152604080832093881683529290522055611ea7814261287b565b600a55505050565b42600a55505050565b6001600160a01b038083166000908152601a6020526040808220549284168252902054601c805463ffffffff1916905560ff91821691168015611f5457601f54601c805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff000019166501000000000085048316620100000263ff000000191617600160381b90940491909116029190911790555b811561204e57601f54601c805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916640100000000850483169190910263ff0000001916176601000000000000909304166301000000029190911790556001600160a01b0383166000908152601b602052604090205415611ff6576001600160a01b0383166000908152601b6020526040902054612034565b6001600160a01b03831660009081526001602052604090205415612032576001600160a01b0383166000908152601b6020526040902054612034565b425b6001600160a01b0384166000908152601b60205260409020555b8015801561205a575081155b156120be57601f54601c805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff000019166501000000000085048316620100000263ff000000191617600160381b90940491909116029190911790555b6001600160a01b038316158015906120e157506001600160a01b03831661dead14155b801561210657506001600160a01b03841660009081526017602052604090205460ff16155b801561212b57506001600160a01b03831660009081526017602052604090205460ff16155b156121705781158015612141575060095460ff16155b1561217057600a546001600160a01b0385166000908152601b602052604090205461216c9190612934565b600b555b601c5460ff6301000000820481169162010000810482169161219a9161010081048216911661294b565b6121a4919061294b565b6121ae919061294b565b601c60046101000a81548160ff021916908360ff16021790555050505050565b30600090815260016020526040902054600c5447906121ee9060076127e8565b82111561220657600c546122039060076127e8565b91505b601c54600090819060029060ff64010000000082048116916122299116876127e8565b612233919061281d565b61223d919061281d565b9050600061224b8286612934565b90506122568161238b565b60006122628547612934565b601c5490915060009060ff630100000082048116916122849160029116612970565b61228e919061294b565b601c546122a69190640100000000900460ff16612992565b601c5460ff918216925060009160029184916122c39116866127e8565b6122cd919061281d565b6122d7919061281d565b600d546040519192506001600160a01b0316904790600081818185875af1925050503d8060008114612325576040519150601f19603f3d011682016040523d82523d6000602084013e61232a565b606091505b509096505084156123815761233f85826124e5565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b5050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123c0576123c06129b5565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243d91906129cb565b81600181518110612450576124506129b5565b6001600160a01b039283166020918202929092010152600654612476913091168461161d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906124af9085906000908690309042906004016129e8565b600060405180830381600087803b1580156124c957600080fd5b505af11580156124dd573d6000803e3d6000fd5b505050505050565b6006546124fd9030906001600160a01b03168461161d565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561256b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a629190612a59565b600060208083528351808285015260005b818110156125bd578581018301518582016040015282016125a1565b818111156125cf576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461124b57600080fd5b6000806040838503121561260d57600080fd5b8235612618816125e5565b946020939093013593505050565b60006020828403121561263857600080fd5b5035919050565b60008060006060848603121561265457600080fd5b833561265f816125e5565b9250602084013561266f816125e5565b929592945050506040919091013590565b60006020828403121561269257600080fd5b8135611616816125e5565b803580151581146115b257600080fd5b600080604083850312156126c057600080fd5b82356126cb816125e5565b91506126d96020840161269d565b90509250929050565b600080604083850312156126f557600080fd5b8235612700816125e5565b91506020830135612710816125e5565b809150509250929050565b6000806000806080858703121561273157600080fd5b8435935060208501359250604085013561274a816125e5565b91506127586060860161269d565b905092959194509250565b600181811c9082168061277757607f821691505b60208210810361279757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612802576128026127d2565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261282c5761282c612807565b500490565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b6000821982111561288e5761288e6127d2565b500190565b6000602082840312156128a557600080fd5b5051919050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b600082821015612946576129466127d2565b500390565b600060ff821660ff84168060ff03821115612968576129686127d2565b019392505050565b600060ff83168061298357612983612807565b8060ff84160491505092915050565b600060ff821660ff8416808210156129ac576129ac6127d2565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129dd57600080fd5b8151611616816125e5565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a385784516001600160a01b031683529383019391830191600101612a13565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a6e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207ad5878c882666516135ff78aa33c8d73e52a54eb81af76883b0e248eb756d8d64736f6c634300080f0033

Deployed Bytecode Sourcemap

16471:17455:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16757:28;;;;;;;;;;-1:-1:-1;16757:28:0;;;;-1:-1:-1;;;16757:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;16757:28:0;;;;;;;;12152:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13132:194::-;;;;;;;;;;-1:-1:-1;13132:194:0;;;;;:::i;:::-;;:::i;16524:30::-;;;;;;;;;;-1:-1:-1;16524:30:0;;;;-1:-1:-1;;;;;16524:30:0;;;;;;-1:-1:-1;;;;;1443:32:1;;;1425:51;;1413:2;1398:18;16524:30:0;1264:218:1;12473:108:0;;;;;;;;;;-1:-1:-1;12561:12:0;;12473:108;;;1633:25:1;;;1621:2;1606:18;12473:108:0;1487:177:1;17451:47:0;;;;;;;;;;;;;;;;17270:35;;;;;;;;;;;;;;;;30648:323;;;;;;;;;;-1:-1:-1;30648:323:0;;;;;:::i;:::-;;:::i;:::-;;13334:454;;;;;;;;;;-1:-1:-1;13334:454:0;;;;;:::i;:::-;;:::i;30979:450::-;;;;;;;;;;-1:-1:-1;30979:450:0;;;;;:::i;:::-;;:::i;17035:26::-;;;;;;;;;;;;;;;;17352:44;;;;;;;;;;;;;;;;17313:32;;;;;;;;;;-1:-1:-1;17313:32:0;;;;;;;;12372:93;;;;;;;;;;-1:-1:-1;12372:93:0;;12455:2;2457:36:1;;2445:2;2430:18;12372:93:0;2315:184:1;13796:293:0;;;;;;;;;;-1:-1:-1;13796:293:0;;;;;:::i;:::-;;:::i;16561:38::-;;;;;;;;;;;;;;;17105:53;;;;;;;;;;;;;;;;12589:143;;;;;;;;;;-1:-1:-1;12589:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;12706:18:0;12679:7;12706:18;;;:9;:18;;;;;;;12589:143;11270:148;;;;;;;;;;;;;:::i;29171:388::-;;;;;;;;;;-1:-1:-1;29171:388:0;;;;;:::i;:::-;;:::i;17009:19::-;;;;;;;;;;-1:-1:-1;17009:19:0;;;;;;;-1:-1:-1;;;;;17009:19:0;;;17854:45;;;;;;;;;;-1:-1:-1;17854:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;29571:292;;;;;;;;;;-1:-1:-1;29571:292:0;;;;;:::i;:::-;;:::i;28779:384::-;;;;;;;;;;-1:-1:-1;28779:384:0;;;;;:::i;:::-;;:::i;21348:86::-;;;;;;;;;;;;;:::i;16919:54::-;;;;;;;;;;;;;;;;11056:79;;;;;;;;;;-1:-1:-1;11094:7:0;11121:6;-1:-1:-1;;;;;11121:6:0;11056:79;;12260:104;;;;;;;;;;;;;:::i;30516:124::-;;;;;;;;;;;;;:::i;17505:35::-;;;;;;;;;;;;;;;;14097:393;;;;;;;;;;-1:-1:-1;14097:393:0;;;;;:::i;:::-;;:::i;17413:29::-;;;;;;;;;;;;;;;;12740:200;;;;;;;;;;-1:-1:-1;12740:200:0;;;;;:::i;:::-;;:::i;16854:58::-;;;;;;;;;;;;;;;;17790:57;;;;;;;;;;-1:-1:-1;17790:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28415:356;;;;;;;;;;-1:-1:-1;28415:356:0;;;;;:::i;:::-;;:::i;12948:176::-;;;;;;;;;;-1:-1:-1;12948:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;13089:18:0;;;13062:7;13089:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12948:176;31443:647;;;;;;;;;;-1:-1:-1;31443:647:0;;;;;:::i;:::-;;:::i;29871:637::-;;;;;;;;;;-1:-1:-1;29871:637:0;;;;;:::i;:::-;;:::i;11426:281::-;;;;;;;;;;-1:-1:-1;11426:281:0;;;;;:::i;:::-;;:::i;32862:1061::-;;;;;;;;;;-1:-1:-1;32862:1061:0;;;;;:::i;:::-;;:::i;12152:100::-;12206:13;12239:5;12232:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12152:100;:::o;13132:194::-;13240:4;13257:39;10444:10;13280:7;13289:6;13257:8;:39::i;:::-;-1:-1:-1;13314:4:0;13132:194;;;;:::o;30648:323::-;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;;;;;;;;;30794:4:::1;30786;30765:13;12561:12:::0;;;12473:108;30765:13:::1;:17;::::0;30781:1:::1;30765:17;:::i;:::-;30764:26;;;;:::i;:::-;30763:35;;;;:::i;:::-;30751:8;:47;;30729:136;;;::::0;-1:-1:-1;;;30729:136:0;;5809:2:1;30729:136:0::1;::::0;::::1;5791:21:1::0;5848:2;5828:18;;;5821:30;5887:34;5867:18;;;5860:62;-1:-1:-1;;;5938:18:1;;;5931:37;5985:19;;30729:136:0::1;5607:403:1::0;30729:136:0::1;30918:11;::::0;30881:49:::1;::::0;30908:8;;30881:49:::1;::::0;;;::::1;30941:11;:22:::0;30648:323::o;13334:454::-;13474:4;13491:36;13501:6;13509:9;13520:6;13491:9;:36::i;:::-;13538:220;13561:6;10444:10;13609:138;13665:6;13609:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13609:19:0;;;;;;:11;:19;;;;;;;;10444:10;13609:33;;;;;;;;;;:37;:138::i;:::-;13538:8;:220::i;:::-;-1:-1:-1;13776:4:0;13334:454;;;;;:::o;30979:450::-;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;31121:4:::1;31113;31091:13;12561:12:::0;;;12473:108;31091:13:::1;:18;::::0;31107:2:::1;31091:18;:::i;:::-;31090:27;;;;:::i;:::-;31089:36;;;;:::i;:::-;31077:8;:48;;31055:134;;;::::0;-1:-1:-1;;;31055:134:0;;6217:2:1;31055:134:0::1;::::0;::::1;6199:21:1::0;6256:2;6236:18;;;6229:30;6295:34;6275:18;;;6268:62;-1:-1:-1;;;6346:18:1;;;6339:34;6390:19;;31055:134:0::1;6015:400:1::0;31055:134:0::1;31234:15;;31222:8;:27:::0;31200:120:::1;;;::::0;-1:-1:-1;;;31200:120:0;;6622:2:1;31200:120:0::1;::::0;::::1;6604:21:1::0;6661:2;6641:18;;;6634:30;6700:34;6680:18;;;6673:62;-1:-1:-1;;;6751:18:1;;;6744:41;6802:19;;31200:120:0::1;6420:407:1::0;31200:120:0::1;31368:15;::::0;31336:48:::1;::::0;31358:8;;31336:48:::1;::::0;;;::::1;31395:15;:26:::0;30979:450::o;13796:293::-;10444:10;13909:4;13998:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13998:34:0;;;;;;;;;;13909:4;;13926:133;;13976:7;;13998:50;;14037:10;13998:38;:50::i;11270:148::-;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;11377:1:::1;11361:6:::0;;11340:40:::1;::::0;-1:-1:-1;;;;;11361:6:0;;::::1;::::0;11340:40:::1;::::0;11377:1;;11340:40:::1;11408:1;11391:19:::0;;-1:-1:-1;;;;;;11391:19:0::1;::::0;;11270:148::o;29171:388::-;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29315:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;:46;::::1;;:34;::::0;;::::1;:46;;::::0;29293:138:::1;;;;-1:-1:-1::0;;;29293:138:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29442:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:45;;-1:-1:-1;;29442:45:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29503:48;;154:41:1;;;29503:48:0::1;::::0;127:18:1;29503:48:0::1;;;;;;;;29171:388:::0;;:::o;29571:292::-;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;29683:12:::1;;29671:8;:24:::0;29649:114:::1;;;::::0;-1:-1:-1;;;29649:114:0;;7445:2:1;29649:114:0::1;::::0;::::1;7427:21:1::0;7484:2;7464:18;;;7457:30;7523:34;7503:18;;;7496:62;-1:-1:-1;;;7574:18:1;;;7567:38;7622:19;;29649:114:0::1;7243:404:1::0;29649:114:0::1;29808:12;::::0;29779:42:::1;::::0;29798:8;;29779:42:::1;::::0;;;::::1;29832:12;:23:::0;29571:292::o;28779:384::-;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28928:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;:42;::::1;;:30;::::0;;::::1;:42;;::::0;28906:134:::1;;;;-1:-1:-1::0;;;28906:134:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29051:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;;;;:41;;-1:-1:-1;;29051:41:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29108:47;;154:41:1;;;29108:47:0::1;::::0;127:18:1;29108:47:0::1;14:187:1::0;21348:86:0;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;21403:16:::1;:23:::0;;-1:-1:-1;;;;21403:23:0::1;-1:-1:-1::0;;;21403:23:0::1;::::0;;21348:86::o;12260:104::-;12316:13;12349:7;12342:14;;;;;:::i;30516:124::-;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;16821:26:::1;30571:15;:27:::0;;;30609:11:::1;:23:::0;30516:124::o;14097:393::-;14215:4;14232:228;10444:10;14282:7;14304:145;14361:15;14304:145;;;;;;;;;;;;;;;;;10444:10;14304:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14304:34:0;;;;;;;;;;;;:38;:145::i;12740:200::-;12851:4;12868:42;10444:10;12892:9;12903:6;12868:9;:42::i;28415:356::-;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28549:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;28527:131:::1;;;;-1:-1:-1::0;;;28527:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28669:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;28669:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28723:40;;154:41:1;;;28723:40:0::1;::::0;127:18:1;28723:40:0::1;14:187:1::0;31443:647:0;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;31677:2:::1;31654:19;:25;;31632:125;;;::::0;-1:-1:-1;;;31632:125:0;;7854:2:1;31632:125:0::1;::::0;::::1;7836:21:1::0;7893:2;7873:18;;;7866:30;7932:34;7912:18;;;7905:62;-1:-1:-1;;;7983:18:1;;;7976:48;8041:19;;31632:125:0::1;7652:414:1::0;31632:125:0::1;31802:4;31790:8;:16;;:33;;;;-1:-1:-1::0;31810:13:0;31790:33:::1;31768:131;;;::::0;-1:-1:-1;;;31768:131:0;;8273:2:1;31768:131:0::1;::::0;::::1;8255:21:1::0;8312:2;8292:18;;;8285:30;8351:34;8331:18;;;8324:62;-1:-1:-1;;;8402:18:1;;;8395:46;8458:19;;31768:131:0::1;8071:412:1::0;31768:131:0::1;31910:15;:37:::0;;;31958:51:::1;31967:13:::0;31982:10:::1;-1:-1:-1::0;;31958:8:0::1;:51::i;:::-;32020:16;:27:::0;;;;-1:-1:-1;32058:13:0::1;:24:::0;;-1:-1:-1;;32058:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;31443:647:0:o;29871:637::-;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;29959:15:::1;::::0;-1:-1:-1;;;;;29959:37:0;;::::1;:15:::0;::::1;:37;29955:546;;-1:-1:-1::0;;;;;30039:32:0;::::1;30013:125;;;::::0;-1:-1:-1;;;30013:125:0;;8690:2:1;30013:125:0::1;::::0;::::1;8672:21:1::0;8729:2;8709:18;;;8702:30;8768:33;8748:18;;;8741:61;8819:18;;30013:125:0::1;8488:355:1::0;30013:125:0::1;30201:13;-1:-1:-1::0;;;;;30179:35:0::1;:18;-1:-1:-1::0;;;;;30179:35:0::1;::::0;30153:128:::1;;;::::0;-1:-1:-1;;;30153:128:0;;8690:2:1;30153:128:0::1;::::0;::::1;8672:21:1::0;8729:2;8709:18;;;8702:30;8768:33;8748:18;;;8741:61;8819:18;;30153:128:0::1;8488:355:1::0;30153:128:0::1;30408:15;::::0;30301:137:::1;::::0;-1:-1:-1;;;9050:30:1;;-1:-1:-1;;;;;30408:15:0;;::::1;::::0;30301:137;::::1;::::0;9105:2:1;9096:12;30301:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;30453:15;:36:::0;;-1:-1:-1;;;;;;30453:36:0::1;-1:-1:-1::0;;;;;30453:36:0;::::1;;::::0;;29955:546:::1;29871:637:::0;:::o;11426:281::-;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11529:22:0;::::1;11507:110;;;::::0;-1:-1:-1;;;11507:110:0;;9321:2:1;11507:110:0::1;::::0;::::1;9303:21:1::0;9360:2;9340:18;;;9333:30;9399:34;9379:18;;;9372:62;-1:-1:-1;;;9450:18:1;;;9443:36;9496:19;;11507:110:0::1;9119:402:1::0;11507:110:0::1;11654:6;::::0;;11633:38:::1;::::0;-1:-1:-1;;;;;11633:38:0;;::::1;::::0;11654:6;::::1;::::0;11633:38:::1;::::0;::::1;11682:6;:17:::0;;-1:-1:-1;;;;;;11682:17:0::1;-1:-1:-1::0;;;;;11682:17:0;;;::::1;::::0;;;::::1;::::0;;11426:281::o;32862:1061::-;32973:4;11183:6;;-1:-1:-1;;;;;11183:6:0;10444:10;11183:22;11175:67;;;;-1:-1:-1;;;11175:67:0;;;;;;;:::i;:::-;33058:19:::1;;33035:20;;:42;;;;:::i;:::-;33017:15;:60;32995:142;;;::::0;-1:-1:-1;;;32995:142:0;;9861:2:1;32995:142:0::1;::::0;::::1;9843:21:1::0;;;9880:18;;;9873:30;9939:34;9919:18;;;9912:62;9991:18;;32995:142:0::1;9659:356:1::0;32995:142:0::1;33167:4;33156:7;:15;;33148:70;;;::::0;-1:-1:-1;;;33148:70:0;;10222:2:1;33148:70:0::1;::::0;::::1;10204:21:1::0;10261:2;10241:18;;;10234:30;10300:34;10280:18;;;10273:62;-1:-1:-1;;;10351:18:1;;;10344:40;10401:19;;33148:70:0::1;10020:406:1::0;33148:70:0::1;33252:15;33229:20;:38:::0;33353:29:::1;::::0;-1:-1:-1;;;33353:29:0;;-1:-1:-1;;;;;33368:13:0::1;1443:32:1::0;33353:29:0::1;::::0;::::1;1425:51:1::0;33322:28:0::1;::::0;33353:4:::1;::::0;:14:::1;::::0;1398:18:1;;33353:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33322:60;;33432:20;33497:5;33478:16;;33455:20;:39;;;;:::i;:::-;:47;;;;:::i;:::-;33432:70:::0;-1:-1:-1;33609:16:0;;33605:110:::1;;33642:61;33658:13;33681:6;33690:12;33642:15;:61::i;:::-;33790:19;33827:13;33790:51;;33852:4;-1:-1:-1::0;;;;;33852:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33879:14:0::1;::::0;::::1;::::0;-1:-1:-1;33879:14:0;;-1:-1:-1;33879:14:0::1;33911:4;33904:11;;;;;11253:1;32862:1061:::0;;;:::o;185:181::-;243:7;;275:5;279:1;275;:5;:::i;:::-;263:17;;304:1;299;:6;;291:46;;;;-1:-1:-1;;;291:46:0;;10822:2:1;291:46:0;;;10804:21:1;10861:2;10841:18;;;10834:30;10900:29;10880:18;;;10873:57;10947:18;;291:46:0;10620:351:1;291:46:0;357:1;185:181;-1:-1:-1;;;185:181:0:o;15953:378::-;-1:-1:-1;;;;;16089:19:0;;16081:68;;;;-1:-1:-1;;;16081:68:0;;11178:2:1;16081:68:0;;;11160:21:1;11217:2;11197:18;;;11190:30;11256:34;11236:18;;;11229:62;-1:-1:-1;;;11307:18:1;;;11300:34;11351:19;;16081:68:0;10976:400:1;16081:68:0;-1:-1:-1;;;;;16168:21:0;;16160:68;;;;-1:-1:-1;;;16160:68:0;;11583:2:1;16160:68:0;;;11565:21:1;11622:2;11602:18;;;11595:30;11661:34;11641:18;;;11634:62;-1:-1:-1;;;11712:18:1;;;11705:32;11754:19;;16160:68:0;11381:398:1;16160:68:0;-1:-1:-1;;;;;16239:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16291:32;;1633:25:1;;;16291:32:0;;1606:18:1;16291:32:0;;;;;;;;15953:378;;;:::o;21442:1683::-;-1:-1:-1;;;;;21574:16:0;;21566:64;;;;-1:-1:-1;;;21566:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21649:18:0;;21641:68;;;;-1:-1:-1;;;21641:68:0;;;;;;;:::i;:::-;21726:6;21736:1;21726:11;21722:93;;21754:28;21770:4;21776:2;21780:1;21754:15;:28::i;:::-;21442:1683;;;:::o;21722:93::-;-1:-1:-1;;;;;21846:22:0;;;;;;:16;:22;;;;;;;;21845:23;:61;;;;-1:-1:-1;;;;;;21886:20:0;;;;;;:16;:20;;;;;;;;21885:21;21845:61;21827:224;;;21941:16;;-1:-1:-1;;;21941:16:0;;;;21933:59;;;;-1:-1:-1;;;21933:59:0;;12796:2:1;21933:59:0;;;12778:21:1;12835:2;12815:18;;;12808:30;12874:32;12854:18;;;12847:60;12924:18;;21933:59:0;12594:354:1;21933:59:0;22007:32;22022:4;22028:2;22032:6;22007:14;:32::i;:::-;22063:19;22073:4;22079:2;22063:9;:19::i;:::-;22138:12;;22128:4;22095:12;12706:18;;;:9;:18;;;;;;22181:16;;-1:-1:-1;;22110:40:0;;-1:-1:-1;;;22181:16:0;;;;:40;;;;;22214:7;22181:40;:67;;;;-1:-1:-1;22239:9:0;;;;22238:10;22181:67;:97;;;;-1:-1:-1;22265:9:0;;;;;;;:13;;22181:97;:143;;;;-1:-1:-1;;;;;;22295:29:0;;;;;;:25;:29;;;;;;;;22181:143;:185;;;;-1:-1:-1;;;;;;22342:24:0;;;;;;:18;:24;;;;;;;;22341:25;22181:185;:225;;;;-1:-1:-1;;;;;;22384:22:0;;;;;;:18;:22;;;;;;;;22383:23;22181:225;22163:364;;;22433:9;:16;;-1:-1:-1;;22433:16:0;22445:4;22433:16;;;22464:19;:17;:19::i;:::-;22498:9;:17;;-1:-1:-1;;22498:17:0;;;22163:364;22555:9;;22539:12;;22555:9;;22554:10;:30;;;;-1:-1:-1;22568:16:0;;-1:-1:-1;;;22568:16:0;;;;22554:30;-1:-1:-1;;;;;22601:24:0;;;;;;:18;:24;;;;;;22539:45;;-1:-1:-1;22601:24:0;;;:50;;-1:-1:-1;;;;;;22629:22:0;;;;;;:18;:22;;;;;;;;22601:50;22597:98;;;-1:-1:-1;22678:5:0;22597:98;22711:7;:24;;;;-1:-1:-1;22722:9:0;;;;;;;:13;;22711:24;22707:367;;;22776:9;;22752:11;;22789:3;;22767:18;;22776:9;;;;;22767:6;:18;:::i;:::-;22766:26;;;;:::i;:::-;22838:8;;22752:40;;-1:-1:-1;22807:18:0;;22850:3;;22829:17;;22838:8;;;;;22829:6;:17;:::i;:::-;22828:25;;;;:::i;:::-;22807:46;-1:-1:-1;22877:12:0;22886:3;22877:6;:12;:::i;:::-;22868:21;;22904:41;22920:4;22934;22941:3;22904:15;:41::i;:::-;22966:14;;22962:101;;23032:9;;23001:46;;23025:4;;-1:-1:-1;;;;;23032:9:0;23043:3;23001:15;:46::i;:::-;22737:337;;22707:367;23084:33;23100:4;23106:2;23110:6;23084:15;:33::i;:::-;21555:1570;;21442:1683;;;:::o;518:226::-;638:7;674:12;666:6;;;;658:29;;;;-1:-1:-1;;;658:29:0;;;;;;;;:::i;:::-;-1:-1:-1;698:9:0;710:5;714:1;710;:5;:::i;:::-;698:17;518:226;-1:-1:-1;;;;;518:226:0:o;14498:606::-;-1:-1:-1;;;;;14638:20:0;;14630:70;;;;-1:-1:-1;;;14630:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14719:23:0;;14711:71;;;;-1:-1:-1;;;14711:71:0;;;;;;;:::i;:::-;14871:108;14907:6;14871:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14871:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;14851:17:0;;;;;;;:9;:17;;;;;;:128;;;;15013:20;;;;;;;:32;;15038:6;15013:24;:32::i;:::-;-1:-1:-1;;;;;14990:20:0;;;;;;;:9;:20;;;;;;;:55;;;;15061:35;;;;;;;;;;15089:6;1633:25:1;;1621:2;1606:18;;1487:177;23133:1258:0;-1:-1:-1;;;;;23237:29:0;;;;;;:25;:29;;;;;;;;:74;;;;-1:-1:-1;;;;;;23284:27:0;;;;;;:21;:27;;;;;;;;23283:28;23237:74;23219:1165;;;23374:11;;23364:6;:21;;23338:125;;;;-1:-1:-1;;;23338:125:0;;13285:2:1;23338:125:0;;;13267:21:1;13324:2;13304:18;;;13297:30;13363:34;13343:18;;;13336:62;-1:-1:-1;;;13414:18:1;;;13407:40;13464:19;;23338:125:0;13083:406:1;23338:125:0;23465:4;:9;;-1:-1:-1;;;;;23465:9:0;;;;-1:-1:-1;;;;;;23465:9:0;;;;;;21442:1683;;;:::o;23219:1165::-;-1:-1:-1;;;;;23510:31:0;;;;;;:25;:31;;;;;;;;:74;;;;-1:-1:-1;;;;;;23559:25:0;;;;;;:21;:25;;;;;;;;23558:26;23510:74;23492:892;;;23647:11;;23637:6;:21;;23611:123;;;;-1:-1:-1;;;23611:123:0;;13696:2:1;23611:123:0;;;13678:21:1;13735:2;13715:18;;;13708:30;13774:34;13754:18;;;13747:62;-1:-1:-1;;;13825:18:1;;;13818:38;13873:19;;23611:123:0;13494:404:1;23611:123:0;23801:15;;-1:-1:-1;;;;;12706:18:0;;12679:7;12706:18;;;:9;:18;;;;;;23775:22;;:6;:22;:::i;:::-;:41;;23749:127;;;;-1:-1:-1;;;23749:127:0;;14105:2:1;23749:127:0;;;14087:21:1;14144:2;14124:18;;;14117:30;14183:26;14163:18;;;14156:54;14227:18;;23749:127:0;13903:348:1;23492:892:0;-1:-1:-1;;;;;23899:25:0;;;;;;:21;:25;;;;;;;;23894:490;;23993:15;;-1:-1:-1;;;;;12706:18:0;;12679:7;12706:18;;;:9;:18;;;;;;23967:22;;:6;:22;:::i;:::-;:41;;23941:126;;;;-1:-1:-1;;;23941:126:0;;14458:2:1;23941:126:0;;;14440:21:1;14497:2;14477:18;;;14470:30;14536:25;14516:18;;;14509:53;14579:18;;23941:126:0;14256:347:1;23894:490:0;24090:9;;;;24089:10;:41;;;;-1:-1:-1;;;;;;24103:27:0;;;;;;:21;:27;;;;;;;;24089:41;24085:299;;;24160:12;;24151:6;:21;24147:226;;;24219:11;;24205:4;;-1:-1:-1;;;;;24205:4:0;;;;;;24193:17;;;;:11;:17;;;;;;;;:23;;;;;;;;;:37;24263:24;24281:6;24263:15;:24;:::i;:::-;24249:11;:38;21442:1683;;;:::o;24147:226::-;24342:15;24328:11;:29;23133:1258;;;:::o;24399:1598::-;-1:-1:-1;;;;;24501:31:0;;;24488:10;24501:31;;;:25;:31;;;;;;;24557:29;;;;;;;;24599:13;:17;;-1:-1:-1;;24677:12:0;;;24501:31;;;;;24557:29;24702:234;;;;24745:27;;24729:13;:43;;24745:27;;;;;;;;-1:-1:-1;;24787:43:0;;;;;;;24803:27;;;;;;24787:43;;;;;-1:-1:-1;;24891:33:0;24855:21;;;;;24845:31;;-1:-1:-1;;24891:33:0;;-1:-1:-1;;;24902:22:0;;;;;;;24891:33;;;;;;;24702:234;24952:5;24948:432;;;24990:26;;24974:13;:42;;24990:26;;;;-1:-1:-1;;25031:42:0;;;;;;;24990:26;25047;;;;;;25031:42;;;;;;;;-1:-1:-1;;25133:32:0;25098:20;;;;;25088:30;;;;-1:-1:-1;;25133:32:0;;25144:21;;;;;25133:32;;;;;;;;-1:-1:-1;;;;;25197:14:0;;-1:-1:-1;25197:14:0;;;:10;:14;;;;;;:19;:171;;-1:-1:-1;;;;;25354:14:0;;;;;;:10;:14;;;;;;25197:171;;;-1:-1:-1;;;;;12706:18:0;;12679:7;12706:18;;;:9;:18;;;;;;25236:27;:98;;-1:-1:-1;;;;;25320:14:0;;;;;;:10;:14;;;;;;25236:98;;;25284:15;25236:98;-1:-1:-1;;;;;25180:14:0;;;;;;:10;:14;;;;;:188;24948:432;25397:6;25396:7;:17;;;;;25408:5;25407:6;25396:17;25392:245;;;25446:27;;25430:13;:43;;25446:27;;;;;;;;-1:-1:-1;;25488:43:0;;;;;;;25504:27;;;;;;25488:43;;;;;-1:-1:-1;;25592:33:0;25556:21;;;;;25546:31;;-1:-1:-1;;25592:33:0;;-1:-1:-1;;;25603:22:0;;;;;;;25592:33;;;;;;;25392:245;-1:-1:-1;;;;;25667:16:0;;;;;;:54;;-1:-1:-1;;;;;;25700:21:0;;25714:6;25700:21;;25667:54;:96;;;;-1:-1:-1;;;;;;25739:24:0;;;;;;:18;:24;;;;;;;;25738:25;25667:96;:136;;;;-1:-1:-1;;;;;;25781:22:0;;;;;;:18;:22;;;;;;;;25780:23;25667:136;25649:266;;;25835:5;25834:6;:20;;;;-1:-1:-1;25845:9:0;;;;25844:10;25834:20;25830:73;;;25892:11;;-1:-1:-1;;;;;25873:16:0;;;;;;:10;:16;;;;;;:30;;25892:11;25873:30;:::i;:::-;25856:14;:47;25830:73;25981:8;;;;;;;;;25971:7;;;;;;25939:29;;25981:8;25955:13;;;;;25939;:29;:::i;:::-;:39;;;;:::i;:::-;:50;;;;:::i;:::-;25927:9;;:62;;;;;;;;;;;;;;;;;;24477:1520;;24399:1598;;:::o;26005:1186::-;26097:4;26053:23;12706:18;;;:9;:18;;;;;;26196:12;;26142:21;;26196:16;;26211:1;26196:16;:::i;:::-;26178:15;:34;26174:101;;;26247:12;;:16;;26262:1;26247:16;:::i;:::-;26229:34;;26174:101;26383:9;;26285:12;;;;26408:1;;26383:9;;;;;;;26335:31;;26353:13;26335:15;:31;:::i;:::-;26334:58;;;;:::i;:::-;:75;;;;:::i;:::-;26308:101;-1:-1:-1;26420:20:0;26443:35;26308:101;26443:15;:35;:::i;:::-;26420:58;;26491:31;26509:12;26491:17;:31::i;:::-;26535:27;26565:41;26589:17;26565:21;:41;:::i;:::-;26674:8;;26535:71;;-1:-1:-1;26617:19:0;;26674:8;;;;;;;26653:17;;26669:1;;26653:13;:17;:::i;:::-;26652:30;;;;:::i;:::-;26639:9;;:44;;;:9;;;;;:44;:::i;:::-;26746:13;;26617:66;;;;;-1:-1:-1;26694:26:0;;26803:1;;26617:66;;26724:35;;26746:13;26724:19;:35;:::i;:::-;26723:64;;;;:::i;:::-;:81;;;;:::i;:::-;26839:15;;26831:87;;26694:110;;-1:-1:-1;;;;;;26839:15:0;;26882:21;;26831:87;;;;26882:21;26839:15;26831:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26817:101:0;;-1:-1:-1;;26935:19:0;;26931:253;;26971:50;26985:15;27002:18;26971:13;:50::i;:::-;27041:131;;;15599:25:1;;;15655:2;15640:18;;15633:34;;;15683:18;;;15676:34;;;27041:131:0;;15587:2:1;15572:18;27041:131:0;;;;;;;26931:253;26042:1149;;;;;;;;26005:1186::o;27576:473::-;27667:16;;;27681:1;27667:16;;;;;;;;27643:21;;27667:16;;;;;;;;;;-1:-1:-1;27667:16:0;27643:40;;27712:4;27694;27699:1;27694:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27694:23:0;;;:7;;;;;;;;;;:23;;;;27738:15;;:22;;;-1:-1:-1;;;27738:22:0;;;;:15;;;;;:20;;:22;;;;;27694:7;;27738:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27728:4;27733:1;27728:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27728:32:0;;;:7;;;;;;;;;:32;27803:15;;27771:62;;27788:4;;27803:15;27821:11;27771:8;:62::i;:::-;27844:15;;:197;;-1:-1:-1;;;27844:197:0;;-1:-1:-1;;;;;27844:15:0;;;;:66;;:197;;27925:11;;27844:15;;27968:4;;27995;;28015:15;;27844:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27632:417;27576:473;:::o;27199:369::-;27313:15;;27281:62;;27298:4;;-1:-1:-1;;;;;27313:15:0;27331:11;27281:8;:62::i;:::-;27354:15;;:206;;-1:-1:-1;;;27354:206:0;;27426:4;27354:206;;;17567:34:1;17617:18;;;17610:34;;;27354:15:0;17660:18:1;;;17653:34;;;17703:18;;;17696:34;27512:6:0;17746:19:1;;;17739:44;27534:15:0;17799:19:1;;;17792:35;-1:-1:-1;;;;;27354:15:0;;;;:31;;27393:9;;17501:19:1;;27354:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1669:180::-;1728:6;1781:2;1769:9;1760:7;1756:23;1752:32;1749:52;;;1797:1;1794;1787:12;1749:52;-1:-1:-1;1820:23:1;;1669:180;-1:-1:-1;1669:180:1:o;1854:456::-;1931:6;1939;1947;2000:2;1988:9;1979:7;1975:23;1971:32;1968:52;;;2016:1;2013;2006:12;1968:52;2055:9;2042:23;2074:31;2099:5;2074:31;:::i;:::-;2124:5;-1:-1:-1;2181:2:1;2166:18;;2153:32;2194:33;2153:32;2194:33;:::i;:::-;1854:456;;2246:7;;-1:-1:-1;;;2300:2:1;2285:18;;;;2272:32;;1854:456::o;2712:247::-;2771:6;2824:2;2812:9;2803:7;2799:23;2795:32;2792:52;;;2840:1;2837;2830:12;2792:52;2879:9;2866:23;2898:31;2923:5;2898:31;:::i;2964:160::-;3029:20;;3085:13;;3078:21;3068:32;;3058:60;;3114:1;3111;3104:12;3129:315;3194:6;3202;3255:2;3243:9;3234:7;3230:23;3226:32;3223:52;;;3271:1;3268;3261:12;3223:52;3310:9;3297:23;3329:31;3354:5;3329:31;:::i;:::-;3379:5;-1:-1:-1;3403:35:1;3434:2;3419:18;;3403:35;:::i;:::-;3393:45;;3129:315;;;;;:::o;3449:388::-;3517:6;3525;3578:2;3566:9;3557:7;3553:23;3549:32;3546:52;;;3594:1;3591;3584:12;3546:52;3633:9;3620:23;3652:31;3677:5;3652:31;:::i;:::-;3702:5;-1:-1:-1;3759:2:1;3744:18;;3731:32;3772:33;3731:32;3772:33;:::i;:::-;3824:7;3814:17;;;3449:388;;;;;:::o;3842:452::-;3925:6;3933;3941;3949;4002:3;3990:9;3981:7;3977:23;3973:33;3970:53;;;4019:1;4016;4009:12;3970:53;4055:9;4042:23;4032:33;;4112:2;4101:9;4097:18;4084:32;4074:42;;4166:2;4155:9;4151:18;4138:32;4179:31;4204:5;4179:31;:::i;:::-;4229:5;-1:-1:-1;4253:35:1;4284:2;4269:18;;4253:35;:::i;:::-;4243:45;;3842:452;;;;;;;:::o;4299:380::-;4378:1;4374:12;;;;4421;;;4442:61;;4496:4;4488:6;4484:17;4474:27;;4442:61;4549:2;4541:6;4538:14;4518:18;4515:38;4512:161;;4595:10;4590:3;4586:20;4583:1;4576:31;4630:4;4627:1;4620:15;4658:4;4655:1;4648:15;4512:161;;4299:380;;;:::o;4684:356::-;4886:2;4868:21;;;4905:18;;;4898:30;4964:34;4959:2;4944:18;;4937:62;5031:2;5016:18;;4684:356::o;5045:127::-;5106:10;5101:3;5097:20;5094:1;5087:31;5137:4;5134:1;5127:15;5161:4;5158:1;5151:15;5177:168;5217:7;5283:1;5279;5275:6;5271:14;5268:1;5265:21;5260:1;5253:9;5246:17;5242:45;5239:71;;;5290:18;;:::i;:::-;-1:-1:-1;5330:9:1;;5177:168::o;5350:127::-;5411:10;5406:3;5402:20;5399:1;5392:31;5442:4;5439:1;5432:15;5466:4;5463:1;5456:15;5482:120;5522:1;5548;5538:35;;5553:18;;:::i;:::-;-1:-1:-1;5587:9:1;;5482:120::o;6832:406::-;7034:2;7016:21;;;7073:2;7053:18;;;7046:30;7112:34;7107:2;7092:18;;7085:62;-1:-1:-1;;;7178:2:1;7163:18;;7156:40;7228:3;7213:19;;6832:406::o;9526:128::-;9566:3;9597:1;9593:6;9590:1;9587:13;9584:39;;;9603:18;;:::i;:::-;-1:-1:-1;9639:9:1;;9526:128::o;10431:184::-;10501:6;10554:2;10542:9;10533:7;10529:23;10525:32;10522:52;;;10570:1;10567;10560:12;10522:52;-1:-1:-1;10593:16:1;;10431:184;-1:-1:-1;10431:184:1:o;11784:399::-;11986:2;11968:21;;;12025:2;12005:18;;;11998:30;12064:34;12059:2;12044:18;;12037:62;-1:-1:-1;;;12130:2:1;12115:18;;12108:33;12173:3;12158:19;;11784:399::o;12188:401::-;12390:2;12372:21;;;12429:2;12409:18;;;12402:30;12468:34;12463:2;12448:18;;12441:62;-1:-1:-1;;;12534:2:1;12519:18;;12512:35;12579:3;12564:19;;12188:401::o;12953:125::-;12993:4;13021:1;13018;13015:8;13012:34;;;13026:18;;:::i;:::-;-1:-1:-1;13063:9:1;;12953:125::o;14608:204::-;14646:3;14682:4;14679:1;14675:12;14714:4;14711:1;14707:12;14749:3;14743:4;14739:14;14734:3;14731:23;14728:49;;;14757:18;;:::i;:::-;14793:13;;14608:204;-1:-1:-1;;;14608:204:1:o;14817:165::-;14855:1;14889:4;14886:1;14882:12;14913:3;14903:37;;14920:18;;:::i;:::-;14972:3;14965:4;14962:1;14958:12;14954:22;14949:27;;;14817:165;;;;:::o;14987:195::-;15025:4;15062;15059:1;15055:12;15094:4;15091:1;15087:12;15119:3;15114;15111:12;15108:38;;;15126:18;;:::i;:::-;15163:13;;;14987:195;-1:-1:-1;;;14987:195:1:o;15853:127::-;15914:10;15909:3;15905:20;15902:1;15895:31;15945:4;15942:1;15935:15;15969:4;15966:1;15959:15;15985:251;16055:6;16108:2;16096:9;16087:7;16083:23;16079:32;16076:52;;;16124:1;16121;16114:12;16076:52;16156:9;16150:16;16175:31;16200:5;16175:31;:::i;16241:980::-;16503:4;16551:3;16540:9;16536:19;16582:6;16571:9;16564:25;16608:2;16646:6;16641:2;16630:9;16626:18;16619:34;16689:3;16684:2;16673:9;16669:18;16662:31;16713:6;16748;16742:13;16779:6;16771;16764:22;16817:3;16806:9;16802:19;16795:26;;16856:2;16848:6;16844:15;16830:29;;16877:1;16887:195;16901:6;16898:1;16895:13;16887:195;;;16966:13;;-1:-1:-1;;;;;16962:39:1;16950:52;;17057:15;;;;17022:12;;;;16998:1;16916:9;16887:195;;;-1:-1:-1;;;;;;;17138:32:1;;;;17133:2;17118:18;;17111:60;-1:-1:-1;;;17202:3:1;17187:19;17180:35;17099:3;16241:980;-1:-1:-1;;;16241:980:1:o;17838:306::-;17926:6;17934;17942;17995:2;17983:9;17974:7;17970:23;17966:32;17963:52;;;18011:1;18008;18001:12;17963:52;18040:9;18034:16;18024:26;;18090:2;18079:9;18075:18;18069:25;18059:35;;18134:2;18123:9;18119:18;18113:25;18103:35;;17838:306;;;;;:::o

Swarm Source

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