ETH Price: $1,761.62 (-1.40%)
Gas: 0.63 Gwei

Token

Accelerationist Gang (AccGang)
 

Overview

Max Total Supply

4,000,000 AccGang

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
32,000 AccGang

Value
$0.00
0x78c1BF7DbA36FE3d2cC9A18fBEFB140FEceF3fbF
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:
AccGang

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-10-31
*/

// SPDX-License-Identifier: MIT
pragma solidity =0.8.15;
pragma experimental ABIEncoderV2;   

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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 IERC20Metadata is IERC20 {

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function transfer(address 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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;

    address public marketingWallet;
    address public developmentWallet;
    address public liquidityWallet;
    address public operationsWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    mapping(address => bool) public blocked;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

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

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

    constructor() ERC20("Accelerationist Gang", "AccGang") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); 

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        // launch buy fees
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 20;
        uint256 _buyOperationsFee = 0;
        
        // launch sell fees
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 20;
        uint256 _sellOperationsFee = 0;

        uint256 totalSupply = 4_000_000 * 1e18;

        maxTransaction = 40_000 * 1e18; // 1.0% max transaction at launch
        maxWallet = 80_000 * 1e18; // 2.0% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;

        marketingWallet = address(0xca4018c69A5252549BD36D573C88681C5DCcbe7e); 
        developmentWallet = address(0xca4018c69A5252549BD36D573C88681C5DCcbe7e); 
        liquidityWallet = address(0xca4018c69A5252549BD36D573C88681C5DCcbe7e); 
        operationsWallet = address(0xca4018c69A5252549BD36D573C88681C5DCcbe7e);

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
    }

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

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

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

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

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

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

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

    function setBuyfee(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        require(buyTotalFees <= 25);
    }

    function setSellfee(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;
        require(sellTotalFees <= 99); 
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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


    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

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

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }


        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMark = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMark - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"operationsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"setBuyfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"setSellfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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 IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600e805462ffffff191660019081179091556010805460ff191690911790553480156200005657600080fd5b506040518060400160405280601481526020017f416363656c65726174696f6e6973742047616e670000000000000000000000008152506040518060400160405280600781526020016641636347616e6760c81b8152508160039081620000be91906200078a565b506004620000cd82826200078a565b505050620000ea620000e46200042e60201b60201c565b62000432565b6006546001600160a01b03166200010381600162000484565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200014e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000174919062000856565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e8919062000856565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025c919062000856565b6001600160a01b031660a08190526200027790600162000484565b60a05162000287906001620004fe565b690878678326eac9000000600b556910f0cf064dd592000000600d55600080601481808083816a034f086f3b33b684000000612710620002c98260056200089e565b620002d59190620008c0565b600c5560148990556015889055601687905560178690558587620002fa8a8c620008e3565b620003069190620008e3565b620003129190620008e3565b6013556019859055601a849055601b839055601c8290558183620003378688620008e3565b620003439190620008e3565b6200034f9190620008e3565b6018556007805473ca4018c69a5252549bd36d573c88681c5dccbe7e6001600160a01b031991821681179092556008805482168317905560098054821683179055600a80549091169091179055620003bb620003b36005546001600160a01b031690565b600162000552565b620003c830600162000552565b620003d761dead600162000552565b620003f6620003ee6005546001600160a01b031690565b600162000484565b6200040330600162000484565b6200041261dead600162000484565b6200041e3382620005fc565b50505050505050505050620008fe565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004d35760405162461bcd60e51b815260206004820181905260248201526000805160206200345783398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200059d5760405162461bcd60e51b81526020600482018190526024820152600080516020620034578339815191526044820152606401620004ca565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004ca565b8060026000828254620006689190620008e3565b90915550506001600160a01b0382166000908152602081905260408120805483929062000697908490620008e3565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200071157607f821691505b6020821081036200073257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006e157600081815260208120601f850160051c81016020861015620007615750805b601f850160051c820191505b8181101562000782578281556001016200076d565b505050505050565b81516001600160401b03811115620007a657620007a6620006e6565b620007be81620007b78454620006fc565b8462000738565b602080601f831160018114620007f65760008415620007dd5750858301515b600019600386901b1c1916600185901b17855562000782565b600085815260208120601f198616915b82811015620008275788860151825594840194600190910190840162000806565b5085821015620008465787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200086957600080fd5b81516001600160a01b03811681146200088157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620008bb57620008bb62000888565b500290565b600082620008de57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008f957620008f962000888565b500190565b60805160a051612afb6200095c6000396000818161058a015281816110d7015261183701526000818161042b015281816117f90152818161244f0152818161250801528181612544015281816125be01526126260152612afb6000f3fe6080604052600436106103905760003560e01c80638da5cb5b116101dc578063d469801611610102578063ef8700e5116100a0578063f887ea401161006f578063f887ea4014610a73578063f8b45b0514610a93578063fb002c9714610aa9578063fd72e22a14610abf57600080fd5b8063ef8700e514610a11578063f11a24d314610a27578063f2fde38b14610a3d578063f637434214610a5d57600080fd5b8063e1bc3394116100dc578063e1bc339414610986578063e2f45605146109b6578063e5962195146109cc578063e884f260146109fc57600080fd5b8063d46980161461090a578063d85ba0631461092a578063dd62ed3e1461094057600080fd5b8063b20414111161017a578063c04a541411610149578063c04a54141461089a578063c3f70b52146108ba578063c876d0b9146108d0578063d257b34f146108ea57600080fd5b8063b204141114610815578063b62496f51461082b578063bbc0c7421461085b578063c02466681461087a57600080fd5b806395d89b41116101b657806395d89b41146107a05780639a7a23d6146107b5578063a457c2d7146107d5578063a9059cbb146107f557600080fd5b80638da5cb5b1461074c578063921369131461076a578063924de9b71461078057600080fd5b806349bd5a5e116102c15780636a486a8e1161025f5780637571336a1161022e5780637571336a146106e157806375f0a874146107015780637bce5a04146107215780638a8c523c1461073757600080fd5b80636a486a8e146106605780636ddd17131461067657806370a0823114610696578063715018a6146106cc57600080fd5b80634f77f6c01161029b5780634f77f6c0146105e65780635342acb4146105fc5780635a139dd414610635578063622565891461064b57600080fd5b806349bd5a5e146105785780634a62bb65146105ac5780634f2b3e2d146105c657600080fd5b80631c499ab01161032e57806323b872dd1161030857806323b872dd1461050657806327c8f83514610526578063313ce5671461053c578063395093511461055857600080fd5b80631c499ab0146104b05780631f3fed8f146104d057806323b41857146104e657600080fd5b80631694505e1161036a5780631694505e1461041957806318160ddd1461046557806318a94cf1146104845780631a8145bb1461049a57600080fd5b80630517d13d1461039c57806306fdde03146103be578063095ea7b3146103e957600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103bc6103b736600461269e565b610adf565b005b3480156103ca57600080fd5b506103d3610bbf565b6040516103e091906126b7565b60405180910390f35b3480156103f557600080fd5b50610409610404366004612721565b610c51565b60405190151581526020016103e0565b34801561042557600080fd5b5061044d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103e0565b34801561047157600080fd5b506002545b6040519081526020016103e0565b34801561049057600080fd5b50610476601b5481565b3480156104a657600080fd5b50610476601e5481565b3480156104bc57600080fd5b506103bc6104cb36600461269e565b610c67565b3480156104dc57600080fd5b50610476601d5481565b3480156104f257600080fd5b506103bc61050136600461274d565b610d38565b34801561051257600080fd5b5061040961052136600461277f565b610dae565b34801561053257600080fd5b5061044d61dead81565b34801561054857600080fd5b50604051601281526020016103e0565b34801561056457600080fd5b50610409610573366004612721565b610e58565b34801561058457600080fd5b5061044d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b857600080fd5b50600e546104099060ff1681565b3480156105d257600080fd5b506103bc6105e136600461274d565b610e94565b3480156105f257600080fd5b50610476601c5481565b34801561060857600080fd5b506104096106173660046127c0565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561064157600080fd5b5061047660175481565b34801561065757600080fd5b50610409610f04565b34801561066c57600080fd5b5061047660185481565b34801561068257600080fd5b50600e546104099062010000900460ff1681565b3480156106a257600080fd5b506104766106b13660046127c0565b6001600160a01b031660009081526020819052604090205490565b3480156106d857600080fd5b506103bc610f41565b3480156106ed57600080fd5b506103bc6106fc3660046127ed565b610f77565b34801561070d57600080fd5b5060075461044d906001600160a01b031681565b34801561072d57600080fd5b5061047660145481565b34801561074357600080fd5b506103bc610fcc565b34801561075857600080fd5b506005546001600160a01b031661044d565b34801561077657600080fd5b5061047660195481565b34801561078c57600080fd5b506103bc61079b366004612822565b611056565b3480156107ac57600080fd5b506103d361109c565b3480156107c157600080fd5b506103bc6107d03660046127ed565b6110ab565b3480156107e157600080fd5b506104096107f0366004612721565b61118a565b34801561080157600080fd5b50610409610810366004612721565b611223565b34801561082157600080fd5b5061047660165481565b34801561083757600080fd5b506104096108463660046127c0565b60236020526000908152604090205460ff1681565b34801561086757600080fd5b50600e5461040990610100900460ff1681565b34801561088657600080fd5b506103bc6108953660046127ed565b611230565b3480156108a657600080fd5b5060085461044d906001600160a01b031681565b3480156108c657600080fd5b50610476600b5481565b3480156108dc57600080fd5b506010546104099060ff1681565b3480156108f657600080fd5b5061040961090536600461269e565b6112b9565b34801561091657600080fd5b5060095461044d906001600160a01b031681565b34801561093657600080fd5b5061047660135481565b34801561094c57600080fd5b5061047661095b36600461283d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561099257600080fd5b506104096109a13660046127c0565b60226020526000908152604090205460ff1681565b3480156109c257600080fd5b50610476600c5481565b3480156109d857600080fd5b506104096109e73660046127c0565b60126020526000908152604090205460ff1681565b348015610a0857600080fd5b50610409611410565b348015610a1d57600080fd5b50610476601f5481565b348015610a3357600080fd5b5061047660155481565b348015610a4957600080fd5b506103bc610a583660046127c0565b61144d565b348015610a6957600080fd5b50610476601a5481565b348015610a7f57600080fd5b5060065461044d906001600160a01b031681565b348015610a9f57600080fd5b50610476600d5481565b348015610ab557600080fd5b5061047660205481565b348015610acb57600080fd5b50600a5461044d906001600160a01b031681565b6005546001600160a01b03163314610b125760405162461bcd60e51b8152600401610b0990612876565b60405180910390fd5b670de0b6b3a76400006103e8610b2760025490565b610b329060016128c1565b610b3c91906128e0565b610b4691906128e0565b811015610ba75760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b09565b610bb981670de0b6b3a76400006128c1565b600b5550565b606060038054610bce90612902565b80601f0160208091040260200160405190810160405280929190818152602001828054610bfa90612902565b8015610c475780601f10610c1c57610100808354040283529160200191610c47565b820191906000526020600020905b815481529060010190602001808311610c2a57829003601f168201915b5050505050905090565b6000610c5e3384846114e8565b50600192915050565b6005546001600160a01b03163314610c915760405162461bcd60e51b8152600401610b0990612876565b670de0b6b3a76400006103e8610ca660025490565b610cb19060056128c1565b610cbb91906128e0565b610cc591906128e0565b811015610d205760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610b09565b610d3281670de0b6b3a76400006128c1565b600d5550565b6005546001600160a01b03163314610d625760405162461bcd60e51b8152600401610b0990612876565b6019849055601a839055601b829055601c8190558082610d82858761293c565b610d8c919061293c565b610d96919061293c565b601881905560631015610da857600080fd5b50505050565b6000610dbb84848461160c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e405760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b09565b610e4d85338584036114e8565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c5e918590610e8f90869061293c565b6114e8565b6005546001600160a01b03163314610ebe5760405162461bcd60e51b8152600401610b0990612876565b60148490556015839055601682905560178190558082610ede858761293c565b610ee8919061293c565b610ef2919061293c565b601381905560191015610da857600080fd5b6005546000906001600160a01b03163314610f315760405162461bcd60e51b8152600401610b0990612876565b50600e805460ff19169055600190565b6005546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610b0990612876565b610f756000611f09565b565b6005546001600160a01b03163314610fa15760405162461bcd60e51b8152600401610b0990612876565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ff65760405162461bcd60e51b8152600401610b0990612876565b600e54610100900460ff161561103f5760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b6044820152606401610b09565b600e80544360115562ffff00191662010100179055565b6005546001600160a01b031633146110805760405162461bcd60e51b8152600401610b0990612876565b600e8054911515620100000262ff000019909216919091179055565b606060048054610bce90612902565b6005546001600160a01b031633146110d55760405162461bcd60e51b8152600401610b0990612876565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361117c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b09565b6111868282611f5b565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561120c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b09565b61121933858584036114e8565b5060019392505050565b6000610c5e33848461160c565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610b0990612876565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b031633146112e65760405162461bcd60e51b8152600401610b0990612876565b620186a06112f360025490565b6112fe9060016128c1565b61130891906128e0565b8210156113755760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b09565b6103e861138160025490565b61138c9060056128c1565b61139691906128e0565b8211156114025760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b09565b50600c81905560015b919050565b6005546000906001600160a01b0316331461143d5760405162461bcd60e51b8152600401610b0990612876565b506010805460ff19169055600190565b6005546001600160a01b031633146114775760405162461bcd60e51b8152600401610b0990612876565b6001600160a01b0381166114dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b6114e581611f09565b50565b6001600160a01b03831661154a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b09565b6001600160a01b0382166115ab5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b09565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116325760405162461bcd60e51b8152600401610b0990612954565b6001600160a01b0382166116585760405162461bcd60e51b8152600401610b0990612999565b6001600160a01b03831660009081526012602052604090205460ff16156116aa5760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610b09565b806000036116c3576116be83836000611faf565b505050565b600e5460ff1615611b74576005546001600160a01b038481169116148015906116fa57506005546001600160a01b03838116911614155b801561170e57506001600160a01b03821615155b801561172557506001600160a01b03821661dead14155b801561173b5750600654600160a01b900460ff16155b15611b7457600e54610100900460ff166117d3576001600160a01b03831660009081526021602052604090205460ff168061178e57506001600160a01b03821660009081526021602052604090205460ff165b6117d35760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b09565b60105460ff161561191a576005546001600160a01b0383811691161480159061182e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561186c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561191a57326000908152600f602052604090205443116119075760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b09565b326000908152600f602052604090204390555b6001600160a01b03831660009081526023602052604090205460ff16801561195b57506001600160a01b03821660009081526022602052604090205460ff16155b15611a3957600b548111156119ca5760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610b09565b600d546001600160a01b0383166000908152602081905260409020546119f0908361293c565b1115611a345760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b09565b611b74565b6001600160a01b03821660009081526023602052604090205460ff168015611a7a57506001600160a01b03831660009081526022602052604090205460ff16155b15611aea57600b54811115611a345760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610b09565b6001600160a01b03821660009081526022602052604090205460ff16611b7457600d546001600160a01b038316600090815260208190526040902054611b30908361293c565b1115611b745760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b09565b30600090815260208190526040902054600c5481108015908190611ba05750600e5462010000900460ff165b8015611bb65750600654600160a01b900460ff16155b8015611bdb57506001600160a01b03851660009081526023602052604090205460ff16155b8015611c0057506001600160a01b03851660009081526021602052604090205460ff16155b8015611c2557506001600160a01b03841660009081526021602052604090205460ff16155b15611c53576006805460ff60a01b1916600160a01b179055611c45612103565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526021602052604090205460ff600160a01b909204821615911680611ca157506001600160a01b03851660009081526021602052604090205460ff165b15611caa575060005b60008115611ef5576001600160a01b03861660009081526023602052604090205460ff168015611cdc57506000601854115b15611dca57611d016064611cfb601854886123cd90919063ffffffff16565b906123e0565b9050601854601a5482611d1491906128c1565b611d1e91906128e0565b601e6000828254611d2f919061293c565b9091555050601854601b54611d4490836128c1565b611d4e91906128e0565b601f6000828254611d5f919061293c565b9091555050601854601954611d7490836128c1565b611d7e91906128e0565b601d6000828254611d8f919061293c565b9091555050601854601c54611da490836128c1565b611dae91906128e0565b60206000828254611dbf919061293c565b90915550611ed79050565b6001600160a01b03871660009081526023602052604090205460ff168015611df457506000601354115b15611ed757611e136064611cfb601354886123cd90919063ffffffff16565b905060135460155482611e2691906128c1565b611e3091906128e0565b601e6000828254611e41919061293c565b9091555050601354601654611e5690836128c1565b611e6091906128e0565b601f6000828254611e71919061293c565b9091555050601354601454611e8690836128c1565b611e9091906128e0565b601d6000828254611ea1919061293c565b9091555050601354601754611eb690836128c1565b611ec091906128e0565b60206000828254611ed1919061293c565b90915550505b8015611ee857611ee8873083611faf565b611ef281866129dc565b94505b611f00878787611faf565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611fd55760405162461bcd60e51b8152600401610b0990612954565b6001600160a01b038216611ffb5760405162461bcd60e51b8152600401610b0990612999565b6001600160a01b038316600090815260208190526040902054818110156120735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b09565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120aa90849061293c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120f691815260200190565b60405180910390a3610da8565b3060009081526020819052604081205490506000602054601f54601d54601e5461212d919061293c565b612137919061293c565b612141919061293c565b90506000821580612150575081155b1561215a57505050565b600c546121689060146128c1565b83111561218057600c5461217d9060146128c1565b92505b6000600283601e548661219391906128c1565b61219d91906128e0565b6121a791906128e0565b905060006121b585836123ec565b9050476121c1826123f8565b60006121cd47836123ec565b905060006121ea87611cfb601d54856123cd90919063ffffffff16565b9050600061220788611cfb601f54866123cd90919063ffffffff16565b9050600061222489611cfb602054876123cd90919063ffffffff16565b90506000818361223486886129dc565b61223e91906129dc565b61224891906129dc565b6000601e819055601d819055601f81905560208190556008546040519293506001600160a01b031691859181818185875af1925050503d80600081146122aa576040519150601f19603f3d011682016040523d82523d6000602084013e6122af565b606091505b509099505087158015906122c35750600081115b15612316576122d288826125b8565b601e54604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600a546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612363576040519150601f19603f3d011682016040523d82523d6000602084013e612368565b606091505b5050600754604051919a506001600160a01b0316904790600081818185875af1925050503d80600081146123b8576040519150601f19603f3d011682016040523d82523d6000602084013e6123bd565b606091505b5050505050505050505050505050565b60006123d982846128c1565b9392505050565b60006123d982846128e0565b60006123d982846129dc565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061242d5761242d6129f3565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190612a09565b816001815181106124e2576124e26129f3565b60200260200101906001600160a01b031690816001600160a01b03168152505061252d307f0000000000000000000000000000000000000000000000000000000000000000846114e8565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612582908590600090869030904290600401612a26565b600060405180830381600087803b15801561259c57600080fd5b505af11580156125b0573d6000803e3d6000fd5b505050505050565b6125e3307f0000000000000000000000000000000000000000000000000000000000000000846114e8565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015612672573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126979190612a97565b5050505050565b6000602082840312156126b057600080fd5b5035919050565b600060208083528351808285015260005b818110156126e4578581018301518582016040015282016126c8565b818111156126f6576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146114e557600080fd5b6000806040838503121561273457600080fd5b823561273f8161270c565b946020939093013593505050565b6000806000806080858703121561276357600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561279457600080fd5b833561279f8161270c565b925060208401356127af8161270c565b929592945050506040919091013590565b6000602082840312156127d257600080fd5b81356123d98161270c565b8035801515811461140b57600080fd5b6000806040838503121561280057600080fd5b823561280b8161270c565b9150612819602084016127dd565b90509250929050565b60006020828403121561283457600080fd5b6123d9826127dd565b6000806040838503121561285057600080fd5b823561285b8161270c565b9150602083013561286b8161270c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156128db576128db6128ab565b500290565b6000826128fd57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061291657607f821691505b60208210810361293657634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561294f5761294f6128ab565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156129ee576129ee6128ab565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612a1b57600080fd5b81516123d98161270c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a765784516001600160a01b031683529383019391830191600101612a51565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612aac57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220364569d936f4781f00af4cca40c52337b64e38c49d7679f367c37a0a4129a2a064736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103905760003560e01c80638da5cb5b116101dc578063d469801611610102578063ef8700e5116100a0578063f887ea401161006f578063f887ea4014610a73578063f8b45b0514610a93578063fb002c9714610aa9578063fd72e22a14610abf57600080fd5b8063ef8700e514610a11578063f11a24d314610a27578063f2fde38b14610a3d578063f637434214610a5d57600080fd5b8063e1bc3394116100dc578063e1bc339414610986578063e2f45605146109b6578063e5962195146109cc578063e884f260146109fc57600080fd5b8063d46980161461090a578063d85ba0631461092a578063dd62ed3e1461094057600080fd5b8063b20414111161017a578063c04a541411610149578063c04a54141461089a578063c3f70b52146108ba578063c876d0b9146108d0578063d257b34f146108ea57600080fd5b8063b204141114610815578063b62496f51461082b578063bbc0c7421461085b578063c02466681461087a57600080fd5b806395d89b41116101b657806395d89b41146107a05780639a7a23d6146107b5578063a457c2d7146107d5578063a9059cbb146107f557600080fd5b80638da5cb5b1461074c578063921369131461076a578063924de9b71461078057600080fd5b806349bd5a5e116102c15780636a486a8e1161025f5780637571336a1161022e5780637571336a146106e157806375f0a874146107015780637bce5a04146107215780638a8c523c1461073757600080fd5b80636a486a8e146106605780636ddd17131461067657806370a0823114610696578063715018a6146106cc57600080fd5b80634f77f6c01161029b5780634f77f6c0146105e65780635342acb4146105fc5780635a139dd414610635578063622565891461064b57600080fd5b806349bd5a5e146105785780634a62bb65146105ac5780634f2b3e2d146105c657600080fd5b80631c499ab01161032e57806323b872dd1161030857806323b872dd1461050657806327c8f83514610526578063313ce5671461053c578063395093511461055857600080fd5b80631c499ab0146104b05780631f3fed8f146104d057806323b41857146104e657600080fd5b80631694505e1161036a5780631694505e1461041957806318160ddd1461046557806318a94cf1146104845780631a8145bb1461049a57600080fd5b80630517d13d1461039c57806306fdde03146103be578063095ea7b3146103e957600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103bc6103b736600461269e565b610adf565b005b3480156103ca57600080fd5b506103d3610bbf565b6040516103e091906126b7565b60405180910390f35b3480156103f557600080fd5b50610409610404366004612721565b610c51565b60405190151581526020016103e0565b34801561042557600080fd5b5061044d7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103e0565b34801561047157600080fd5b506002545b6040519081526020016103e0565b34801561049057600080fd5b50610476601b5481565b3480156104a657600080fd5b50610476601e5481565b3480156104bc57600080fd5b506103bc6104cb36600461269e565b610c67565b3480156104dc57600080fd5b50610476601d5481565b3480156104f257600080fd5b506103bc61050136600461274d565b610d38565b34801561051257600080fd5b5061040961052136600461277f565b610dae565b34801561053257600080fd5b5061044d61dead81565b34801561054857600080fd5b50604051601281526020016103e0565b34801561056457600080fd5b50610409610573366004612721565b610e58565b34801561058457600080fd5b5061044d7f000000000000000000000000d3f487bef8cd31a78947fbaf6f0e4c55637e702381565b3480156105b857600080fd5b50600e546104099060ff1681565b3480156105d257600080fd5b506103bc6105e136600461274d565b610e94565b3480156105f257600080fd5b50610476601c5481565b34801561060857600080fd5b506104096106173660046127c0565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561064157600080fd5b5061047660175481565b34801561065757600080fd5b50610409610f04565b34801561066c57600080fd5b5061047660185481565b34801561068257600080fd5b50600e546104099062010000900460ff1681565b3480156106a257600080fd5b506104766106b13660046127c0565b6001600160a01b031660009081526020819052604090205490565b3480156106d857600080fd5b506103bc610f41565b3480156106ed57600080fd5b506103bc6106fc3660046127ed565b610f77565b34801561070d57600080fd5b5060075461044d906001600160a01b031681565b34801561072d57600080fd5b5061047660145481565b34801561074357600080fd5b506103bc610fcc565b34801561075857600080fd5b506005546001600160a01b031661044d565b34801561077657600080fd5b5061047660195481565b34801561078c57600080fd5b506103bc61079b366004612822565b611056565b3480156107ac57600080fd5b506103d361109c565b3480156107c157600080fd5b506103bc6107d03660046127ed565b6110ab565b3480156107e157600080fd5b506104096107f0366004612721565b61118a565b34801561080157600080fd5b50610409610810366004612721565b611223565b34801561082157600080fd5b5061047660165481565b34801561083757600080fd5b506104096108463660046127c0565b60236020526000908152604090205460ff1681565b34801561086757600080fd5b50600e5461040990610100900460ff1681565b34801561088657600080fd5b506103bc6108953660046127ed565b611230565b3480156108a657600080fd5b5060085461044d906001600160a01b031681565b3480156108c657600080fd5b50610476600b5481565b3480156108dc57600080fd5b506010546104099060ff1681565b3480156108f657600080fd5b5061040961090536600461269e565b6112b9565b34801561091657600080fd5b5060095461044d906001600160a01b031681565b34801561093657600080fd5b5061047660135481565b34801561094c57600080fd5b5061047661095b36600461283d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561099257600080fd5b506104096109a13660046127c0565b60226020526000908152604090205460ff1681565b3480156109c257600080fd5b50610476600c5481565b3480156109d857600080fd5b506104096109e73660046127c0565b60126020526000908152604090205460ff1681565b348015610a0857600080fd5b50610409611410565b348015610a1d57600080fd5b50610476601f5481565b348015610a3357600080fd5b5061047660155481565b348015610a4957600080fd5b506103bc610a583660046127c0565b61144d565b348015610a6957600080fd5b50610476601a5481565b348015610a7f57600080fd5b5060065461044d906001600160a01b031681565b348015610a9f57600080fd5b50610476600d5481565b348015610ab557600080fd5b5061047660205481565b348015610acb57600080fd5b50600a5461044d906001600160a01b031681565b6005546001600160a01b03163314610b125760405162461bcd60e51b8152600401610b0990612876565b60405180910390fd5b670de0b6b3a76400006103e8610b2760025490565b610b329060016128c1565b610b3c91906128e0565b610b4691906128e0565b811015610ba75760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b09565b610bb981670de0b6b3a76400006128c1565b600b5550565b606060038054610bce90612902565b80601f0160208091040260200160405190810160405280929190818152602001828054610bfa90612902565b8015610c475780601f10610c1c57610100808354040283529160200191610c47565b820191906000526020600020905b815481529060010190602001808311610c2a57829003601f168201915b5050505050905090565b6000610c5e3384846114e8565b50600192915050565b6005546001600160a01b03163314610c915760405162461bcd60e51b8152600401610b0990612876565b670de0b6b3a76400006103e8610ca660025490565b610cb19060056128c1565b610cbb91906128e0565b610cc591906128e0565b811015610d205760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610b09565b610d3281670de0b6b3a76400006128c1565b600d5550565b6005546001600160a01b03163314610d625760405162461bcd60e51b8152600401610b0990612876565b6019849055601a839055601b829055601c8190558082610d82858761293c565b610d8c919061293c565b610d96919061293c565b601881905560631015610da857600080fd5b50505050565b6000610dbb84848461160c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e405760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b09565b610e4d85338584036114e8565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c5e918590610e8f90869061293c565b6114e8565b6005546001600160a01b03163314610ebe5760405162461bcd60e51b8152600401610b0990612876565b60148490556015839055601682905560178190558082610ede858761293c565b610ee8919061293c565b610ef2919061293c565b601381905560191015610da857600080fd5b6005546000906001600160a01b03163314610f315760405162461bcd60e51b8152600401610b0990612876565b50600e805460ff19169055600190565b6005546001600160a01b03163314610f6b5760405162461bcd60e51b8152600401610b0990612876565b610f756000611f09565b565b6005546001600160a01b03163314610fa15760405162461bcd60e51b8152600401610b0990612876565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ff65760405162461bcd60e51b8152600401610b0990612876565b600e54610100900460ff161561103f5760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b6044820152606401610b09565b600e80544360115562ffff00191662010100179055565b6005546001600160a01b031633146110805760405162461bcd60e51b8152600401610b0990612876565b600e8054911515620100000262ff000019909216919091179055565b606060048054610bce90612902565b6005546001600160a01b031633146110d55760405162461bcd60e51b8152600401610b0990612876565b7f000000000000000000000000d3f487bef8cd31a78947fbaf6f0e4c55637e70236001600160a01b0316826001600160a01b03160361117c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b09565b6111868282611f5b565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561120c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b09565b61121933858584036114e8565b5060019392505050565b6000610c5e33848461160c565b6005546001600160a01b0316331461125a5760405162461bcd60e51b8152600401610b0990612876565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b031633146112e65760405162461bcd60e51b8152600401610b0990612876565b620186a06112f360025490565b6112fe9060016128c1565b61130891906128e0565b8210156113755760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b09565b6103e861138160025490565b61138c9060056128c1565b61139691906128e0565b8211156114025760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b09565b50600c81905560015b919050565b6005546000906001600160a01b0316331461143d5760405162461bcd60e51b8152600401610b0990612876565b506010805460ff19169055600190565b6005546001600160a01b031633146114775760405162461bcd60e51b8152600401610b0990612876565b6001600160a01b0381166114dc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b6114e581611f09565b50565b6001600160a01b03831661154a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b09565b6001600160a01b0382166115ab5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b09565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116325760405162461bcd60e51b8152600401610b0990612954565b6001600160a01b0382166116585760405162461bcd60e51b8152600401610b0990612999565b6001600160a01b03831660009081526012602052604090205460ff16156116aa5760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610b09565b806000036116c3576116be83836000611faf565b505050565b600e5460ff1615611b74576005546001600160a01b038481169116148015906116fa57506005546001600160a01b03838116911614155b801561170e57506001600160a01b03821615155b801561172557506001600160a01b03821661dead14155b801561173b5750600654600160a01b900460ff16155b15611b7457600e54610100900460ff166117d3576001600160a01b03831660009081526021602052604090205460ff168061178e57506001600160a01b03821660009081526021602052604090205460ff165b6117d35760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b09565b60105460ff161561191a576005546001600160a01b0383811691161480159061182e57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561186c57507f000000000000000000000000d3f487bef8cd31a78947fbaf6f0e4c55637e70236001600160a01b0316826001600160a01b031614155b1561191a57326000908152600f602052604090205443116119075760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b09565b326000908152600f602052604090204390555b6001600160a01b03831660009081526023602052604090205460ff16801561195b57506001600160a01b03821660009081526022602052604090205460ff16155b15611a3957600b548111156119ca5760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610b09565b600d546001600160a01b0383166000908152602081905260409020546119f0908361293c565b1115611a345760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b09565b611b74565b6001600160a01b03821660009081526023602052604090205460ff168015611a7a57506001600160a01b03831660009081526022602052604090205460ff16155b15611aea57600b54811115611a345760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610b09565b6001600160a01b03821660009081526022602052604090205460ff16611b7457600d546001600160a01b038316600090815260208190526040902054611b30908361293c565b1115611b745760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b09565b30600090815260208190526040902054600c5481108015908190611ba05750600e5462010000900460ff165b8015611bb65750600654600160a01b900460ff16155b8015611bdb57506001600160a01b03851660009081526023602052604090205460ff16155b8015611c0057506001600160a01b03851660009081526021602052604090205460ff16155b8015611c2557506001600160a01b03841660009081526021602052604090205460ff16155b15611c53576006805460ff60a01b1916600160a01b179055611c45612103565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526021602052604090205460ff600160a01b909204821615911680611ca157506001600160a01b03851660009081526021602052604090205460ff165b15611caa575060005b60008115611ef5576001600160a01b03861660009081526023602052604090205460ff168015611cdc57506000601854115b15611dca57611d016064611cfb601854886123cd90919063ffffffff16565b906123e0565b9050601854601a5482611d1491906128c1565b611d1e91906128e0565b601e6000828254611d2f919061293c565b9091555050601854601b54611d4490836128c1565b611d4e91906128e0565b601f6000828254611d5f919061293c565b9091555050601854601954611d7490836128c1565b611d7e91906128e0565b601d6000828254611d8f919061293c565b9091555050601854601c54611da490836128c1565b611dae91906128e0565b60206000828254611dbf919061293c565b90915550611ed79050565b6001600160a01b03871660009081526023602052604090205460ff168015611df457506000601354115b15611ed757611e136064611cfb601354886123cd90919063ffffffff16565b905060135460155482611e2691906128c1565b611e3091906128e0565b601e6000828254611e41919061293c565b9091555050601354601654611e5690836128c1565b611e6091906128e0565b601f6000828254611e71919061293c565b9091555050601354601454611e8690836128c1565b611e9091906128e0565b601d6000828254611ea1919061293c565b9091555050601354601754611eb690836128c1565b611ec091906128e0565b60206000828254611ed1919061293c565b90915550505b8015611ee857611ee8873083611faf565b611ef281866129dc565b94505b611f00878787611faf565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611fd55760405162461bcd60e51b8152600401610b0990612954565b6001600160a01b038216611ffb5760405162461bcd60e51b8152600401610b0990612999565b6001600160a01b038316600090815260208190526040902054818110156120735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b09565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120aa90849061293c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120f691815260200190565b60405180910390a3610da8565b3060009081526020819052604081205490506000602054601f54601d54601e5461212d919061293c565b612137919061293c565b612141919061293c565b90506000821580612150575081155b1561215a57505050565b600c546121689060146128c1565b83111561218057600c5461217d9060146128c1565b92505b6000600283601e548661219391906128c1565b61219d91906128e0565b6121a791906128e0565b905060006121b585836123ec565b9050476121c1826123f8565b60006121cd47836123ec565b905060006121ea87611cfb601d54856123cd90919063ffffffff16565b9050600061220788611cfb601f54866123cd90919063ffffffff16565b9050600061222489611cfb602054876123cd90919063ffffffff16565b90506000818361223486886129dc565b61223e91906129dc565b61224891906129dc565b6000601e819055601d819055601f81905560208190556008546040519293506001600160a01b031691859181818185875af1925050503d80600081146122aa576040519150601f19603f3d011682016040523d82523d6000602084013e6122af565b606091505b509099505087158015906122c35750600081115b15612316576122d288826125b8565b601e54604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600a546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612363576040519150601f19603f3d011682016040523d82523d6000602084013e612368565b606091505b5050600754604051919a506001600160a01b0316904790600081818185875af1925050503d80600081146123b8576040519150601f19603f3d011682016040523d82523d6000602084013e6123bd565b606091505b5050505050505050505050505050565b60006123d982846128c1565b9392505050565b60006123d982846128e0565b60006123d982846129dc565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061242d5761242d6129f3565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190612a09565b816001815181106124e2576124e26129f3565b60200260200101906001600160a01b031690816001600160a01b03168152505061252d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114e8565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612582908590600090869030904290600401612a26565b600060405180830381600087803b15801561259c57600080fd5b505af11580156125b0573d6000803e3d6000fd5b505050505050565b6125e3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114e8565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015612672573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126979190612a97565b5050505050565b6000602082840312156126b057600080fd5b5035919050565b600060208083528351808285015260005b818110156126e4578581018301518582016040015282016126c8565b818111156126f6576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146114e557600080fd5b6000806040838503121561273457600080fd5b823561273f8161270c565b946020939093013593505050565b6000806000806080858703121561276357600080fd5b5050823594602084013594506040840135936060013592509050565b60008060006060848603121561279457600080fd5b833561279f8161270c565b925060208401356127af8161270c565b929592945050506040919091013590565b6000602082840312156127d257600080fd5b81356123d98161270c565b8035801515811461140b57600080fd5b6000806040838503121561280057600080fd5b823561280b8161270c565b9150612819602084016127dd565b90509250929050565b60006020828403121561283457600080fd5b6123d9826127dd565b6000806040838503121561285057600080fd5b823561285b8161270c565b9150602083013561286b8161270c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156128db576128db6128ab565b500290565b6000826128fd57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061291657607f821691505b60208210810361293657634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561294f5761294f6128ab565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156129ee576129ee6128ab565b500390565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612a1b57600080fd5b81516123d98161270c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a765784516001600160a01b031683529383019391830191600101612a51565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612aac57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220364569d936f4781f00af4cca40c52337b64e38c49d7679f367c37a0a4129a2a064736f6c634300080f0033

