ETH Price: $3,667.11 (+0.75%)
 

Overview

Max Total Supply

1,000,000,000 Arnius

Holders

7

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,104,000 Arnius

Value
$0.00
0xa503fc64b508a805c33bbf0b1e90b7cdeaa4c26d
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:
Arnius

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-23
*/

/**
 /$$$$$$                      /$$                    
 /$$__  $$                    |__/                    
| $$  \ $$  /$$$$$$  /$$$$$$$  /$$ /$$   /$$  /$$$$$$$
| $$$$$$$$ /$$__  $$| $$__  $$| $$| $$  | $$ /$$_____/
| $$__  $$| $$  \__/| $$  \ $$| $$| $$  | $$|  $$$$$$ 
| $$  | $$| $$      | $$  | $$| $$| $$  | $$ \____  $$
| $$  | $$| $$      | $$  | $$| $$|  $$$$$$/ /$$$$$$$/
|__/  |__/|__/      |__/  |__/|__/ \______/ |_______/ 
                                                      
                                                      
                                                      
*/


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

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

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

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

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

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

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

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

interface IBEP20 {
    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 IBEP20Metadata is IBEP20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract BEP20 is Context, IBEP20, IBEP20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "BEP20: mint to the zero address");

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

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

abstract contract Ownable is Context {

    address private _owner;

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

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

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

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

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

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

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 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 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 IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router01 {
    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 removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin,
                             uint256 amountBMin, address to, uint256 deadline) 
                             external returns (uint256 amountA, uint256 amountB);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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 Arnius is BEP20, Ownable { // 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 internal sellAmount = 0;
    uint256 internal buyAmount = 0;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet; //
    address payable public devWallet; //

    uint256 public maxWallet;
    bool public maxWalletEnabled = true;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    uint256 public buyDevFee;
    uint256 public sellDevFee;

    bool public swapAndLiquifyEnabled = true;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = false; 
    uint256 private gasPriceLimit = 7 * 1 gwei; // MAX GWEI
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 public launchtimestamp; // FOR LAUNCH TIMESTAMP 
    uint256 public cooldowntimer = 5; // DEFAULT COOLDOWN TIMER

    event EnableSwapAndLiquify(bool enabled);
    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event updateDevWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellBurnFee, uint256 buyMarketingFees,
                     uint256 buyBurnFee, uint256 buyDevFee, uint256 sellDevFee);

    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 opAmount, bool success);

    constructor() BEP20("Arnius", "Arnius") { // 
        marketingWallet = payable(0xFD0bAC1281aCc582D6009B1b7e3983F295023DDE); // 
        devWallet = payable(0xFD0bAC1281aCc582D6009B1b7e3983F295023DDE); // 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        //INITIAL FEE VALUES HERE
        buyMarketingFees = 4;
        sellMarketingFees = 4;
        buyBurnFee = 0;
        sellBurnFee = 0;
        buyDevFee = 0;
        sellDevFee = 0;

        // TOTAL BUY AND TOTAL SELL FEE CALCS
        totalBuyFees = buyMarketingFees.add(buyDevFee);
        totalSellFees = sellMarketingFees.add(sellDevFee);

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

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 totalSupply = (1_000_000_000) * (10**18); // TOTAL SUPPLY IS SET HERE
        _mint(owner(), totalSupply); // only time internal mint function is ever called is to create supply
        maxWallet = _totalSupply / 50; // 1%
        swapTokensAtAmount = _totalSupply / 100; // 1%;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

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

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingEnabled);
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }

    function setDevWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        devWallet = payable(wallet);
        emit updateDevWallet(wallet);
    }
    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    function setMaxWalletEnabled(bool value) external onlyOwner {
        maxWalletEnabled = value;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }

    
    function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 100, "max wallet cannot be set to less than 1%");
        maxWallet = value;
    }

    // TAKES ALL BNB FROM THE CONTRACT ADDRESS AND SENDS IT TO OWNERS WALLET
    function Sweep() external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(msg.sender).transfer(amountBNB);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function enableSwapAndLiquify(bool enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != enabled);
        swapAndLiquifyEnabled = enabled;
        emit EnableSwapAndLiquify(enabled);
    }

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

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // THIS IS THE ONE YOU USE TO TRASNFER OWNER IF U EVER DO
    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy,
                        uint256 burnSell, uint256 devBuy, uint256 devSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyBurnFee = burnBuy;
        sellMarketingFees = marketingSell;
        sellBurnFee = burnSell;
        buyDevFee = devBuy;
        sellDevFee = devSell;

        totalSellFees = sellMarketingFees.add(sellDevFee);
        totalBuyFees = buyMarketingFees.add(buyDevFee);

        // 
        require(totalSellFees <= 99 && totalBuyFees <= 99, "t");

        emit UpdateFees(sellMarketingFees, sellBurnFee, sellDevFee, buyMarketingFees,
                        buyBurnFee, buyDevFee);
    }

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

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");

        uint256 marketingFees;
        uint256 burnFee;
        uint256 devFee;

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 
        
        else if (
            !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
        ) {
            bool isSelling = automatedMarketMakerPairs[to];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                burnFee = sellBurnFee;
                devFee = sellDevFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                burnFee = buyBurnFee;
                devFee = buyDevFee;

                if (limitsInEffect) {
                require(block.number > launchblock + 0,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferBlock[tx.origin] = block.number;
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
            }

            if (maxWalletEnabled) {
            uint256 contractBalanceRecipient = balanceOf(to);
            require(contractBalanceRecipient + amount <= maxWallet,
                    "Exceeds maximum wallet token amount." );
            }
            }

            uint256 totalFees = marketingFees.add(devFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && !automatedMarketMakerPairs[from]) {
                swapping = true;
             
                uint256 swapBalance = swapTokensAtAmount;
                swapAndSendDividends(swapBalance);
                buyAmount = 0;
                sellAmount = 0;
                swapping = false;
            }

            uint256 fees = amount.mul(totalFees).div(100);
            uint256 burntokens = amount.mul(burnFee).div(100);

            amount = amount.sub(fees + burntokens);

            if (isSelling) {
                sellAmount = sellAmount.add(fees);
            } else {
                buyAmount = buyAmount.add(fees);
            }

            super._transfer(from, address(this), fees);

            if (burntokens > 0) {
                super._transfer(from, DEAD, burntokens);
                _totalSupply = _totalSupply.sub(burntokens);
            }
           
        }

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

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

    function 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
            owner(),
            block.timestamp
        );
    }

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        tokens = tokens * (10**18);
        uint256 totalAmount = buyAmount.add(sellAmount);
        uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
        uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);

        swapAndSendDividends(tokens);

        buyAmount = buyAmount.sub(fromBuy);
        sellAmount = sellAmount.sub(fromSell);
    }

    // TAX PAYOUT CODE 
    function swapAndSendDividends(uint256 tokens) private {
        if (tokens == 0) {
            return;
        }
        swapTokensForEth(tokens);

        bool success = true;
        bool successOp1 = true;
        
        uint256 _marketDevTotal = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee);

        uint256 feePortions;
        if (_marketDevTotal > 0) {
            feePortions = address(this).balance.div(_marketDevTotal);
        }
        uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
        uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions;
        
        if (marketingPayout > 0) {
            (success, ) = address(marketingWallet).call{value: marketingPayout}("");
        }
        
        if (devPayout > 0) {
            (successOp1, ) = address(devWallet).call{value: devPayout}("");
        }

        emit SendDividends(
            marketingPayout,
            success && successOp1
        );
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","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":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","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":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","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":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","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":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"burnBuy","type":"uint256"},{"internalType":"uint256","name":"burnSell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260088054600161ff0160a01b03191661dead17905560006009819055600a556010805460ff199081166001908117909255601880548216909217909155601c805490911690556401a13b8600601d5560056022553480156200006557600080fd5b5060408051808201825260068082526541726e69757360d01b602080840182815285518087019096529285528401528151919291620000a79160039162000635565b508051620000bd90600490602084019062000635565b5050506000620000d26200047360201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d805473fd0bac1281acc582d6009b1b7e3983f295023dde6001600160a01b03199182168117909255600e8054909116909117905560046014819055601281905560006015819055601381905560168190556017819055737a250d5630b4cf539739df2c5dacb4c659f2488d91620001a59162000477602090811b6200161017901c565b600c81905550620001c96017546012546200047760201b620016101790919060201c565b600b55600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000226573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024c9190620006db565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d59190620006db565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000323573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003499190620006db565b600780546001600160a01b0319166001600160a01b0392909216918217905562000375906001620004e5565b306000908152601960205260408082208054600160ff1991821681179092553384528284208054821683179055600d546001600160a01b0316845291909220805490911690911790556b033b2e3c9fd0803ce8000000620003e9620003e26005546001600160a01b031690565b8262000539565b6032600254620003fa919062000706565b600f556002546200040e9060649062000706565b6011556001601b60006200042a6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601b909252902080549091166001179055506200078c9050565b3390565b60008062000486838562000729565b905083811015620004de5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b9392505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620005915760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004d5565b620005ad816002546200047760201b620016101790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620005e09183906200161062000477821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620006439062000750565b90600052602060002090601f016020900481019282620006675760008555620006b2565b82601f106200068257805160ff1916838001178555620006b2565b82800160010185558215620006b2579182015b82811115620006b257825182559160200191906001019062000695565b50620006c0929150620006c4565b5090565b5b80821115620006c05760008155600101620006c5565b600060208284031215620006ee57600080fd5b81516001600160a01b0381168114620004de57600080fd5b6000826200072457634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200074b57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200076557607f821691505b6020821081036200078657634e487b7160e01b600052602260045260246000fd5b50919050565b6129a1806200079c6000396000f3fe60806040526004361061031e5760003560e01c806375f0a874116101ab578063a614ff75116100f7578063d5e3725111610095578063e71dc3f51161006f578063e71dc3f514610942578063f2fde38b14610958578063f8b45b0514610978578063fc6b151c1461098e57600080fd5b8063d5e37251146108c6578063dd62ed3e146108e6578063e2f456051461092c57600080fd5b8063b4942988116100d1578063b494298814610846578063b62496f51461085c578063b74e3b111461088c578063d045a329146108ac57600080fd5b8063a614ff75146107f0578063a9059cbb14610810578063adb873bd1461083057600080fd5b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146107845780639c3b4fdc146107a4578063a0d82dc5146107ba578063a457c2d7146107d057600080fd5b806395451c291461073957806395d89b411461074f578063992c58e41461076457600080fd5b806375f0a874146106905780637fdde05c146106b05780638a8c523c146106d05780638c3c82b2146106e55780638da5cb5b146106fb5780638ea5220f1461071957600080fd5b806349bd5a5e1161026a5780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461061057806370a0823114610625578063715018a61461065b57806375829def1461067057600080fd5b80635d098b38146105b05780635eee4bae146105d0578063679ca6e9146105f057600080fd5b806349bd5a5e146104ec5780634a62bb651461050c5780634a74bb02146105265780634ada218b146105405780634fbee193146105615780635124f8741461059a57600080fd5b806318160ddd116102d75780632307b441116102b15780632307b4411461047057806323b872dd14610490578063313ce567146104b057806339509351146104cc57600080fd5b806318160ddd1461041b5780631d7b1fb41461043a5780631f53ac021461045057600080fd5b806303fd2a451461032a57806305ca5f081461036757806306fdde031461038957806308dfe8a5146103ab578063095ea7b3146103cb5780631694505e146103fb57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037357600080fd5b506103876103823660046123c0565b6109ae565b005b34801561039557600080fd5b5061039e610a7f565b60405161035e91906123d9565b3480156103b757600080fd5b506103876103c6366004612458565b610b11565b3480156103d757600080fd5b506103eb6103e636600461248d565b610b9a565b604051901515815260200161035e565b34801561040757600080fd5b5060065461034a906001600160a01b031681565b34801561042757600080fd5b506002545b60405190815260200161035e565b34801561044657600080fd5b5061042c60225481565b34801561045c57600080fd5b5061038761046b3660046124b9565b610bb1565b34801561047c57600080fd5b5061038761048b3660046125ac565b610c48565b34801561049c57600080fd5b506103eb6104ab36600461266e565b610da0565b3480156104bc57600080fd5b506040516012815260200161035e565b3480156104d857600080fd5b506103eb6104e736600461248d565b610e09565b3480156104f857600080fd5b5060075461034a906001600160a01b031681565b34801561051857600080fd5b50601c546103eb9060ff1681565b34801561053257600080fd5b506018546103eb9060ff1681565b34801561054c57600080fd5b506008546103eb90600160a81b900460ff1681565b34801561056d57600080fd5b506103eb61057c3660046124b9565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105a657600080fd5b5061042c60145481565b3480156105bc57600080fd5b506103876105cb3660046124b9565b610e3f565b3480156105dc57600080fd5b506103876105eb3660046123c0565b610ecf565b3480156105fc57600080fd5b5061038761060b3660046126af565b610f11565b34801561061c57600080fd5b50610387610f4e565b34801561063157600080fd5b5061042c6106403660046124b9565b6001600160a01b031660009081526020819052604090205490565b34801561066757600080fd5b50610387610fab565b34801561067c57600080fd5b5061038761068b3660046124b9565b61101f565b34801561069c57600080fd5b50600d5461034a906001600160a01b031681565b3480156106bc57600080fd5b506103876106cb366004612458565b611090565b3480156106dc57600080fd5b506103876110e5565b3480156106f157600080fd5b5061042c60215481565b34801561070757600080fd5b506005546001600160a01b031661034a565b34801561072557600080fd5b50600e5461034a906001600160a01b031681565b34801561074557600080fd5b5061042c60125481565b34801561075b57600080fd5b5061039e61116c565b34801561077057600080fd5b5061038761077f3660046126ca565b61117b565b34801561079057600080fd5b5061038761079f366004612458565b611294565b3480156107b057600080fd5b5061042c60165481565b3480156107c657600080fd5b5061042c60175481565b3480156107dc57600080fd5b506103eb6107eb36600461248d565b6112c8565b3480156107fc57600080fd5b5061038761080b3660046126af565b611317565b34801561081c57600080fd5b506103eb61082b36600461248d565b611354565b34801561083c57600080fd5b5061042c60135481565b34801561085257600080fd5b5061042c60205481565b34801561086857600080fd5b506103eb6108773660046124b9565b601a6020526000908152604090205460ff1681565b34801561089857600080fd5b506103876108a73660046123c0565b611361565b3480156108b857600080fd5b506010546103eb9060ff1681565b3480156108d257600080fd5b506103876108e13660046126af565b6113f1565b3480156108f257600080fd5b5061042c61090136600461270d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093857600080fd5b5061042c60115481565b34801561094e57600080fd5b5061042c60155481565b34801561096457600080fd5b506103876109733660046124b9565b611473565b34801561098457600080fd5b5061042c600f5481565b34801561099a57600080fd5b506103876109a93660046123c0565b61155e565b6005546001600160a01b031633146109e15760405162461bcd60e51b81526004016109d890612746565b60405180910390fd5b6109f381670de0b6b3a7640000612791565b90506000610a0e600954600a5461161090919063ffffffff16565b90506000610a3182610a2b600a548661167690919063ffffffff16565b906116f8565b90506000610a4e83610a2b6009548761167690919063ffffffff16565b9050610a598461173a565b600a54610a6690836118eb565b600a55600954610a7690826118eb565b60095550505050565b606060038054610a8e906127b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906127b0565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b3b5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000610ba733848461192d565b5060015b92915050565b6005546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa91015b60405180910390a150565b6005546001600160a01b03163314610c725760405162461bcd60e51b81526004016109d890612746565b8051825114610cc35760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016109d8565b60c882511115610d205760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016109d8565b60005b8251811015610d9b576000838281518110610d4057610d406127ea565b602002602001015190506000838381518110610d5e57610d5e6127ea565b6020026020010151670de0b6b3a7640000610d799190612791565b9050610d86338383611a52565b50508080610d9390612800565b915050610d23565b505050565b6000610dad848484611bd5565b610dff8433610dfa856040518060600160405280602881526020016128f9602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906121b2565b61192d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ba7918590610dfa9086611610565b6005546001600160a01b03163314610e695760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610c3d565b6005546001600160a01b03163314610ef95760405162461bcd60e51b81526004016109d890612746565b610f0b81670de0b6b3a7640000612791565b60115550565b6005546001600160a01b03163314610f3b5760405162461bcd60e51b81526004016109d890612746565b601c805460ff1916911515919091179055565b6005546001600160a01b03163314610f785760405162461bcd60e51b81526004016109d890612746565b6040514790339082156108fc029083906000818181858888f19350505050158015610fa7573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610fd55760405162461bcd60e51b81526004016109d890612746565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110495760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03811660009081526019602090815260408083208054600160ff199182168117909255601b90935292208054909116909117905561108d81611473565b50565b6005546001600160a01b031633146110ba5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110f5760405162461bcd60e51b81526004016109d890612746565b600854600160a81b900460ff161561112657600080fd5b6008805460ff60a81b1916600160a81b17905543602055426021556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b606060048054610a8e906127b0565b6005546001600160a01b031633146111a55760405162461bcd60e51b81526004016109d890612746565b6014869055601584905560128590556013839055601682905560178190556111cd8582611610565b600b556016546014546111df91611610565b600c55600b546063108015906111f857506063600c5411155b6112285760405162461bcd60e51b81526020600482015260016024820152601d60fa1b60448201526064016109d8565b601254601354601754601454601554601654604080519687526020870195909552938501929092526060840152608083015260a08201527ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff9060c00160405180910390a1505050505050565b6005546001600160a01b031633146112be5760405162461bcd60e51b81526004016109d890612746565b610fa782826121ec565b6000610ba73384610dfa85604051806060016040528060258152602001612947602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906121b2565b6005546001600160a01b031633146113415760405162461bcd60e51b81526004016109d890612746565b6010805460ff1916911515919091179055565b6000610ba7338484611bd5565b6005546001600160a01b0316331461138b5760405162461bcd60e51b81526004016109d890612746565b61012c8111156113ec5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016109d8565b602255565b6005546001600160a01b0316331461141b5760405162461bcd60e51b81526004016109d890612746565b60185481151560ff90911615150361143257600080fd5b6018805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610c3d565b6005546001600160a01b0316331461149d5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b0381166115025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115885760405162461bcd60e51b81526004016109d890612746565b61159a81670de0b6b3a7640000612791565b905060646002546115ab9190612819565b81101561160b5760405162461bcd60e51b815260206004820152602860248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015267207468616e20312560c01b60648201526084016109d8565b600f55565b60008061161d838561283b565b90508381101561166f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109d8565b9392505050565b60008260000361168857506000610bab565b60006116948385612791565b9050826116a18583612819565b1461166f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109d8565b600061166f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612240565b806000036117455750565b61174e8161226e565b60165460145460019182916000916117669190611610565b60175460125461177591611610565b61177f919061283b565b9050600081156117965761179347836116f8565b90505b6000816117b060125460145461161090919063ffffffff16565b6117ba9190612791565b90506000826117d660175460165461161090919063ffffffff16565b6117e09190612791565b9050811561184057600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611835576040519150601f19603f3d011682016040523d82523d6000602084013e61183a565b606091505b50909650505b801561189e57600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611893576040519150601f19603f3d011682016040523d82523d6000602084013e611898565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9828780156118ca5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061166f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121b2565b6001600160a01b03831661198f5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0382166119f05760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ab65760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109d8565b6001600160a01b038216611b185760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109d8565b611b5581604051806060016040528060268152602001612921602691396001600160a01b03861660009081526020819052604090205491906121b2565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611b849082611610565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a45565b6001600160a01b038316611c3a5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6001600160a01b038216611c9c5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0383166000908152601b60205260408120548190819060ff16611d1957600854600160a81b900460ff16611d195760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016109d8565b83600003611d3557611d2d86866000611a52565b505050505050565b600854600160a01b900460ff16158015611d6857506001600160a01b03861660009081526019602052604090205460ff16155b8015611d8d57506001600160a01b03851660009081526019602052604090205460ff16155b156121a7576001600160a01b0385166000908152601a602052604090205460ff168015611e4d57601254601354601754601c54929650909450925060ff1615611e4857602254326000908152601f6020526040902054611ded919061283b565b421015611e355760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601f602052604090204290555b612074565b601454601554601654601c54929650909450925060ff1615611fe757602054611e7790600061283b565b4311611eba5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016109d8565b601d543a1115611f0c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016109d8565b326000908152601e6020526040902054439003611f625760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016109d8565b602254326000908152601f6020526040902054611f7f919061283b565b421015611fc75760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601e60209081526040808320439055601f90915290204290555b60105460ff1615612074576001600160a01b038616600090815260208190526040902054600f54612018878361283b565b11156120725760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109d8565b505b60006120808584611610565b3060009081526020819052604090205460115491925090811080159081906120c157506001600160a01b038a166000908152601a602052604090205460ff16155b156120fe576008805460ff60a01b1916600160a01b1790556011546120e58161173a565b506000600a8190556009556008805460ff60a01b191690555b600061210f6064610a2b8b87611676565b905060006121226064610a2b8c8b611676565b9050612138612131828461283b565b8b906118eb565b995085156121555760095461214d9083611610565b600955612166565b600a546121629083611610565b600a555b6121718c3084611a52565b80156121a05760085461218f908d906001600160a01b031683611a52565b60025461219c90826118eb565b6002555b5050505050505b611d2d868686611a52565b600081848411156121d65760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612853565b95945050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836122615760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612819565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122a3576122a36127ea565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612320919061286a565b81600181518110612333576123336127ea565b6001600160a01b039283166020918202929092010152600654612359913091168461192d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612392908590600090869030904290600401612887565b600060405180830381600087803b1580156123ac57600080fd5b505af1158015611d2d573d6000803e3d6000fd5b6000602082840312156123d257600080fd5b5035919050565b600060208083528351808285015260005b81811015612406578581018301518582016040015282016123ea565b81811115612418576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461108d57600080fd5b8035801515811461245357600080fd5b919050565b6000806040838503121561246b57600080fd5b82356124768161242e565b915061248460208401612443565b90509250929050565b600080604083850312156124a057600080fd5b82356124ab8161242e565b946020939093013593505050565b6000602082840312156124cb57600080fd5b813561166f8161242e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612515576125156124d6565b604052919050565b600067ffffffffffffffff821115612537576125376124d6565b5060051b60200190565b600082601f83011261255257600080fd5b813560206125676125628361251d565b6124ec565b82815260059290921b8401810191818101908684111561258657600080fd5b8286015b848110156125a1578035835291830191830161258a565b509695505050505050565b600080604083850312156125bf57600080fd5b823567ffffffffffffffff808211156125d757600080fd5b818501915085601f8301126125eb57600080fd5b813560206125fb6125628361251d565b82815260059290921b8401810191818101908984111561261a57600080fd5b948201945b838610156126415785356126328161242e565b8252948201949082019061261f565b9650508601359250508082111561265757600080fd5b5061266485828601612541565b9150509250929050565b60008060006060848603121561268357600080fd5b833561268e8161242e565b9250602084013561269e8161242e565b929592945050506040919091013590565b6000602082840312156126c157600080fd5b61166f82612443565b60008060008060008060c087890312156126e357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561272057600080fd5b823561272b8161242e565b9150602083013561273b8161242e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156127ab576127ab61277b565b500290565b600181811c908216806127c457607f821691505b6020821081036127e457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016128125761281261277b565b5060010190565b60008261283657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561284e5761284e61277b565b500190565b6000828210156128655761286561277b565b500390565b60006020828403121561287c57600080fd5b815161166f8161242e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128d75784516001600160a01b0316835293830193918301916001016128b2565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d5f4f2fbc2ca73d977093d04eabba0e40159987061200a2b6b89c989492bd42f64736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806375f0a874116101ab578063a614ff75116100f7578063d5e3725111610095578063e71dc3f51161006f578063e71dc3f514610942578063f2fde38b14610958578063f8b45b0514610978578063fc6b151c1461098e57600080fd5b8063d5e37251146108c6578063dd62ed3e146108e6578063e2f456051461092c57600080fd5b8063b4942988116100d1578063b494298814610846578063b62496f51461085c578063b74e3b111461088c578063d045a329146108ac57600080fd5b8063a614ff75146107f0578063a9059cbb14610810578063adb873bd1461083057600080fd5b806395451c29116101645780639a7a23d61161013e5780639a7a23d6146107845780639c3b4fdc146107a4578063a0d82dc5146107ba578063a457c2d7146107d057600080fd5b806395451c291461073957806395d89b411461074f578063992c58e41461076457600080fd5b806375f0a874146106905780637fdde05c146106b05780638a8c523c146106d05780638c3c82b2146106e55780638da5cb5b146106fb5780638ea5220f1461071957600080fd5b806349bd5a5e1161026a5780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461061057806370a0823114610625578063715018a61461065b57806375829def1461067057600080fd5b80635d098b38146105b05780635eee4bae146105d0578063679ca6e9146105f057600080fd5b806349bd5a5e146104ec5780634a62bb651461050c5780634a74bb02146105265780634ada218b146105405780634fbee193146105615780635124f8741461059a57600080fd5b806318160ddd116102d75780632307b441116102b15780632307b4411461047057806323b872dd14610490578063313ce567146104b057806339509351146104cc57600080fd5b806318160ddd1461041b5780631d7b1fb41461043a5780631f53ac021461045057600080fd5b806303fd2a451461032a57806305ca5f081461036757806306fdde031461038957806308dfe8a5146103ab578063095ea7b3146103cb5780631694505e146103fb57600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5060085461034a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561037357600080fd5b506103876103823660046123c0565b6109ae565b005b34801561039557600080fd5b5061039e610a7f565b60405161035e91906123d9565b3480156103b757600080fd5b506103876103c6366004612458565b610b11565b3480156103d757600080fd5b506103eb6103e636600461248d565b610b9a565b604051901515815260200161035e565b34801561040757600080fd5b5060065461034a906001600160a01b031681565b34801561042757600080fd5b506002545b60405190815260200161035e565b34801561044657600080fd5b5061042c60225481565b34801561045c57600080fd5b5061038761046b3660046124b9565b610bb1565b34801561047c57600080fd5b5061038761048b3660046125ac565b610c48565b34801561049c57600080fd5b506103eb6104ab36600461266e565b610da0565b3480156104bc57600080fd5b506040516012815260200161035e565b3480156104d857600080fd5b506103eb6104e736600461248d565b610e09565b3480156104f857600080fd5b5060075461034a906001600160a01b031681565b34801561051857600080fd5b50601c546103eb9060ff1681565b34801561053257600080fd5b506018546103eb9060ff1681565b34801561054c57600080fd5b506008546103eb90600160a81b900460ff1681565b34801561056d57600080fd5b506103eb61057c3660046124b9565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156105a657600080fd5b5061042c60145481565b3480156105bc57600080fd5b506103876105cb3660046124b9565b610e3f565b3480156105dc57600080fd5b506103876105eb3660046123c0565b610ecf565b3480156105fc57600080fd5b5061038761060b3660046126af565b610f11565b34801561061c57600080fd5b50610387610f4e565b34801561063157600080fd5b5061042c6106403660046124b9565b6001600160a01b031660009081526020819052604090205490565b34801561066757600080fd5b50610387610fab565b34801561067c57600080fd5b5061038761068b3660046124b9565b61101f565b34801561069c57600080fd5b50600d5461034a906001600160a01b031681565b3480156106bc57600080fd5b506103876106cb366004612458565b611090565b3480156106dc57600080fd5b506103876110e5565b3480156106f157600080fd5b5061042c60215481565b34801561070757600080fd5b506005546001600160a01b031661034a565b34801561072557600080fd5b50600e5461034a906001600160a01b031681565b34801561074557600080fd5b5061042c60125481565b34801561075b57600080fd5b5061039e61116c565b34801561077057600080fd5b5061038761077f3660046126ca565b61117b565b34801561079057600080fd5b5061038761079f366004612458565b611294565b3480156107b057600080fd5b5061042c60165481565b3480156107c657600080fd5b5061042c60175481565b3480156107dc57600080fd5b506103eb6107eb36600461248d565b6112c8565b3480156107fc57600080fd5b5061038761080b3660046126af565b611317565b34801561081c57600080fd5b506103eb61082b36600461248d565b611354565b34801561083c57600080fd5b5061042c60135481565b34801561085257600080fd5b5061042c60205481565b34801561086857600080fd5b506103eb6108773660046124b9565b601a6020526000908152604090205460ff1681565b34801561089857600080fd5b506103876108a73660046123c0565b611361565b3480156108b857600080fd5b506010546103eb9060ff1681565b3480156108d257600080fd5b506103876108e13660046126af565b6113f1565b3480156108f257600080fd5b5061042c61090136600461270d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093857600080fd5b5061042c60115481565b34801561094e57600080fd5b5061042c60155481565b34801561096457600080fd5b506103876109733660046124b9565b611473565b34801561098457600080fd5b5061042c600f5481565b34801561099a57600080fd5b506103876109a93660046123c0565b61155e565b6005546001600160a01b031633146109e15760405162461bcd60e51b81526004016109d890612746565b60405180910390fd5b6109f381670de0b6b3a7640000612791565b90506000610a0e600954600a5461161090919063ffffffff16565b90506000610a3182610a2b600a548661167690919063ffffffff16565b906116f8565b90506000610a4e83610a2b6009548761167690919063ffffffff16565b9050610a598461173a565b600a54610a6690836118eb565b600a55600954610a7690826118eb565b60095550505050565b606060038054610a8e906127b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba906127b0565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610b3b5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000610ba733848461192d565b5060015b92915050565b6005546001600160a01b03163314610bdb5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600e80546001600160a01b0319168417905590519182527f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa91015b60405180910390a150565b6005546001600160a01b03163314610c725760405162461bcd60e51b81526004016109d890612746565b8051825114610cc35760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e677468000060448201526064016109d8565b60c882511115610d205760405162461bcd60e51b815260206004820152602260248201527f57616c6c657473206c697374206c656e677468206d757374206265203c3d2032604482015261030360f41b60648201526084016109d8565b60005b8251811015610d9b576000838281518110610d4057610d406127ea565b602002602001015190506000838381518110610d5e57610d5e6127ea565b6020026020010151670de0b6b3a7640000610d799190612791565b9050610d86338383611a52565b50508080610d9390612800565b915050610d23565b505050565b6000610dad848484611bd5565b610dff8433610dfa856040518060600160405280602881526020016128f9602891396001600160a01b038a16600090815260016020908152604080832033845290915290205491906121b2565b61192d565b5060019392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ba7918590610dfa9086611610565b6005546001600160a01b03163314610e695760405162461bcd60e51b81526004016109d890612746565b6001600160a01b038116600081815260196020908152604091829020805460ff19166001179055600d80546001600160a01b0319168417905590519182527faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c2244339101610c3d565b6005546001600160a01b03163314610ef95760405162461bcd60e51b81526004016109d890612746565b610f0b81670de0b6b3a7640000612791565b60115550565b6005546001600160a01b03163314610f3b5760405162461bcd60e51b81526004016109d890612746565b601c805460ff1916911515919091179055565b6005546001600160a01b03163314610f785760405162461bcd60e51b81526004016109d890612746565b6040514790339082156108fc029083906000818181858888f19350505050158015610fa7573d6000803e3d6000fd5b5050565b6005546001600160a01b03163314610fd55760405162461bcd60e51b81526004016109d890612746565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110495760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03811660009081526019602090815260408083208054600160ff199182168117909255601b90935292208054909116909117905561108d81611473565b50565b6005546001600160a01b031633146110ba5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461110f5760405162461bcd60e51b81526004016109d890612746565b600854600160a81b900460ff161561112657600080fd5b6008805460ff60a81b1916600160a81b17905543602055426021556040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a1565b606060048054610a8e906127b0565b6005546001600160a01b031633146111a55760405162461bcd60e51b81526004016109d890612746565b6014869055601584905560128590556013839055601682905560178190556111cd8582611610565b600b556016546014546111df91611610565b600c55600b546063108015906111f857506063600c5411155b6112285760405162461bcd60e51b81526020600482015260016024820152601d60fa1b60448201526064016109d8565b601254601354601754601454601554601654604080519687526020870195909552938501929092526060840152608083015260a08201527ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff9060c00160405180910390a1505050505050565b6005546001600160a01b031633146112be5760405162461bcd60e51b81526004016109d890612746565b610fa782826121ec565b6000610ba73384610dfa85604051806060016040528060258152602001612947602591393360009081526001602090815260408083206001600160a01b038d16845290915290205491906121b2565b6005546001600160a01b031633146113415760405162461bcd60e51b81526004016109d890612746565b6010805460ff1916911515919091179055565b6000610ba7338484611bd5565b6005546001600160a01b0316331461138b5760405162461bcd60e51b81526004016109d890612746565b61012c8111156113ec5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d604482015265696e7574657360d01b60648201526084016109d8565b602255565b6005546001600160a01b0316331461141b5760405162461bcd60e51b81526004016109d890612746565b60185481151560ff90911615150361143257600080fd5b6018805460ff19168215159081179091556040519081527fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef90602001610c3d565b6005546001600160a01b0316331461149d5760405162461bcd60e51b81526004016109d890612746565b6001600160a01b0381166115025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115885760405162461bcd60e51b81526004016109d890612746565b61159a81670de0b6b3a7640000612791565b905060646002546115ab9190612819565b81101561160b5760405162461bcd60e51b815260206004820152602860248201527f6d61782077616c6c65742063616e6e6f742062652073657420746f206c657373604482015267207468616e20312560c01b60648201526084016109d8565b600f55565b60008061161d838561283b565b90508381101561166f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016109d8565b9392505050565b60008260000361168857506000610bab565b60006116948385612791565b9050826116a18583612819565b1461166f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016109d8565b600061166f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612240565b806000036117455750565b61174e8161226e565b60165460145460019182916000916117669190611610565b60175460125461177591611610565b61177f919061283b565b9050600081156117965761179347836116f8565b90505b6000816117b060125460145461161090919063ffffffff16565b6117ba9190612791565b90506000826117d660175460165461161090919063ffffffff16565b6117e09190612791565b9050811561184057600d546040516001600160a01b03909116908390600081818185875af1925050503d8060008114611835576040519150601f19603f3d011682016040523d82523d6000602084013e61183a565b606091505b50909650505b801561189e57600e546040516001600160a01b03909116908290600081818185875af1925050503d8060008114611893576040519150601f19603f3d011682016040523d82523d6000602084013e611898565b606091505b50909550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9828780156118ca5750865b6040805192835290151560208301520160405180910390a150505050505050565b600061166f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121b2565b6001600160a01b03831661198f5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0382166119f05760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109d8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ab65760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109d8565b6001600160a01b038216611b185760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109d8565b611b5581604051806060016040528060268152602001612921602691396001600160a01b03861660009081526020819052604090205491906121b2565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611b849082611610565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a45565b6001600160a01b038316611c3a5760405162461bcd60e51b815260206004820152602660248201527f4942455032303a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016109d8565b6001600160a01b038216611c9c5760405162461bcd60e51b8152602060048201526024808201527f4942455032303a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d8565b6001600160a01b0383166000908152601b60205260408120548190819060ff16611d1957600854600160a81b900460ff16611d195760405162461bcd60e51b815260206004820181905260248201527f54726164696e6720686173206e6f7420796574206265656e20656e61626c656460448201526064016109d8565b83600003611d3557611d2d86866000611a52565b505050505050565b600854600160a01b900460ff16158015611d6857506001600160a01b03861660009081526019602052604090205460ff16155b8015611d8d57506001600160a01b03851660009081526019602052604090205460ff16155b156121a7576001600160a01b0385166000908152601a602052604090205460ff168015611e4d57601254601354601754601c54929650909450925060ff1615611e4857602254326000908152601f6020526040902054611ded919061283b565b421015611e355760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601f602052604090204290555b612074565b601454601554601654601c54929650909450925060ff1615611fe757602054611e7790600061283b565b4311611eba5760405162461bcd60e51b8152602060048201526012602482015271796f75207368616c6c206e6f74207061737360701b60448201526064016109d8565b601d543a1115611f0c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e000000000000000060448201526064016109d8565b326000908152601e6020526040902054439003611f625760405162461bcd60e51b8152602060048201526014602482015273546f6f206d616e7920545820696e20626c6f636b60601b60448201526064016109d8565b602254326000908152601f6020526040902054611f7f919061283b565b421015611fc75760405162461bcd60e51b8152602060048201526016602482015275636f6f6c646f776e20706572696f642061637469766560501b60448201526064016109d8565b326000908152601e60209081526040808320439055601f90915290204290555b60105460ff1615612074576001600160a01b038616600090815260208190526040902054600f54612018878361283b565b11156120725760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b60648201526084016109d8565b505b60006120808584611610565b3060009081526020819052604090205460115491925090811080159081906120c157506001600160a01b038a166000908152601a602052604090205460ff16155b156120fe576008805460ff60a01b1916600160a01b1790556011546120e58161173a565b506000600a8190556009556008805460ff60a01b191690555b600061210f6064610a2b8b87611676565b905060006121226064610a2b8c8b611676565b9050612138612131828461283b565b8b906118eb565b995085156121555760095461214d9083611610565b600955612166565b600a546121629083611610565b600a555b6121718c3084611a52565b80156121a05760085461218f908d906001600160a01b031683611a52565b60025461219c90826118eb565b6002555b5050505050505b611d2d868686611a52565b600081848411156121d65760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612853565b95945050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600081836122615760405162461bcd60e51b81526004016109d891906123d9565b5060006121e38486612819565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106122a3576122a36127ea565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612320919061286a565b81600181518110612333576123336127ea565b6001600160a01b039283166020918202929092010152600654612359913091168461192d565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612392908590600090869030904290600401612887565b600060405180830381600087803b1580156123ac57600080fd5b505af1158015611d2d573d6000803e3d6000fd5b6000602082840312156123d257600080fd5b5035919050565b600060208083528351808285015260005b81811015612406578581018301518582016040015282016123ea565b81811115612418576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461108d57600080fd5b8035801515811461245357600080fd5b919050565b6000806040838503121561246b57600080fd5b82356124768161242e565b915061248460208401612443565b90509250929050565b600080604083850312156124a057600080fd5b82356124ab8161242e565b946020939093013593505050565b6000602082840312156124cb57600080fd5b813561166f8161242e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612515576125156124d6565b604052919050565b600067ffffffffffffffff821115612537576125376124d6565b5060051b60200190565b600082601f83011261255257600080fd5b813560206125676125628361251d565b6124ec565b82815260059290921b8401810191818101908684111561258657600080fd5b8286015b848110156125a1578035835291830191830161258a565b509695505050505050565b600080604083850312156125bf57600080fd5b823567ffffffffffffffff808211156125d757600080fd5b818501915085601f8301126125eb57600080fd5b813560206125fb6125628361251d565b82815260059290921b8401810191818101908984111561261a57600080fd5b948201945b838610156126415785356126328161242e565b8252948201949082019061261f565b9650508601359250508082111561265757600080fd5b5061266485828601612541565b9150509250929050565b60008060006060848603121561268357600080fd5b833561268e8161242e565b9250602084013561269e8161242e565b929592945050506040919091013590565b6000602082840312156126c157600080fd5b61166f82612443565b60008060008060008060c087890312156126e357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561272057600080fd5b823561272b8161242e565b9150602083013561273b8161242e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156127ab576127ab61277b565b500290565b600181811c908216806127c457607f821691505b6020821081036127e457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000600182016128125761281261277b565b5060010190565b60008261283657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561284e5761284e61277b565b500190565b6000828210156128655761286561277b565b500390565b60006020828403121561287c57600080fd5b815161166f8161242e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128d75784516001600160a01b0316835293830193918301916001016128b2565b50506001600160a01b0396909616606085015250505060800152939250505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d5f4f2fbc2ca73d977093d04eabba0e40159987061200a2b6b89c989492bd42f64736f6c634300080d0033

Deployed Bytecode Sourcemap

15981:14863:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16146:64;;;;;;;;;;-1:-1:-1;16146:64:0;;;;-1:-1:-1;;;;;16146:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;16146:64:0;;;;;;;;28771:443;;;;;;;;;;-1:-1:-1;28771:443:0;;;;;:::i;:::-;;:::i;:::-;;3864:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20699:181::-;;;;;;;;;;-1:-1:-1;20699:181:0;;;;;:::i;:::-;;:::i;4778:169::-;;;;;;;;;;-1:-1:-1;4778:169:0;;;;;:::i;:::-;;:::i;:::-;;;2115:14:1;;2108:22;2090:41;;2078:2;2063:18;4778:169:0;1950:187:1;16061:41:0;;;;;;;;;;-1:-1:-1;16061:41:0;;;;-1:-1:-1;;;;;16061:41:0;;;4185:108;;;;;;;;;;-1:-1:-1;4273:12:0;;4185:108;;;2523:25:1;;;2511:2;2496:18;4185:108:0;2377:177:1;17488:32:0;;;;;;;;;;;;;;;;20500:187;;;;;;;;;;-1:-1:-1;20500:187:0;;;;;:::i;:::-;;:::i;30280:561::-;;;;;;;;;;-1:-1:-1;30280:561:0;;;;;:::i;:::-;;:::i;4955:345::-;;;;;;;;;;-1:-1:-1;4955:345:0;;;;;:::i;:::-;;:::i;19905:93::-;;;;;;;;;;-1:-1:-1;19905:93:0;;19988:2;5901:36:1;;5889:2;5874:18;19905:93:0;5759:184:1;5308:218:0;;;;;;;;;;-1:-1:-1;5308:218:0;;;;;:::i;:::-;;:::i;16111:28::-;;;;;;;;;;-1:-1:-1;16111:28:0;;;;-1:-1:-1;;;;;16111:28:0;;;17097:34;;;;;;;;;;-1:-1:-1;17097:34:0;;;;;;;;16850:40;;;;;;;;;;-1:-1:-1;16850:40:0;;;;;;;;16245:34;;;;;;;;;;-1:-1:-1;16245:34:0;;;;-1:-1:-1;;;16245:34:0;;;;;;23619:126;;;;;;;;;;-1:-1:-1;23619:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23709:28:0;23685:4;23709:28;;;:19;:28;;;;;;;;;23619:126;16715:31;;;;;;;;;;;;;;;;20287:205;;;;;;;;;;-1:-1:-1;20287:205:0;;;;;:::i;:::-;;:::i;21907:120::-;;;;;;;;;;-1:-1:-1;21907:120:0;;;;;:::i;:::-;;:::i;21043:99::-;;;;;;;;;;-1:-1:-1;21043:99:0;;;;;:::i;:::-;;:::i;21753:146::-;;;;;;;;;;;;;:::i;4301:127::-;;;;;;;;;;-1:-1:-1;4301:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4402:18:0;4375:7;4402:18;;;;;;;;;;;;4301:127;7756:148;;;;;;;;;;;;;:::i;22658:212::-;;;;;;;;;;-1:-1:-1;22658:212:0;;;;;:::i;:::-;;:::i;16438:38::-;;;;;;;;;;-1:-1:-1;16438:38:0;;;;-1:-1:-1;;;;;16438:38:0;;;20888:147;;;;;;;;;;-1:-1:-1;20888:147:0;;;;;:::i;:::-;;:::i;20043:232::-;;;;;;;;;;;;;:::i;17426:30::-;;;;;;;;;;;;;;;;7542:79;;;;;;;;;;-1:-1:-1;7607:6:0;;-1:-1:-1;;;;;7607:6:0;7542:79;;16486:32;;;;;;;;;;-1:-1:-1;16486:32:0;;;;-1:-1:-1;;;;;16486:32:0;;;16643;;;;;;;;;;;;;;;;3972:104;;;;;;;;;;;;;:::i;22878:733::-;;;;;;;;;;-1:-1:-1;22878:733:0;;;;;:::i;:::-;;:::i;22251:140::-;;;;;;;;;;-1:-1:-1;22251:140:0;;;;;:::i;:::-;;:::i;16785:24::-;;;;;;;;;;;;;;;;16816:25;;;;;;;;;;;;;;;;5534:286;;;;;;;;;;-1:-1:-1;5534:286:0;;;;;:::i;:::-;;:::i;21150:103::-;;;;;;;;;;-1:-1:-1;21150:103:0;;;;;:::i;:::-;;:::i;4436:175::-;;;;;;;;;;-1:-1:-1;4436:175:0;;;;;:::i;:::-;;:::i;16682:26::-;;;;;;;;;;;;;;;;17375;;;;;;;;;;;;;;;;16958:57;;;;;;;;;;-1:-1:-1;16958:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21261:174;;;;;;;;;;-1:-1:-1;21261:174:0;;;;;:::i;:::-;;:::i;16561:35::-;;;;;;;;;;-1:-1:-1;16561:35:0;;;;;;;;22035:208;;;;;;;;;;-1:-1:-1;22035:208:0;;;;;:::i;:::-;;:::i;4619:151::-;;;;;;;;;;-1:-1:-1;4619:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4735:18:0;;;4708:7;4735:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4619:151;16603:33;;;;;;;;;;;;;;;;16753:25;;;;;;;;;;;;;;;;7912:244;;;;;;;;;;-1:-1:-1;7912:244:0;;;;;:::i;:::-;;:::i;16530:24::-;;;;;;;;;;;;;;;;21449:218;;;;;;;;;;-1:-1:-1;21449:218:0;;;;;:::i;:::-;;:::i;28771:443::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;;;;;;;;;28859:17:::1;:6:::0;28869::::1;28859:17;:::i;:::-;28850:26;;28887:19;28909:25;28923:10;;28909:9;;:13;;:25;;;;:::i;:::-;28887:47;;28945:15;28963:38;28989:11;28963:21;28974:9;;28963:6;:10;;:21;;;;:::i;:::-;:25:::0;::::1;:38::i;:::-;28945:56;;29012:16;29031:39;29058:11;29031:22;29042:10;;29031:6;:10;;:22;;;;:::i;:39::-;29012:58;;29083:28;29104:6;29083:20;:28::i;:::-;29136:9;::::0;:22:::1;::::0;29150:7;29136:13:::1;:22::i;:::-;29124:9;:34:::0;29182:10:::1;::::0;:24:::1;::::0;29197:8;29182:14:::1;:24::i;:::-;29169:10;:37:::0;-1:-1:-1;;;;28771:443:0:o;3864:100::-;3918:13;3951:5;3944:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3864:100;:::o;20699:181::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20783:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20783:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20838:34;;2090:41:1;;;20838:34:0::1;::::0;2063:18:1;20838:34:0::1;;;;;;;20699:181:::0;;:::o;4778:169::-;4861:4;4878:39;802:10;4901:7;4910:6;4878:8;:39::i;:::-;-1:-1:-1;4935:4:0;4778:169;;;;;:::o;20500:187::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20568:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;20568:34:0::1;20598:4;20568:34;::::0;;20613:9:::1;:27:::0;;-1:-1:-1;;;;;;20613:27:0::1;::::0;::::1;::::0;;20656:23;;160:51:1;;;20656:23:0::1;::::0;133:18:1;20656:23:0::1;;;;;;;;20500:187:::0;:::o;30280:561::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;30452:6:::1;:13;30427:14;:21;:38;30419:81;;;::::0;-1:-1:-1;;;30419:81:0;;8531:2:1;30419:81:0::1;::::0;::::1;8513:21:1::0;8570:2;8550:18;;;8543:30;8609:32;8589:18;;;8582:60;8659:18;;30419:81:0::1;8329:354:1::0;30419:81:0::1;30544:3;30519:14;:21;:28;;30511:75;;;::::0;-1:-1:-1;;;30511:75:0;;8890:2:1;30511:75:0::1;::::0;::::1;8872:21:1::0;8929:2;8909:18;;;8902:30;8968:34;8948:18;;;8941:62;-1:-1:-1;;;9019:18:1;;;9012:32;9061:19;;30511:75:0::1;8688:398:1::0;30511:75:0::1;30602:9;30597:237;30621:14;:21;30617:1;:25;30597:237;;;30664:14;30681;30696:1;30681:17;;;;;;;;:::i;:::-;;;;;;;30664:34;;30713:21;30737:6;30744:1;30737:9;;;;;;;;:::i;:::-;;;;;;;30750:6;30737:20;;;;:::i;:::-;30713:44;;30772:50;30788:10;30800:6;30808:13;30772:15;:50::i;:::-;30649:185;;30644:3;;;;;:::i;:::-;;;;30597:237;;;;30280:561:::0;;:::o;4955:345::-;5068:4;5085:36;5095:6;5103:9;5114:6;5085:9;:36::i;:::-;5132:138;5141:6;802:10;5163:106;5201:6;5163:106;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5163:19:0;;;;;;:11;:19;;;;;;;;802:10;5163:33;;;;;;;;;;:37;:106::i;:::-;5132:8;:138::i;:::-;-1:-1:-1;5288:4:0;4955:345;;;;;:::o;5308:218::-;802:10;5396:4;5445:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5445:34:0;;;;;;;;;;5396:4;;5413:83;;5436:7;;5445:50;;5484:10;5445:38;:50::i;20287:205::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20361:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;20361:34:0::1;20391:4;20361:34;::::0;;20406:15:::1;:33:::0;;-1:-1:-1;;;;;;20406:33:0::1;::::0;::::1;::::0;;20455:29;;160:51:1;;;20455:29:0::1;::::0;133:18:1;20455:29:0::1;14:203:1::0;21907:120:0;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;22002:17:::1;:6:::0;22012::::1;22002:17;:::i;:::-;21981:18;:38:::0;-1:-1:-1;21907:120:0:o;21043:99::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;21112:14:::1;:22:::0;;-1:-1:-1;;21112:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21043:99::o;21753:146::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;21852:39:::1;::::0;21820:21:::1;::::0;21860:10:::1;::::0;21852:39;::::1;;;::::0;21820:21;;21800:17:::1;21852:39:::0;21800:17;21852:39;21820:21;21860:10;21852:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21789:110;21753:146::o:0;7756:148::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;7847:6:::1;::::0;7826:40:::1;::::0;7863:1:::1;::::0;-1:-1:-1;;;;;7847:6:0::1;::::0;7826:40:::1;::::0;7863:1;;7826:40:::1;7877:6;:19:::0;;-1:-1:-1;;;;;;7877:19:0::1;::::0;;7756:148::o;22658:212::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22727:29:0;::::1;;::::0;;;:19:::1;:29;::::0;;;;;;;:36;;22759:4:::1;-1:-1:-1::0;;22727:36:0;;::::1;::::0;::::1;::::0;;;22774:33:::1;:43:::0;;;;;:50;;;;::::1;::::0;;::::1;::::0;;22835:27:::1;22727:29:::0;22835:17:::1;:27::i;:::-;22658:212:::0;:::o;20888:147::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20977:41:0;;;::::1;;::::0;;;:33:::1;:41;::::0;;;;:50;;-1:-1:-1;;20977:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20888:147::o;20043:232::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;20107:14:::1;::::0;-1:-1:-1;;;20107:14:0;::::1;;;20106:15;20098:24;;;::::0;::::1;;20133:14;:21:::0;;-1:-1:-1;;;;20133:21:0::1;-1:-1:-1::0;;;20133:21:0::1;::::0;;20179:12:::1;20165:11;:26:::0;20220:15:::1;20202;:33:::0;20251:16:::1;::::0;::::1;::::0;20133:21;;20251:16:::1;20043:232::o:0;3972:104::-;4028:13;4061:7;4054:14;;;;;:::i;22878:733::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;23066:16:::1;:31:::0;;;23108:10:::1;:20:::0;;;23139:17:::1;:33:::0;;;23183:11:::1;:22:::0;;;23216:9:::1;:18:::0;;;23245:10:::1;:20:::0;;;23294:33:::1;23159:13:::0;23258:7;23294:21:::1;:33::i;:::-;23278:13;:49:::0;23374:9:::1;::::0;23353:16:::1;::::0;:31:::1;::::0;:20:::1;:31::i;:::-;23338:12;:46:::0;23418:13:::1;::::0;23435:2:::1;-1:-1:-1::0;23418:19:0;::::1;::::0;:41:::1;;;23457:2;23441:12;;:18;;23418:41;23410:55;;;::::0;-1:-1:-1;;;23410:55:0;;9565:2:1;23410:55:0::1;::::0;::::1;9547:21:1::0;9604:1;9584:18;;;9577:29;-1:-1:-1;;;9622:18:1;;;9615:31;9663:18;;23410:55:0::1;9363:324:1::0;23410:55:0::1;23494:17;::::0;23513:11:::1;::::0;23526:10:::1;::::0;23538:16:::1;::::0;23581:10:::1;::::0;23593:9:::1;::::0;23483:120:::1;::::0;;9979:25:1;;;10035:2;10020:18;;10013:34;;;;10063:18;;;10056:34;;;;10121:2;10106:18;;10099:34;10164:3;10149:19;;10142:35;10208:3;10193:19;;10186:35;23483:120:0::1;::::0;9966:3:1;9951:19;23483:120:0::1;;;;;;;22878:733:::0;;;;;;:::o;22251:140::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;22342:41:::1;22371:4;22377:5;22342:28;:41::i;5534:286::-:0;5627:4;5644:146;802:10;5667:7;5676:113;5715:15;5676:113;;;;;;;;;;;;;;;;;802:10;5676:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5676:34:0;;;;;;;;;;;;:38;:113::i;21150:103::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;21221:16:::1;:24:::0;;-1:-1:-1;;21221:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21150:103::o;4436:175::-;4522:4;4539:42;802:10;4563:9;4574:6;4539:9;:42::i;21261:174::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;21349:3:::1;21340:5;:12;;21332:63;;;::::0;-1:-1:-1;;;21332:63:0;;10434:2:1;21332:63:0::1;::::0;::::1;10416:21:1::0;10473:2;10453:18;;;10446:30;10512:34;10492:18;;;10485:62;-1:-1:-1;;;10563:18:1;;;10556:36;10609:19;;21332:63:0::1;10232:402:1::0;21332:63:0::1;21406:13;:21:::0;21261:174::o;22035:208::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;22115:21:::1;::::0;:32;::::1;;:21;::::0;;::::1;:32;;::::0;22107:41:::1;;;::::0;::::1;;22159:21;:31:::0;;-1:-1:-1;;22159:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22206:29:::1;::::0;2090:41:1;;;22206:29:0::1;::::0;2078:2:1;2063:18;22206:29:0::1;1950:187:1::0;7912:244:0;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8001:22:0;::::1;7993:73;;;::::0;-1:-1:-1;;;7993:73:0;;10841:2:1;7993:73:0::1;::::0;::::1;10823:21:1::0;10880:2;10860:18;;;10853:30;10919:34;10899:18;;;10892:62;-1:-1:-1;;;10970:18:1;;;10963:36;11016:19;;7993:73:0::1;10639:402:1::0;7993:73:0::1;8103:6;::::0;8082:38:::1;::::0;-1:-1:-1;;;;;8082:38:0;;::::1;::::0;8103:6:::1;::::0;8082:38:::1;::::0;8103:6:::1;::::0;8082:38:::1;8131:6;:17:::0;;-1:-1:-1;;;;;;8131:17:0::1;-1:-1:-1::0;;;;;8131:17:0;;;::::1;::::0;;;::::1;::::0;;7912:244::o;21449:218::-;7669:6;;-1:-1:-1;;;;;7669:6:0;802:10;7669:22;7661:67;;;;-1:-1:-1;;;7661:67:0;;;;;;;:::i;:::-;21524:16:::1;:5:::0;21533:6:::1;21524:16;:::i;:::-;21516:24;;21583:3;21568:12;;:18;;;;:::i;:::-;21559:5;:27;;21551:80;;;::::0;-1:-1:-1;;;21551:80:0;;11470:2:1;21551:80:0::1;::::0;::::1;11452:21:1::0;11509:2;11489:18;;;11482:30;11548:34;11528:18;;;11521:62;-1:-1:-1;;;11599:18:1;;;11592:38;11647:19;;21551:80:0::1;11268:404:1::0;21551:80:0::1;21642:9;:17:::0;21449:218::o;1098:179::-;1156:7;;1188:5;1192:1;1188;:5;:::i;:::-;1176:17;;1217:1;1212;:6;;1204:46;;;;-1:-1:-1;;;1204:46:0;;12012:2:1;1204:46:0;;;11994:21:1;12051:2;12031:18;;;12024:30;12090:29;12070:18;;;12063:57;12137:18;;1204:46:0;11810:351:1;1204:46:0;1268:1;1098:179;-1:-1:-1;;;1098:179:0:o;1627:248::-;1685:7;1709:1;1714;1709:6;1705:47;;-1:-1:-1;1739:1:0;1732:8;;1705:47;1764:9;1776:5;1780:1;1776;:5;:::i;:::-;1764:17;-1:-1:-1;1809:1:0;1800:5;1804:1;1764:17;1800:5;:::i;:::-;:10;1792:56;;;;-1:-1:-1;;;1792:56:0;;12368:2:1;1792:56:0;;;12350:21:1;12407:2;12387:18;;;12380:30;12446:34;12426:18;;;12419:62;-1:-1:-1;;;12497:18:1;;;12490:31;12538:19;;1792:56:0;12166:397:1;1883:132:0;1941:7;1968:39;1972:1;1975;1968:39;;;;;;;;;;;;;;;;;:3;:39::i;29247:1025::-;29316:6;29326:1;29316:11;29312:50;;29247:1025;:::o;29312:50::-;29372:24;29389:6;29372:16;:24::i;:::-;29565:9;;29544:16;;29424:4;;;;29409:12;;29544:31;;:16;:20;:31::i;:::-;29530:10;;29508:17;;:33;;:21;:33::i;:::-;:67;;;;:::i;:::-;29482:93;-1:-1:-1;29588:19:0;29622;;29618:108;;29672:42;:21;29698:15;29672:25;:42::i;:::-;29658:56;;29618:108;29736:23;29804:11;29762:39;29783:17;;29762:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;29736:79;;29826:17;29874:11;29846:25;29860:10;;29846:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;29826:59;-1:-1:-1;29910:19:0;;29906:123;;29968:15;;29960:57;;-1:-1:-1;;;;;29968:15:0;;;;29997;;29960:57;;;;29997:15;29968;29960:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29946:71:0;;-1:-1:-1;;29906:123:0;30053:13;;30049:108;;30108:9;;30100:45;;-1:-1:-1;;;;;30108:9:0;;;;30131;;30100:45;;;;30131:9;30108;30100:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30083:62:0;;-1:-1:-1;;30049:108:0;30174:90;30202:15;30232:7;:21;;;;;30243:10;30232:21;30174:90;;;12946:25:1;;;13014:14;;13007:22;13002:2;12987:18;;12980:50;12919:18;30174:90:0;;;;;;;29301:971;;;;;;29247:1025;:::o;1285:136::-;1343:7;1370:43;1374:1;1377;1370:43;;;;;;;;;;;;;;;;;:3;:43::i;6760:346::-;-1:-1:-1;;;;;6862:19:0;;6854:68;;;;-1:-1:-1;;;6854:68:0;;13243:2:1;6854:68:0;;;13225:21:1;13282:2;13262:18;;;13255:30;13321:34;13301:18;;;13294:62;-1:-1:-1;;;13372:18:1;;;13365:34;13416:19;;6854:68:0;13041:400:1;6854:68:0;-1:-1:-1;;;;;6941:21:0;;6933:68;;;;-1:-1:-1;;;6933:68:0;;13648:2:1;6933:68:0;;;13630:21:1;13687:2;13667:18;;;13660:30;13726:34;13706:18;;;13699:62;-1:-1:-1;;;13777:18:1;;;13770:32;13819:19;;6933:68:0;13446:398:1;6933:68:0;-1:-1:-1;;;;;7014:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7066:32;;2523:25:1;;;7066:32:0;;2496:18:1;7066:32:0;;;;;;;;6760:346;;;:::o;5828:538::-;-1:-1:-1;;;;;5934:20:0;;5926:70;;;;-1:-1:-1;;;5926:70:0;;14051:2:1;5926:70:0;;;14033:21:1;14090:2;14070:18;;;14063:30;14129:34;14109:18;;;14102:62;-1:-1:-1;;;14180:18:1;;;14173:35;14225:19;;5926:70:0;13849:401:1;5926:70:0;-1:-1:-1;;;;;6015:23:0;;6007:71;;;;-1:-1:-1;;;6007:71:0;;14457:2:1;6007:71:0;;;14439:21:1;14496:2;14476:18;;;14469:30;14535:34;14515:18;;;14508:62;-1:-1:-1;;;14586:18:1;;;14579:33;14629:19;;6007:71:0;14255:399:1;6007:71:0;6171:70;6193:6;6171:70;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6171:17:0;;:9;:17;;;;;;;;;;;;:70;:21;:70::i;:::-;-1:-1:-1;;;;;6151:17:0;;;:9;:17;;;;;;;;;;;:90;;;;6275:20;;;;;;;:32;;6300:6;6275:24;:32::i;:::-;-1:-1:-1;;;;;6252:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;6323:35;2523:25:1;;;6252:20:0;;6323:35;;;;;;2496:18:1;6323:35:0;2377:177:1;23753:3494:0;-1:-1:-1;;;;;23853:18:0;;23845:69;;;;-1:-1:-1;;;23845:69:0;;14861:2:1;23845:69:0;;;14843:21:1;14900:2;14880:18;;;14873:30;14939:34;14919:18;;;14912:62;-1:-1:-1;;;14990:18:1;;;14983:36;15036:19;;23845:69:0;14659:402:1;23845:69:0;-1:-1:-1;;;;;23933:16:0;;23925:65;;;;-1:-1:-1;;;23925:65:0;;15268:2:1;23925:65:0;;;15250:21:1;15307:2;15287:18;;;15280:30;15346:34;15326:18;;;15319:62;-1:-1:-1;;;15397:18:1;;;15390:34;15441:19;;23925:65:0;15066:400:1;23925:65:0;-1:-1:-1;;;;;24093:39:0;;24003:21;24093:39;;;:33;:39;;;;;;24003:21;;;;24093:39;;24088:142;;24157:14;;-1:-1:-1;;;24157:14:0;;;;24149:59;;;;-1:-1:-1;;;24149:59:0;;15673:2:1;24149:59:0;;;15655:21:1;;;15692:18;;;15685:30;15751:34;15731:18;;;15724:62;15803:18;;24149:59:0;15471:356:1;24149:59:0;24246:6;24256:1;24246:11;24242:2942;;24274:28;24290:4;24296:2;24300:1;24274:15;:28::i;:::-;24317:7;;;23753:3494;;;:::o;24242:2942::-;24380:8;;-1:-1:-1;;;24380:8:0;;;;24379:9;:39;;;;-1:-1:-1;;;;;;24393:25:0;;;;;;:19;:25;;;;;;;;24392:26;24379:39;:67;;;;-1:-1:-1;;;;;;24423:23:0;;;;;;:19;:23;;;;;;;;24422:24;24379:67;24361:2823;;;-1:-1:-1;;;;;24490:29:0;;24473:14;24490:29;;;:25;:29;;;;;;;;24534:1494;;;;24584:17;;24630:11;;24669:10;;24704:14;;24584:17;;-1:-1:-1;24630:11:0;;-1:-1:-1;24669:10:0;-1:-1:-1;24704:14:0;;24700:269;;;24808:13;;24795:9;24766:39;;;;:28;:39;;;;;;:55;;24808:13;24766:55;:::i;:::-;24747:15;:74;;24739:134;;;;-1:-1:-1;;;24739:134:0;;16034:2:1;24739:134:0;;;16016:21:1;16073:2;16053:18;;;16046:30;-1:-1:-1;;;16092:18:1;;;16085:52;16154:18;;24739:134:0;15832:346:1;24739:134:0;24921:9;24892:39;;;;:28;:39;;;;;24934:15;24892:57;;24700:269;24534:1494;;;25053:16;;25098:10;;25136:9;;25170:14;;25053:16;;-1:-1:-1;25098:10:0;;-1:-1:-1;25136:9:0;-1:-1:-1;25170:14:0;;25166:598;;;25228:11;;:15;;25242:1;25228:15;:::i;:::-;25213:12;:30;25205:60;;;;-1:-1:-1;;;25205:60:0;;16385:2:1;25205:60:0;;;16367:21:1;16424:2;16404:18;;;16397:30;-1:-1:-1;;;16443:18:1;;;16436:48;16501:18;;25205:60:0;16183:342:1;25205:60:0;25307:13;;25292:11;:28;;25284:64;;;;-1:-1:-1;;;25284:64:0;;16732:2:1;25284:64:0;;;16714:21:1;16771:2;16751:18;;;16744:30;16810:26;16790:18;;;16783:54;16854:18;;25284:64:0;16530:348:1;25284:64:0;25400:9;25375:35;;;;:24;:35;;;;;;25414:12;25375:51;;25367:83;;;;-1:-1:-1;;;25367:83:0;;17085:2:1;25367:83:0;;;17067:21:1;17124:2;17104:18;;;17097:30;-1:-1:-1;;;17143:18:1;;;17136:50;17203:18;;25367:83:0;16883:344:1;25367:83:0;25538:13;;25525:9;25496:39;;;;:28;:39;;;;;;:55;;25538:13;25496:55;:::i;:::-;25477:15;:74;;25469:134;;;;-1:-1:-1;;;25469:134:0;;16034:2:1;25469:134:0;;;16016:21:1;16073:2;16053:18;;;16046:30;-1:-1:-1;;;16092:18:1;;;16085:52;16154:18;;25469:134:0;15832:346:1;25469:134:0;25647:9;25622:35;;;;:24;:35;;;;;;;;25660:12;25622:50;;25691:28;:39;;;;;25733:15;25691:57;;25166:598;25784:16;;;;25780:233;;;-1:-1:-1;;;;;4402:18:0;;25817:32;4402:18;;;;;;;;;;;25925:9;;25888:33;25915:6;4402:18;25888:33;:::i;:::-;:46;;25880:117;;;;-1:-1:-1;;;25880:117:0;;17434:2:1;25880:117:0;;;17416:21:1;17473:2;17453:18;;;17446:30;17512:34;17492:18;;;17485:62;-1:-1:-1;;;17563:18:1;;;17556:34;17607:19;;25880:117:0;17232:400:1;25880:117:0;25802:211;25780:233;26044:17;26064:25;:13;26082:6;26064:17;:25::i;:::-;26155:4;26106:28;4402:18;;;;;;;;;;;26217;;26044:45;;-1:-1:-1;4402:18:0;26193:42;;;;;;;26256:43;;-1:-1:-1;;;;;;26268:31:0;;;;;;:25;:31;;;;;;;;26267:32;26256:43;26252:325;;;26320:8;:15;;-1:-1:-1;;;;26320:15:0;-1:-1:-1;;;26320:15:0;;;26391:18;;26428:33;26391:18;26428:20;:33::i;:::-;-1:-1:-1;26492:1:0;26480:9;:13;;;26512:10;:14;26545:8;:16;;-1:-1:-1;;;;26545:16:0;;;26252:325;26593:12;26608:30;26634:3;26608:21;:6;26619:9;26608:10;:21::i;:30::-;26593:45;-1:-1:-1;26653:18:0;26674:28;26698:3;26674:19;:6;26685:7;26674:10;:19::i;:28::-;26653:49;-1:-1:-1;26728:29:0;26739:17;26653:49;26739:4;:17;:::i;:::-;26728:6;;:10;:29::i;:::-;26719:38;;26778:9;26774:155;;;26821:10;;:20;;26836:4;26821:14;:20::i;:::-;26808:10;:33;26774:155;;;26894:9;;:19;;26908:4;26894:13;:19::i;:::-;26882:9;:31;26774:155;26945:42;26961:4;26975;26982;26945:15;:42::i;:::-;27008:14;;27004:156;;27065:4;;27043:39;;27059:4;;-1:-1:-1;;;;;27065:4:0;27071:10;27043:15;:39::i;:::-;27116:12;;:28;;27133:10;27116:16;:28::i;:::-;27101:12;:43;27004:156;24458:2726;;;;;;24361:2823;27196:33;27212:4;27218:2;27222:6;27196:15;:33::i;1429:190::-;1515:7;1551:12;1543:6;;;;1535:29;;;;-1:-1:-1;;;1535:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1575:9:0;1587:5;1591:1;1587;:5;:::i;:::-;1575:17;1429:190;-1:-1:-1;;;;;1429:190:0:o;22399:188::-;-1:-1:-1;;;;;22482:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22482:39:0;;;;;;;;;;22539:40;;22482:39;;:31;22539:40;;;22399:188;;:::o;2023:189::-;2109:7;2144:12;2137:5;2129:28;;;;-1:-1:-1;;;2129:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2168:9:0;2180:5;2184:1;2180;:5;:::i;27743:499::-;27833:16;;;27847:1;27833:16;;;;;;;;27809:21;;27833:16;;;;;;;;;;-1:-1:-1;27833:16:0;27809:40;;27878:4;27860;27865:1;27860:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27860:23:0;;;:7;;;;;;;;;;:23;;;;27904:15;;:22;;;-1:-1:-1;;;27904:22:0;;;;:15;;;;;:20;;:22;;;;;27860:7;;27904:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27894:4;27899:1;27894:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27894:32:0;;;:7;;;;;;;;;:32;27969:15;;27937:62;;27954:4;;27969:15;27987:11;27937:8;:62::i;:::-;28010:15;;:224;;-1:-1:-1;;;28010:224:0;;-1:-1:-1;;;;;28010:15:0;;;;:66;;:224;;28091:11;;28010:15;;28161:4;;28188;;28208:15;;28010:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;222:180:1;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;407:597::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;845:6;842:1;839:13;836:91;;;915:1;910:2;901:6;890:9;886:22;882:31;875:42;836:91;-1:-1:-1;988:2:1;967:15;-1:-1:-1;;963:29:1;948:45;;;;995:2;944:54;;407:597;-1:-1:-1;;;407:597:1:o;1009:131::-;-1:-1:-1;;;;;1084:31:1;;1074:42;;1064:70;;1130:1;1127;1120:12;1145:160;1210:20;;1266:13;;1259:21;1249:32;;1239:60;;1295:1;1292;1285:12;1239:60;1145:160;;;:::o;1310:315::-;1375:6;1383;1436:2;1424:9;1415:7;1411:23;1407:32;1404:52;;;1452:1;1449;1442:12;1404:52;1491:9;1478:23;1510:31;1535:5;1510:31;:::i;:::-;1560:5;-1:-1:-1;1584:35:1;1615:2;1600:18;;1584:35;:::i;:::-;1574:45;;1310:315;;;;;:::o;1630:::-;1698:6;1706;1759:2;1747:9;1738:7;1734:23;1730:32;1727:52;;;1775:1;1772;1765:12;1727:52;1814:9;1801:23;1833:31;1858:5;1833:31;:::i;:::-;1883:5;1935:2;1920:18;;;;1907:32;;-1:-1:-1;;;1630:315:1:o;2559:247::-;2618:6;2671:2;2659:9;2650:7;2646:23;2642:32;2639:52;;;2687:1;2684;2677:12;2639:52;2726:9;2713:23;2745:31;2770:5;2745:31;:::i;2811:127::-;2872:10;2867:3;2863:20;2860:1;2853:31;2903:4;2900:1;2893:15;2927:4;2924:1;2917:15;2943:275;3014:2;3008:9;3079:2;3060:13;;-1:-1:-1;;3056:27:1;3044:40;;3114:18;3099:34;;3135:22;;;3096:62;3093:88;;;3161:18;;:::i;:::-;3197:2;3190:22;2943:275;;-1:-1:-1;2943:275:1:o;3223:183::-;3283:4;3316:18;3308:6;3305:30;3302:56;;;3338:18;;:::i;:::-;-1:-1:-1;3383:1:1;3379:14;3395:4;3375:25;;3223:183::o;3411:662::-;3465:5;3518:3;3511:4;3503:6;3499:17;3495:27;3485:55;;3536:1;3533;3526:12;3485:55;3572:6;3559:20;3598:4;3622:60;3638:43;3678:2;3638:43;:::i;:::-;3622:60;:::i;:::-;3716:15;;;3802:1;3798:10;;;;3786:23;;3782:32;;;3747:12;;;;3826:15;;;3823:35;;;3854:1;3851;3844:12;3823:35;3890:2;3882:6;3878:15;3902:142;3918:6;3913:3;3910:15;3902:142;;;3984:17;;3972:30;;4022:12;;;;3935;;3902:142;;;-1:-1:-1;4062:5:1;3411:662;-1:-1:-1;;;;;;3411:662:1:o;4078:1215::-;4196:6;4204;4257:2;4245:9;4236:7;4232:23;4228:32;4225:52;;;4273:1;4270;4263:12;4225:52;4313:9;4300:23;4342:18;4383:2;4375:6;4372:14;4369:34;;;4399:1;4396;4389:12;4369:34;4437:6;4426:9;4422:22;4412:32;;4482:7;4475:4;4471:2;4467:13;4463:27;4453:55;;4504:1;4501;4494:12;4453:55;4540:2;4527:16;4562:4;4586:60;4602:43;4642:2;4602:43;:::i;4586:60::-;4680:15;;;4762:1;4758:10;;;;4750:19;;4746:28;;;4711:12;;;;4786:19;;;4783:39;;;4818:1;4815;4808:12;4783:39;4842:11;;;;4862:217;4878:6;4873:3;4870:15;4862:217;;;4958:3;4945:17;4975:31;5000:5;4975:31;:::i;:::-;5019:18;;4895:12;;;;5057;;;;4862:217;;;5098:5;-1:-1:-1;;5141:18:1;;5128:32;;-1:-1:-1;;5172:16:1;;;5169:36;;;5201:1;5198;5191:12;5169:36;;5224:63;5279:7;5268:8;5257:9;5253:24;5224:63;:::i;:::-;5214:73;;;4078:1215;;;;;:::o;5298:456::-;5375:6;5383;5391;5444:2;5432:9;5423:7;5419:23;5415:32;5412:52;;;5460:1;5457;5450:12;5412:52;5499:9;5486:23;5518:31;5543:5;5518:31;:::i;:::-;5568:5;-1:-1:-1;5625:2:1;5610:18;;5597:32;5638:33;5597:32;5638:33;:::i;:::-;5298:456;;5690:7;;-1:-1:-1;;;5744:2:1;5729:18;;;;5716:32;;5298:456::o;5948:180::-;6004:6;6057:2;6045:9;6036:7;6032:23;6028:32;6025:52;;;6073:1;6070;6063:12;6025:52;6096:26;6112:9;6096:26;:::i;6357:523::-;6461:6;6469;6477;6485;6493;6501;6554:3;6542:9;6533:7;6529:23;6525:33;6522:53;;;6571:1;6568;6561:12;6522:53;-1:-1:-1;;6594:23:1;;;6664:2;6649:18;;6636:32;;-1:-1:-1;6715:2:1;6700:18;;6687:32;;6766:2;6751:18;;6738:32;;-1:-1:-1;6817:3:1;6802:19;;6789:33;;-1:-1:-1;6869:3:1;6854:19;6841:33;;-1:-1:-1;6357:523:1;-1:-1:-1;6357:523:1:o;6885:388::-;6953:6;6961;7014:2;7002:9;6993:7;6989:23;6985:32;6982:52;;;7030:1;7027;7020:12;6982:52;7069:9;7056:23;7088:31;7113:5;7088:31;:::i;:::-;7138:5;-1:-1:-1;7195:2:1;7180:18;;7167:32;7208:33;7167:32;7208:33;:::i;:::-;7260:7;7250:17;;;6885:388;;;;;:::o;7278:356::-;7480:2;7462:21;;;7499:18;;;7492:30;7558:34;7553:2;7538:18;;7531:62;7625:2;7610:18;;7278:356::o;7639:127::-;7700:10;7695:3;7691:20;7688:1;7681:31;7731:4;7728:1;7721:15;7755:4;7752:1;7745:15;7771:168;7811:7;7877:1;7873;7869:6;7865:14;7862:1;7859:21;7854:1;7847:9;7840:17;7836:45;7833:71;;;7884:18;;:::i;:::-;-1:-1:-1;7924:9:1;;7771:168::o;7944:380::-;8023:1;8019:12;;;;8066;;;8087:61;;8141:4;8133:6;8129:17;8119:27;;8087:61;8194:2;8186:6;8183:14;8163:18;8160:38;8157:161;;8240:10;8235:3;8231:20;8228:1;8221:31;8275:4;8272:1;8265:15;8303:4;8300:1;8293:15;8157:161;;7944:380;;;:::o;9091:127::-;9152:10;9147:3;9143:20;9140:1;9133:31;9183:4;9180:1;9173:15;9207:4;9204:1;9197:15;9223:135;9262:3;9283:17;;;9280:43;;9303:18;;:::i;:::-;-1:-1:-1;9350:1:1;9339:13;;9223:135::o;11046:217::-;11086:1;11112;11102:132;;11156:10;11151:3;11147:20;11144:1;11137:31;11191:4;11188:1;11181:15;11219:4;11216:1;11209:15;11102:132;-1:-1:-1;11248:9:1;;11046:217::o;11677:128::-;11717:3;11748:1;11744:6;11741:1;11738:13;11735:39;;;11754:18;;:::i;:::-;-1:-1:-1;11790:9:1;;11677:128::o;17637:125::-;17677:4;17705:1;17702;17699:8;17696:34;;;17710:18;;:::i;:::-;-1:-1:-1;17747:9:1;;17637:125::o;17767:251::-;17837:6;17890:2;17878:9;17869:7;17865:23;17861:32;17858:52;;;17906:1;17903;17896:12;17858:52;17938:9;17932:16;17957:31;17982:5;17957:31;:::i;18023:980::-;18285:4;18333:3;18322:9;18318:19;18364:6;18353:9;18346:25;18390:2;18428:6;18423:2;18412:9;18408:18;18401:34;18471:3;18466:2;18455:9;18451:18;18444:31;18495:6;18530;18524:13;18561:6;18553;18546:22;18599:3;18588:9;18584:19;18577:26;;18638:2;18630:6;18626:15;18612:29;;18659:1;18669:195;18683:6;18680:1;18677:13;18669:195;;;18748:13;;-1:-1:-1;;;;;18744:39:1;18732:52;;18839:15;;;;18804:12;;;;18780:1;18698:9;18669:195;;;-1:-1:-1;;;;;;;18920:32:1;;;;18915:2;18900:18;;18893:60;-1:-1:-1;;;18984:3:1;18969:19;18962:35;18881:3;18023:980;-1:-1:-1;;;18023:980:1:o

Swarm Source

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