Deployed Bytecode Sourcemap

14990:16668:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21055:265;;;;;;;;;;-1:-1:-1;21055:265:0;;;;;:::i;:::-;;:::i;:::-;;2687:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3601:169;;;;;;;;;;-1:-1:-1;3601:169:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;3601:169:0;1257:187:1;15067:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1640:32:1;;;1622:51;;1610:2;1595:18;15067:51:0;1449:230:1;3008:108:0;;;;;;;;;;-1:-1:-1;3096:12:0;;3008:108;;;1830:25:1;;;1818:2;1803:18;3008:108:0;1684:177:1;16269:33:0;;;;;;;;;;;;;;;;16390;;;;;;;;;;;;;;;;21328:250;;;;;;;;;;-1:-1:-1;21328:250:0;;;;;:::i;:::-;;:::i;16350:33::-;;;;;;;;;;;;;;;;22365:506;;;;;;;;;;-1:-1:-1;22365:506:0;;;;;:::i;:::-;;:::i;3778:492::-;;;;;;;;;;-1:-1:-1;3778:492:0;;;;;:::i;:::-;;:::i;15170:53::-;;;;;;;;;;;;15216:6;15170:53;;2907:93;;;;;;;;;;-1:-1:-1;2907:93:0;;2990:2;3067:36:1;;3055:2;3040:18;2907:93:0;2925:184:1;4278:215:0;;;;;;;;;;-1:-1:-1;4278:215:0;;;;;:::i;:::-;;:::i;15125:38::-;;;;;;;;;;;;;;;15597:33;;;;;;;;;;-1:-1:-1;15597:33:0;;;;;;;;21863:494;;;;;;;;;;-1:-1:-1;21863:494:0;;;;;:::i;:::-;;:::i;16309:32::-;;;;;;;;;;;;;;;;23577:125;;;;;;;;;;-1:-1:-1;23577:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;23666:28:0;23642:4;23666:28;;;:19;:28;;;;;;;;;23577:125;16118:31;;;;;;;;;;;;;;;;20279:120;;;;;;;;;;;;;:::i;16158:28::-;;;;;;;;;;;;;;;;15677:31;;;;;;;;;;-1:-1:-1;15677:31:0;;;;;;;;;;;3124:127;;;;;;;;;;-1:-1:-1;3124:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3225:18:0;3198:7;3225:18;;;;;;;;;;;;3124:127;809:103;;;;;;;;;;;;;:::i;21586:161::-;;;;;;;;;;-1:-1:-1;21586:161:0;;;;;:::i;:::-;;:::i;15335:30::-;;;;;;;;;;-1:-1:-1;15335:30:0;;;;-1:-1:-1;;;;;15335:30:0;;;16005;;;;;;;;;;;;;;;;20070:201;;;;;;;;;;;;;:::i;586:87::-;;;;;;;;;;-1:-1:-1;659:6:0;;-1:-1:-1;;;;;659:6:0;586:87;;16193:31;;;;;;;;;;;;;;;;21755:100;;;;;;;;;;-1:-1:-1;21755:100:0;;;;;:::i;:::-;;:::i;2795:104::-;;;;;;;;;;;;;:::i;23069:304::-;;;;;;;;;;-1:-1:-1;23069:304:0;;;;;:::i;:::-;;:::i;4501:413::-;;;;;;;;;;-1:-1:-1;4501:413:0;;;;;:::i;:::-;;:::i;3259:175::-;;;;;;;;;;-1:-1:-1;3259:175:0;;;;;:::i;:::-;;:::i;16079:32::-;;;;;;;;;;;;;;;;16640:57;;;;;;;;;;-1:-1:-1;16640:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15637:33;;;;;;;;;;-1:-1:-1;15637:33:0;;;;;;;;;;;22879:182;;;;;;;;;;-1:-1:-1;22879:182:0;;;;;:::i;:::-;;:::i;15372:32::-;;;;;;;;;;-1:-1:-1;15372:32:0;;;;-1:-1:-1;;;;;15372:32:0;;;15488:29;;;;;;;;;;;;;;;;15843:39;;;;;;;;;;-1:-1:-1;15843:39:0;;;;;;;;20550:497;;;;;;;;;;-1:-1:-1;20550:497:0;;;;;:::i;:::-;;:::i;15411:30::-;;;;;;;;;;-1:-1:-1;15411:30:0;;;;-1:-1:-1;;;;;15411:30:0;;;15971:27;;;;;;;;;;;;;;;;3442:151;;;;;;;;;;-1:-1:-1;3442:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3558:18:0;;;3531:7;3558:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3442:151;16574:57;;;;;;;;;;-1:-1:-1;16574:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15524:33;;;;;;;;;;;;;;;;15923:39;;;;;;;;;;-1:-1:-1;15923:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20407:135;;;;;;;;;;;;;:::i;16430:35::-;;;;;;;;;;;;;;;;16042:30;;;;;;;;;;;;;;;;920:201;;;;;;;;;;-1:-1:-1;920:201:0;;;;;:::i;:::-;;:::i;16231:31::-;;;;;;;;;;;;;;;;15230:66;;;;;;;;;;-1:-1:-1;15230:66:0;;;;-1:-1:-1;;;;;15230:66:0;;;15564:24;;;;;;;;;;;;;;;;16472:34;;;;;;;;;;;;;;;;15448:31;;;;;;;;;;-1:-1:-1;15448:31:0;;;;-1:-1:-1;;;;;15448:31:0;;;21055:265;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;;;;;;;;;21194:4:::1;21186;21165:13;3096:12:::0;;;3008:108;21165:13:::1;:17;::::0;21181:1:::1;21165:17;:::i;:::-;21164:26;;;;:::i;:::-;21163:35;;;;:::i;:::-;21153:6;:45;;21131:136;;;::::0;-1:-1:-1;;;21131:136:0;;5519:2:1;21131:136:0::1;::::0;::::1;5501:21:1::0;5558:2;5538:18;;;5531:30;5597:34;5577:18;;;5570:62;-1:-1:-1;;;5648:18:1;;;5641:39;5697:19;;21131:136:0::1;5317:405:1::0;21131:136:0::1;21295:17;:6:::0;21305::::1;21295:17;:::i;:::-;21278:14;:34:::0;-1:-1:-1;21055:265:0:o;2687:100::-;2741:13;2774:5;2767:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2687:100;:::o;3601:169::-;3684:4;3701:39;212:10;3724:7;3733:6;3701:8;:39::i;:::-;-1:-1:-1;3758:4:0;3601:169;;;;:::o;21328:250::-;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;21462:4:::1;21454;21433:13;3096:12:::0;;;3008:108;21433:13:::1;:17;::::0;21449:1:::1;21433:17;:::i;:::-;21432:26;;;;:::i;:::-;21431:35;;;;:::i;:::-;21421:6;:45;;21399:131;;;::::0;-1:-1:-1;;;21399:131:0;;6314:2:1;21399:131:0::1;::::0;::::1;6296:21:1::0;6353:2;6333:18;;;6326:30;6392:34;6372:18;;;6365:62;-1:-1:-1;;;6443:18:1;;;6436:34;6487:19;;21399:131:0::1;6112:400:1::0;21399:131:0::1;21553:17;:6:::0;21563::::1;21553:17;:::i;:::-;21541:9;:29:::0;-1:-1:-1;21328:250:0:o;22365:506::-;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;22553:16:::1;:32:::0;;;22596:16:::1;:32:::0;;;22639:18:::1;:36:::0;;;22686:17:::1;:34:::0;;;22706:14;22660:15;22747:35:::1;22615:13:::0;22572;22747:35:::1;:::i;:::-;:56;;;;:::i;:::-;:76;;;;:::i;:::-;22731:13;:92:::0;;;22859:2:::1;-1:-1:-1::0;22842:19:0::1;22834:28;;;::::0;::::1;;22365:506:::0;;;;:::o;3778:492::-;3918:4;3935:36;3945:6;3953:9;3964:6;3935:9;:36::i;:::-;-1:-1:-1;;;;;4011:19:0;;3984:24;4011:19;;;:11;:19;;;;;;;;212:10;4011:33;;;;;;;;4063:26;;;;4055:79;;;;-1:-1:-1;;;4055:79:0;;6852:2:1;4055:79:0;;;6834:21:1;6891:2;6871:18;;;6864:30;6930:34;6910:18;;;6903:62;-1:-1:-1;;;6981:18:1;;;6974:38;7029:19;;4055:79:0;6650:404:1;4055:79:0;4170:57;4179:6;212:10;4220:6;4201:16;:25;4170:8;:57::i;:::-;-1:-1:-1;4258:4:0;;3778:492;-1:-1:-1;;;;3778:492:0:o;4278:215::-;212:10;4366:4;4415:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4415:34:0;;;;;;;;;;4366:4;;4383:80;;4406:7;;4415:47;;4452:10;;4415:47;:::i;:::-;4383:8;:80::i;21863:494::-;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;22050:15:::1;:31:::0;;;22092:15:::1;:31:::0;;;22134:17:::1;:35:::0;;;22180:16:::1;:33:::0;;;22199:14;22154:15;22239:33:::1;22110:13:::0;22068;22239:33:::1;:::i;:::-;:53;;;;:::i;:::-;:72;;;;:::i;:::-;22224:12;:87:::0;;;22346:2:::1;-1:-1:-1::0;22330:18:0::1;22322:27;;;::::0;::::1;20279:120:::0;659:6;;20330:4;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;-1:-1:-1;20347:14:0::1;:22:::0;;-1:-1:-1;;20347:22:0::1;::::0;;;20279:120;:::o;809:103::-;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;874:30:::1;901:1;874:18;:30::i;:::-;809:103::o:0;21586:161::-;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21699:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;21699:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21586:161::o;20070:201::-;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;20134:13:::1;::::0;::::1;::::0;::::1;;;20133:14;20125:41;;;::::0;-1:-1:-1;;;20125:41:0;;7261:2:1;20125:41:0::1;::::0;::::1;7243:21:1::0;7300:2;7280:18;;;7273:30;-1:-1:-1;;;7319:18:1;;;7312:44;7373:18;;20125:41:0::1;7059:338:1::0;20125:41:0::1;20177:13;:20:::0;;20222:12:::1;20208:11;:26:::0;-1:-1:-1;;20245:18:0;;;;;20070:201::o;21755:100::-;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;21826:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;21826:21:0;;::::1;::::0;;;::::1;::::0;;21755:100::o;2795:104::-;2851:13;2884:7;2877:14;;;;;:::i;23069:304::-;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;23213:13:::1;-1:-1:-1::0;;;;;23205:21:0::1;:4;-1:-1:-1::0;;;;;23205:21:0::1;::::0;23183:128:::1;;;::::0;-1:-1:-1;;;23183:128:0;;7604:2:1;23183:128:0::1;::::0;::::1;7586:21:1::0;7643:2;7623:18;;;7616:30;7682:34;7662:18;;;7655:62;7753:27;7733:18;;;7726:55;7798:19;;23183:128:0::1;7402:421:1::0;23183:128:0::1;23324:41;23353:4;23359:5;23324:28;:41::i;:::-;23069:304:::0;;:::o;4501:413::-;212:10;4594:4;4638:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4638:34:0;;;;;;;;;;4691:35;;;;4683:85;;;;-1:-1:-1;;;4683:85:0;;8030:2:1;4683:85:0;;;8012:21:1;8069:2;8049:18;;;8042:30;8108:34;8088:18;;;8081:62;-1:-1:-1;;;8159:18:1;;;8152:35;8204:19;;4683:85:0;7828:401:1;4683:85:0;4804:67;212:10;4827:7;4855:15;4836:16;:34;4804:8;:67::i;:::-;-1:-1:-1;4902:4:0;;4501:413;-1:-1:-1;;;4501:413:0:o;3259:175::-;3345:4;3362:42;212:10;3386:9;3397:6;3362:9;:42::i;22879:182::-;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22964:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22964:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23019:34;;1397:41:1;;;23019:34:0::1;::::0;1370:18:1;23019:34:0::1;;;;;;;22879:182:::0;;:::o;20550:497::-;659:6;;20658:4;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;20737:6:::1;20716:13;3096:12:::0;;;3008:108;20716:13:::1;:17;::::0;20732:1:::1;20716:17;:::i;:::-;20715:28;;;;:::i;:::-;20702:9;:41;;20680:144;;;::::0;-1:-1:-1;;;20680:144:0;;8436:2:1;20680:144:0::1;::::0;::::1;8418:21:1::0;8475:2;8455:18;;;8448:30;8514:34;8494:18;;;8487:62;-1:-1:-1;;;8565:18:1;;;8558:51;8626:19;;20680:144:0::1;8234:417:1::0;20680:144:0::1;20892:4;20871:13;3096:12:::0;;;3008:108;20871:13:::1;:17;::::0;20887:1:::1;20871:17;:::i;:::-;20870:26;;;;:::i;:::-;20857:9;:39;;20835:141;;;::::0;-1:-1:-1;;;20835:141:0;;8858:2:1;20835:141:0::1;::::0;::::1;8840:21:1::0;8897:2;8877:18;;;8870:30;8936:34;8916:18;;;8909:62;-1:-1:-1;;;8987:18:1;;;8980:50;9047:19;;20835:141:0::1;8656:416:1::0;20835:141:0::1;-1:-1:-1::0;20987:18:0::1;:30:::0;;;21035:4:::1;792:1;20550:497:::0;;;:::o;20407:135::-;659:6;;20467:4;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;-1:-1:-1;20484:20:0::1;:28:::0;;-1:-1:-1;;20484:28:0::1;::::0;;;20407:135;:::o;920:201::-;659:6;;-1:-1:-1;;;;;659:6:0;212:10;721:23;713:68;;;;-1:-1:-1;;;713:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1009:22:0;::::1;1001:73;;;::::0;-1:-1:-1;;;1001:73:0;;9279:2:1;1001:73:0::1;::::0;::::1;9261:21:1::0;9318:2;9298:18;;;9291:30;9357:34;9337:18;;;9330:62;-1:-1:-1;;;9408:18:1;;;9401:36;9454:19;;1001:73:0::1;9077:402:1::0;1001:73:0::1;1085:28;1104:8;1085:18;:28::i;:::-;920:201:::0;:::o;6669:380::-;-1:-1:-1;;;;;6805:19:0;;6797:68;;;;-1:-1:-1;;;6797:68:0;;9686:2:1;6797:68:0;;;9668:21:1;9725:2;9705:18;;;9698:30;9764:34;9744:18;;;9737:62;-1:-1:-1;;;9815:18:1;;;9808:34;9859:19;;6797:68:0;9484:400:1;6797:68:0;-1:-1:-1;;;;;6884:21:0;;6876:68;;;;-1:-1:-1;;;6876:68:0;;10091:2:1;6876:68:0;;;10073:21:1;10130:2;10110:18;;;10103:30;10169:34;10149:18;;;10142:62;-1:-1:-1;;;10220:18:1;;;10213:32;10262:19;;6876:68:0;9889:398:1;6876:68:0;-1:-1:-1;;;;;6957:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7009:32;;1830:25:1;;;7009:32:0;;1803:18:1;7009:32:0;;;;;;;6669:380;;;:::o;23710:4862::-;-1:-1:-1;;;;;23842:18:0;;23834:68;;;;-1:-1:-1;;;23834:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23921:16:0;;23913:64;;;;-1:-1:-1;;;23913:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23997:13:0;;;;;;:7;:13;;;;;;;;23996:14;23988:33;;;;-1:-1:-1;;;23988:33:0;;11304:2:1;23988:33:0;;;11286:21:1;11343:1;11323:18;;;11316:29;-1:-1:-1;;;11361:18:1;;;11354:36;11407:18;;23988:33:0;11102:329:1;23988:33:0;24038:6;24048:1;24038:11;24034:93;;24066:28;24082:4;24088:2;24092:1;24066:15;:28::i;:::-;23710:4862;;;:::o;24034:93::-;24143:14;;;;24139:2390;;;659:6;;-1:-1:-1;;;;;24196:15:0;;;659:6;;24196:15;;;;:49;;-1:-1:-1;659:6:0;;-1:-1:-1;;;;;24232:13:0;;;659:6;;24232:13;;24196:49;:86;;;;-1:-1:-1;;;;;;24266:16:0;;;;24196:86;:128;;;;-1:-1:-1;;;;;;24303:21:0;;24317:6;24303:21;;24196:128;:158;;;;-1:-1:-1;24346:8:0;;-1:-1:-1;;;24346:8:0;;;;24345:9;24196:158;24174:2344;;;24394:13;;;;;;;24389:223;;-1:-1:-1;;;;;24466:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24495:23:0;;;;;;:19;:23;;;;;;;;24466:52;24432:160;;;;-1:-1:-1;;;24432:160:0;;11638:2:1;24432:160:0;;;11620:21:1;11677:2;11657:18;;;11650:30;-1:-1:-1;;;11696:18:1;;;11689:52;11758:18;;24432:160:0;11436:346:1;24432:160:0;24768:20;;;;24764:641;;;659:6;;-1:-1:-1;;;;;24843:13:0;;;659:6;;24843:13;;;;:72;;;24899:15;-1:-1:-1;;;;;24885:30:0;:2;-1:-1:-1;;;;;24885:30:0;;;24843:72;:129;;;;;24958:13;-1:-1:-1;;;;;24944:28:0;:2;-1:-1:-1;;;;;24944:28:0;;;24843:129;24813:573;;;25090:9;25061:39;;;;:28;:39;;;;;;25136:12;-1:-1:-1;25023:258:0;;;;-1:-1:-1;;;25023:258:0;;11989:2:1;25023:258:0;;;11971:21:1;12028:2;12008:18;;;12001:30;12067:34;12047:18;;;12040:62;12138:34;12118:18;;;12111:62;-1:-1:-1;;;12189:19:1;;;12182:40;12239:19;;25023:258:0;11787:477:1;25023:258:0;25337:9;25308:39;;;;:28;:39;;;;;25350:12;25308:54;;24813:573;-1:-1:-1;;;;;25451:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;25508:29:0;;;;;;:25;:29;;;;;;;;25507:30;25451:86;25425:1078;;;25624:14;;25614:6;:24;;25580:157;;;;-1:-1:-1;;;25580:157:0;;12471:2:1;25580:157:0;;;12453:21:1;12510:2;12490:18;;;12483:30;12549:34;12529:18;;;12522:62;-1:-1:-1;;;12600:18:1;;;12593:45;12655:19;;25580:157:0;12269:411:1;25580:157:0;25820:9;;-1:-1:-1;;;;;3225:18:0;;3198:7;3225:18;;;;;;;;;;;25794:22;;:6;:22;:::i;:::-;:35;;25760:140;;;;-1:-1:-1;;;25760:140:0;;12887:2:1;25760:140:0;;;12869:21:1;12926:2;12906:18;;;12899:30;-1:-1:-1;;;12945:18:1;;;12938:49;13004:18;;25760:140:0;12685:343:1;25760:140:0;25425:1078;;;-1:-1:-1;;;;;25971:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;26026:31:0;;;;;;:25;:31;;;;;;;;26025:32;25971:86;25945:558;;;26144:14;;26134:6;:24;;26100:158;;;;-1:-1:-1;;;26100:158:0;;13235:2:1;26100:158:0;;;13217:21:1;13274:2;13254:18;;;13247:30;13313:34;13293:18;;;13286:62;-1:-1:-1;;;13364:18:1;;;13357:46;13420:19;;26100:158:0;13033:412:1;25945:558:0;-1:-1:-1;;;;;26289:29:0;;;;;;:25;:29;;;;;;;;26284:219;;26403:9;;-1:-1:-1;;;;;3225:18:0;;3198:7;3225:18;;;;;;;;;;;26377:22;;:6;:22;:::i;:::-;:35;;26343:140;;;;-1:-1:-1;;;26343:140:0;;12887:2:1;26343:140:0;;;12869:21:1;12926:2;12906:18;;;12899:30;-1:-1:-1;;;12945:18:1;;;12938:49;13004:18;;26343:140:0;12685:343:1;26343:140:0;26590:4;26541:28;3225:18;;;;;;;;;;;26648;;26624:42;;;;;;;26697:35;;-1:-1:-1;26721:11:0;;;;;;;26697:35;:61;;;;-1:-1:-1;26750:8:0;;-1:-1:-1;;;26750:8:0;;;;26749:9;26697:61;:110;;;;-1:-1:-1;;;;;;26776:31:0;;;;;;:25;:31;;;;;;;;26775:32;26697:110;:153;;;;-1:-1:-1;;;;;;26825:25:0;;;;;;:19;:25;;;;;;;;26824:26;26697:153;:194;;;;-1:-1:-1;;;;;;26868:23:0;;;;;;:19;:23;;;;;;;;26867:24;26697:194;26679:326;;;26918:8;:15;;-1:-1:-1;;;;26918:15:0;-1:-1:-1;;;26918:15:0;;;26950:10;:8;:10::i;:::-;26977:8;:16;;-1:-1:-1;;;;26977:16:0;;;26679:326;27033:8;;-1:-1:-1;;;;;27143:25:0;;27017:12;27143:25;;;:19;:25;;;;;;27033:8;-1:-1:-1;;;27033:8:0;;;;;27032:9;;27143:25;;:52;;-1:-1:-1;;;;;;27172:23:0;;;;;;:19;:23;;;;;;;;27143:52;27139:100;;;-1:-1:-1;27222:5:0;27139:100;27251:12;27356:7;27352:1167;;;-1:-1:-1;;;;;27408:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27457:1;27441:13;;:17;27408:50;27404:966;;;27486:34;27516:3;27486:25;27497:13;;27486:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;27479:41;;27589:13;;27569:16;;27562:4;:23;;;;:::i;:::-;27561:41;;;;:::i;:::-;27539:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27675:13:0;;27653:18;;27646:25;;:4;:25;:::i;:::-;27645:43;;;;:::i;:::-;27621:20;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;27757:13:0;;27737:16;;27730:23;;:4;:23;:::i;:::-;27729:41;;;;:::i;:::-;27707:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27841:13:0;;27820:17;;27813:24;;:4;:24;:::i;:::-;27812:42;;;;:::i;:::-;27789:19;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;27404:966:0;;-1:-1:-1;27404:966:0;;-1:-1:-1;;;;;27916:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27966:1;27951:12;;:16;27916:51;27912:458;;;27995:33;28024:3;27995:24;28006:12;;27995:6;:10;;:24;;;;:::i;:33::-;27988:40;;28096:12;;28077:15;;28070:4;:22;;;;:::i;:::-;28069:39;;;;:::i;:::-;28047:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28180:12:0;;28159:17;;28152:24;;:4;:24;:::i;:::-;28151:41;;;;:::i;:::-;28127:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;28260:12:0;;28241:15;;28234:22;;:4;:22;:::i;:::-;28233:39;;;;:::i;:::-;28211:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28342:12:0;;28322:16;;28315:23;;:4;:23;:::i;:::-;28314:40;;;;:::i;:::-;28291:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27912:458:0;28390:8;;28386:91;;28419:42;28435:4;28449;28456;28419:15;:42::i;:::-;28493:14;28503:4;28493:14;;:::i;:::-;;;27352:1167;28531:33;28547:4;28553:2;28557:6;28531:15;:33::i;:::-;23823:4749;;;;23710:4862;;;:::o;1129:191::-;1222:6;;;-1:-1:-1;;;;;1239:17:0;;;-1:-1:-1;;;;;;1239:17:0;;;;;;;1272:40;;1222:6;;;1239:17;1222:6;;1272:40;;1203:16;;1272:40;1192:128;1129:191;:::o;23381:188::-;-1:-1:-1;;;;;23464:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23464:39:0;;;;;;;;;;23521:40;;23464:39;;:31;23521:40;;;23381:188;;:::o;4922:733::-;-1:-1:-1;;;;;5062:20:0;;5054:70;;;;-1:-1:-1;;;5054:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5143:23:0;;5135:71;;;;-1:-1:-1;;;5135:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5303:17:0;;5279:21;5303:17;;;;;;;;;;;5339:23;;;;5331:74;;;;-1:-1:-1;;;5331:74:0;;13782:2:1;5331:74:0;;;13764:21:1;13821:2;13801:18;;;13794:30;13860:34;13840:18;;;13833:62;-1:-1:-1;;;13911:18:1;;;13904:36;13957:19;;5331:74:0;13580:402:1;5331:74:0;-1:-1:-1;;;;;5441:17:0;;;:9;:17;;;;;;;;;;;5461:22;;;5441:42;;5505:20;;;;;;;;:30;;5477:6;;5441:9;5505:30;;5477:6;;5505:30;:::i;:::-;;;;;;;;5570:9;-1:-1:-1;;;;;5553:35:0;5562:6;-1:-1:-1;;;;;5553:35:0;;5581:6;5553:35;;;;1830:25:1;;1818:2;1803:18;;1684:177;5553:35:0;;;;;;;;5601:46;23710:4862;29708:1947;29791:4;29747:23;3225:18;;;;;;;;;;;29747:50;;29808:25;29940:19;;29904:20;;29870:18;;29836;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;29808:151;-1:-1:-1;29970:12:0;29999:20;;;:46;;-1:-1:-1;30023:22:0;;29999:46;29995:85;;;30062:7;;;29708:1947::o;29995:85::-;30114:18;;:23;;30135:2;30114:23;:::i;:::-;30096:15;:41;30092:115;;;30172:18;;:23;;30193:2;30172:23;:::i;:::-;30154:41;;30092:115;30221:23;30308:1;30288:17;30266:18;;30248:15;:36;;;;:::i;:::-;30247:58;;;;:::i;:::-;:62;;;;:::i;:::-;30221:88;-1:-1:-1;30320:26:0;30349:36;:15;30221:88;30349:19;:36::i;:::-;30320:65;-1:-1:-1;30426:21:0;30460:36;30320:65;30460:16;:36::i;:::-;30509:18;30530:44;:21;30556:17;30530:25;:44::i;:::-;30509:65;;30587:18;30608:57;30647:17;30608:34;30623:18;;30608:10;:14;;:34;;;;:::i;:57::-;30587:78;;30676:25;30704:59;30745:17;30704:36;30719:20;;30704:10;:14;;:36;;;;:::i;:59::-;30676:87;;30774:24;30801:58;30841:17;30801:35;30816:19;;30801:10;:14;;:35;;;;:::i;:58::-;30774:85;-1:-1:-1;30872:23:0;30774:85;30924:17;30898:23;30911:10;30898;:23;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;30994:1;30973:18;:22;;;31006:18;:22;;;31039:20;:24;;;31074:19;:23;;;31132:17;;31124:61;;30872:88;;-1:-1:-1;;;;;;31132:17:0;;31163;;31124:61;30994:1;31124:61;31163:17;31132;31124:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31110:75:0;;-1:-1:-1;;31202:19:0;;;;;:42;;;31243:1;31225:15;:19;31202:42;31198:278;;;31261:46;31274:15;31291;31261:12;:46::i;:::-;31431:18;;31327:137;;;14399:25:1;;;14455:2;14440:18;;14433:34;;;14483:18;;;14476:34;;;;31327:137:0;;;;;;14387:2:1;31327:137:0;;;31198:278;31508:16;;31500:59;;-1:-1:-1;;;;;31508:16:0;;;;31538;;31500:59;;;;31538:16;31508;31500:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31592:15:0;;31584:63;;31486:73;;-1:-1:-1;;;;;;31592:15:0;;31621:21;;31584:63;;;;31621:21;31592:15;31584:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;29708:1947:0:o;8675:98::-;8733:7;8760:5;8764:1;8760;:5;:::i;:::-;8753:12;8675:98;-1:-1:-1;;;8675:98:0:o;8781:::-;8839:7;8866:5;8870:1;8866;:5;:::i;8569:98::-;8627:7;8654:5;8658:1;8654;:5;:::i;28582:589::-;28732:16;;;28746:1;28732:16;;;;;;;;28708:21;;28732:16;;;;;;;;;;-1:-1:-1;28732:16:0;28708:40;;28777:4;28759;28764:1;28759:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28759:23:0;;;-1:-1:-1;;;;;28759:23:0;;;;;28803:15;-1:-1:-1;;;;;28803:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28793:4;28798:1;28793:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;28793:32:0;;;-1:-1:-1;;;;;28793:32:0;;;;;28838:62;28855:4;28870:15;28888:11;28838:8;:62::i;:::-;28939:224;;-1:-1:-1;;;28939:224:0;;-1:-1:-1;;;;;28939:15:0;:66;;;;:224;;29020:11;;29046:1;;29090:4;;29117;;29137:15;;28939:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28637:534;28582:589;:::o;29179:521::-;29327:62;29344:4;29359:15;29377:11;29327:8;:62::i;:::-;29636:15;;29432:260;;-1:-1:-1;;;29432:260:0;;29504:4;29432:260;;;16367:34:1;16417:18;;;16410:34;;;29550:1:0;16460:18:1;;;16453:34;;;16503:18;;;16496:34;-1:-1:-1;;;;;29636:15:0;;;16546:19:1;;;16539:44;29666:15:0;16599:19:1;;;16592:35;29432:15:0;:31;;;;;;29471:9;;16301:19:1;;29432:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29179:521;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:597::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1866:385::-;1952:6;1960;1968;1976;2029:3;2017:9;2008:7;2004:23;2000:33;1997:53;;;2046:1;2043;2036:12;1997:53;-1:-1:-1;;2069:23:1;;;2139:2;2124:18;;2111:32;;-1:-1:-1;2190:2:1;2175:18;;2162:32;;2241:2;2226:18;2213:32;;-1:-1:-1;1866:385:1;-1:-1:-1;1866:385:1:o;2256:456::-;2333:6;2341;2349;2402:2;2390:9;2381:7;2377:23;2373:32;2370:52;;;2418:1;2415;2408:12;2370:52;2457:9;2444:23;2476:31;2501:5;2476:31;:::i;:::-;2526:5;-1:-1:-1;2583:2:1;2568:18;;2555:32;2596:33;2555:32;2596:33;:::i;:::-;2256:456;;2648:7;;-1:-1:-1;;;2702:2:1;2687:18;;;;2674:32;;2256:456::o;3114:247::-;3173:6;3226:2;3214:9;3205:7;3201:23;3197:32;3194:52;;;3242:1;3239;3232:12;3194:52;3281:9;3268:23;3300:31;3325:5;3300:31;:::i;3366:160::-;3431:20;;3487:13;;3480:21;3470:32;;3460:60;;3516:1;3513;3506:12;3531:315;3596:6;3604;3657:2;3645:9;3636:7;3632:23;3628:32;3625:52;;;3673:1;3670;3663:12;3625:52;3712:9;3699:23;3731:31;3756:5;3731:31;:::i;:::-;3781:5;-1:-1:-1;3805:35:1;3836:2;3821:18;;3805:35;:::i;:::-;3795:45;;3531:315;;;;;:::o;3851:180::-;3907:6;3960:2;3948:9;3939:7;3935:23;3931:32;3928:52;;;3976:1;3973;3966:12;3928:52;3999:26;4015:9;3999:26;:::i;4036:388::-;4104:6;4112;4165:2;4153:9;4144:7;4140:23;4136:32;4133:52;;;4181:1;4178;4171:12;4133:52;4220:9;4207:23;4239:31;4264:5;4239:31;:::i;:::-;4289:5;-1:-1:-1;4346:2:1;4331:18;;4318:32;4359:33;4318:32;4359:33;:::i;:::-;4411:7;4401:17;;;4036:388;;;;;:::o;4429:356::-;4631:2;4613:21;;;4650:18;;;4643:30;4709:34;4704:2;4689:18;;4682:62;4776:2;4761:18;;4429:356::o;4790:127::-;4851:10;4846:3;4842:20;4839:1;4832:31;4882:4;4879:1;4872:15;4906:4;4903:1;4896:15;4922:168;4962:7;5028:1;5024;5020:6;5016:14;5013:1;5010:21;5005:1;4998:9;4991:17;4987:45;4984:71;;;5035:18;;:::i;:::-;-1:-1:-1;5075:9:1;;4922:168::o;5095:217::-;5135:1;5161;5151:132;;5205:10;5200:3;5196:20;5193:1;5186:31;5240:4;5237:1;5230:15;5268:4;5265:1;5258:15;5151:132;-1:-1:-1;5297:9:1;;5095:217::o;5727:380::-;5806:1;5802:12;;;;5849;;;5870:61;;5924:4;5916:6;5912:17;5902:27;;5870:61;5977:2;5969:6;5966:14;5946:18;5943:38;5940:161;;6023:10;6018:3;6014:20;6011:1;6004:31;6058:4;6055:1;6048:15;6086:4;6083:1;6076:15;5940:161;;5727:380;;;:::o;6517:128::-;6557:3;6588:1;6584:6;6581:1;6578:13;6575:39;;;6594:18;;:::i;:::-;-1:-1:-1;6630:9:1;;6517:128::o;10292:401::-;10494:2;10476:21;;;10533:2;10513:18;;;10506:30;10572:34;10567:2;10552:18;;10545:62;-1:-1:-1;;;10638:2:1;10623:18;;10616:35;10683:3;10668:19;;10292:401::o;10698:399::-;10900:2;10882:21;;;10939:2;10919:18;;;10912:30;10978:34;10973:2;10958:18;;10951:62;-1:-1:-1;;;11044:2:1;11029:18;;11022:33;11087:3;11072:19;;10698:399::o;13450:125::-;13490:4;13518:1;13515;13512:8;13509:34;;;13523:18;;:::i;:::-;-1:-1:-1;13560:9:1;;13450:125::o;14653:127::-;14714:10;14709:3;14705:20;14702:1;14695:31;14745:4;14742:1;14735:15;14769:4;14766:1;14759:15;14785:251;14855:6;14908:2;14896:9;14887:7;14883:23;14879:32;14876:52;;;14924:1;14921;14914:12;14876:52;14956:9;14950:16;14975:31;15000:5;14975:31;:::i;15041:980::-;15303:4;15351:3;15340:9;15336:19;15382:6;15371:9;15364:25;15408:2;15446:6;15441:2;15430:9;15426:18;15419:34;15489:3;15484:2;15473:9;15469:18;15462:31;15513:6;15548;15542:13;15579:6;15571;15564:22;15617:3;15606:9;15602:19;15595:26;;15656:2;15648:6;15644:15;15630:29;;15677:1;15687:195;15701:6;15698:1;15695:13;15687:195;;;15766:13;;-1:-1:-1;;;;;15762:39:1;15750:52;;15857:15;;;;15822:12;;;;15798:1;15716:9;15687:195;;;-1:-1:-1;;;;;;;15938:32:1;;;;15933:2;15918:18;;15911:60;-1:-1:-1;;;16002:3:1;15987:19;15980:35;15899:3;15041:980;-1:-1:-1;;;15041:980:1:o;16638:306::-;16726:6;16734;16742;16795:2;16783:9;16774:7;16770:23;16766:32;16763:52;;;16811:1;16808;16801:12;16763:52;16840:9;16834:16;16824:26;;16890:2;16879:9;16875:18;16869:25;16859:35;;16934:2;16923:9;16919:18;16913:25;16903:35;;16638:306;;;;;:::o

Swarm Source

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