ETH Price: $2,604.76 (-0.34%)

Token

Wojak Life (WojakLife)
 

Overview

Max Total Supply

15,000,000,000 WojakLife

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
m444.eth
Balance
314,639,023.374613055237818225 WojakLife

Value
$0.00
0xab9744923b1a7ce35a06c2cc89e6b495741811cc
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:
WojakLife

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

───────▄▀▀▀▀▀▀▀▀▀▀▄▄
────▄▀▀░░░░░░░░░░░░░▀▄
──▄▀░░░░░░░░░░░░░░░░░░▀▄
──█░░░░░░░░░░░░░░░░░░░░░▀▄
─▐▌░░░░░░░░▄▄▄▄▄▄▄░░░░░░░▐▌
─█░░░░░░░░░░░▄▄▄▄░░▀▀▀▀▀░░█
▐▌░░░░░░░▀▀▀▀░░░░░▀▀▀▀▀░░░▐▌
█░░░░░░░░░▄▄▀▀▀▀▀░░░░▀▀▀▀▄░█
█░░░░░░░░░░░░░░░░▀░░░▐░░░░░▐▌
▐▌░░░░░░░░░▐▀▀██▄░░░░░░▄▄▄░▐▌
─█░░░░░░░░░░░▀▀▀░░░░░░▀▀██░░█
─▐▌░░░░▄░░░░░░░░░░░░░▌░░░░░░█
──▐▌░░▐░░░░░░░░░░░░░░▀▄░░░░░█
───█░░░▌░░░░░░░░▐▀░░░░▄▀░░░▐▌
───▐▌░░▀▄░░░░░░░░▀░▀░▀▀░░░▄▀
───▐▌░░▐▀▄░░░░░░░░░░░░░░░░█
───▐▌░░░▌░▀▄░░░░▀▀▀▀▀▀░░░█
───█░░░▀░░░░▀▄░░░░░░░░░░▄▀
──▐▌░░░░░░░░░░▀▄░░░░░░▄▀
─▄▀░░░▄▀░░░░░░░░▀▀▀▀█▀
▀░░░▄▀░░░░░░░░░░▀░░░▀▀▀▀▄▄▄▄▄

https://www.wojaklifeeth.com/
https://t.me/WojakLifePortal
 
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;


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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

interface IERC20Metadata is IERC20 {
    
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}


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

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

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            _totalSupply -= amount;
        }

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

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

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

}

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() external 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 IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

contract WojakLife is ERC20, Ownable {
    uint256 public constant MAX_SUPPLY = 15_000_000_000 ether;
    uint256 public constant BPS_DENOMINATOR = 10_000;
    uint256 public constant SNIPE_BLOCKS = 0;
    uint256 constant FEE_ACCELERATE = MAX_SUPPLY;

    IUniswapV2Router02 public immutable _router;
    address public immutable _pair;

    uint256[2] public buyTaxes = [0, 0];
    uint256[2] public sellTaxes = [0, 0];
    uint256[2] public totalTaxes;
    address payable[2] public taxWallets;
    mapping(address => bool) public taxExcluded;
    mapping(address => bool) public blacklist;

    uint256 public minTokenBalance = 1;
    bool public autoSwap = true;
    bool public tradingActive = false;
    uint256 public maxBuy = MAX_SUPPLY * 3 / 100;
    uint256 public tradingBlock;
    uint256 internal _totalSupply = 0;
    mapping(address => uint256) private _balances;

    bool internal _inSwap = false;
    bool internal _inLiquidityAdd = false;

    struct SwapInfo {
        uint256 lastSwapBuy;
        uint256 lastSwapSell;
        uint256 holdingDuration;
    }

    mapping(address => SwapInfo) private _swapUsers;
    uint256 private _lastSwapDelay;

    event TaxWalletsChanged(
        address payable[2] previousWallets,
        address payable[2] nextWallets
    );
    event BuyTaxesChanged(uint256[2] previousTaxes, uint256[2] nextTaxes);
    event SellTaxesChanged(uint256[2] previousTaxes, uint256[2] nextTaxes);
    event MinTokenBalanceChanged(uint256 previousMin, uint256 nextMin);
    event MaxBuyChanged(uint256 nextMax);
    event TaxesRescued(uint256 index, uint256 amount);
    event TradingActiveChanged(bool enabled);
    event TaxExclusionChanged(address user, bool taxExcluded);
    event BlacklistUpdated(address user, bool previousStatus, bool nextStatus);
    event AutoSwapChanged(bool enabled);

    modifier lockSwap() {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    modifier liquidityAdd() {
        _inLiquidityAdd = true;
        _;
        _inLiquidityAdd = false;
    }

    constructor()
        ERC20("Wojak Life", "WojakLife")
        Ownable()
    {
        taxWallets[0] = payable(address(0x06c0130BdAC05C4A5061Ee67046E9b3A64ef6368));
        taxWallets[1] = payable(address(0xC30Fc130B17A38e93423E2e7DcCe06D9FE0E2E68));
        taxExcluded[owner()] = true;
        taxExcluded[address(this)] = true;
        taxExcluded[taxWallets[0]] = true;
        taxExcluded[taxWallets[1]] = true;
        _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _pair = IUniswapV2Factory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        taxExcluded[address(_router)] = true;
        _mint(owner(), MAX_SUPPLY);
    }

    function setBuyTaxes(uint256[2] memory _buyTaxes) external onlyOwner {
        require(
            _buyTaxes[0] + _buyTaxes[1] <= BPS_DENOMINATOR,
            "sum(_buyTaxes) cannot exceed BPS_DENOMINATOR"
        );
        emit BuyTaxesChanged(buyTaxes, _buyTaxes);
        buyTaxes = _buyTaxes;
    }

    function setSellTaxes(uint256[2] memory _sellTaxes) external onlyOwner {
        require(
            _sellTaxes[0] + _sellTaxes[1] <= BPS_DENOMINATOR,
            "sum(_sellTaxes) cannot exceed BPS_DENOMINATOR"
        );
        emit SellTaxesChanged(sellTaxes, _sellTaxes);
        sellTaxes = _sellTaxes;
    }

    function setMinTokenBalance(uint256 _minTokenBalance) external onlyOwner {
        emit MinTokenBalanceChanged(minTokenBalance, _minTokenBalance);
        minTokenBalance = _minTokenBalance;
    }

    function rescueTaxTokens(
        uint256 _index,
        uint256 _amount,
        address _recipient
    ) external onlyOwner {
        require(0 <= _index && _index < totalTaxes.length, "_index OOB");
        require(
            _amount <= totalTaxes[_index],
            "Amount cannot be greater than totalTax"
        );
        _rawTransfer(address(this), _recipient, _amount);
        emit TaxesRescued(_index, _amount);
        totalTaxes[_index] -= _amount;
    }

    function setTaxWallets(address payable[2] memory _taxWallets)
        external
        onlyOwner
    {
        emit TaxWalletsChanged(taxWallets, _taxWallets);
        taxWallets = _taxWallets;
    }

    function addLiquidity(uint256 tokens)
        external
        payable
        onlyOwner
        liquidityAdd
    {
        _mint(address(this), tokens);
        _approve(address(this), address(_router), tokens);

        _router.addLiquidityETH{value: msg.value}(
            address(this),
            tokens,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function updateBlacklist(address user, bool status)
        external
        virtual
        onlyOwner
    {
        _updateBlacklist(user, status);
    }

    function _updateBlacklist(address user, bool status) internal {
        emit BlacklistUpdated(user, blacklist[user], status);
        blacklist[user] = status;
    }

    function setTradingActive() external onlyOwner {
        tradingActive = true;
        tradingBlock = block.number;
        emit TradingActiveChanged(true);
    }

    function setTaxExcluded(address _account, bool _taxExcluded)
        external
        onlyOwner
    {
        taxExcluded[_account] = _taxExcluded;
        emit TaxExclusionChanged(_account, _taxExcluded);
    }

    function setAutoSwap(bool _autoSwap) external onlyOwner {
        autoSwap = _autoSwap;
        emit AutoSwapChanged(_autoSwap);
    }

    function setMaxBuy(uint256 _maxBuy) external onlyOwner {
        require(_maxBuy > _totalSupply * 5 / 1000, 'max buy should be more than .5%');
        maxBuy = _maxBuy;
        emit MaxBuyChanged(_maxBuy);
    }

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

    function _addBalance(address account, uint256 amount) internal {
        _balances[account] = _balances[account] + amount;
    }

    function _subtractBalance(address account, uint256 amount) internal {
        unchecked {
            _balances[account] = _balances[account] - amount;
        }
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(!blacklist[recipient], "Recipient is blacklisted");

        if (taxExcluded[sender] || taxExcluded[recipient]) {
            _lastSwapDelay = block.timestamp;
            _rawTransfer(sender, recipient, amount);
            return;
        }
        _updateInfo(sender, recipient);
        if (
            !_inSwap &&
            sender != _pair &&
            autoSwap
        ) {
            _swap();
        }
        uint256 send = amount;
        uint256[2] memory taxes;
        if (sender == _pair) {
            require(tradingActive, "Trading is not yet active");
            require(amount <= maxBuy, "Buy amount exceeds maxBuy");
            if (block.number <= tradingBlock + SNIPE_BLOCKS) {
                _updateBlacklist(recipient, true);
            }
            (send, taxes) = _getTaxAmounts(amount, true);
        } else if (recipient == _pair) {
            require(tradingActive, "Trading is not yet active");
            (send, taxes) = _getTaxAmounts(amount, false);
        }
        _rawTransfer(sender, recipient, send);
        _takeTaxes(sender, taxes);
    }

    function _swap() internal lockSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _router.WETH();

        uint256 totalTax = totalTaxes[0] + totalTaxes[1];
        if (totalTax == 0) {
            return;
        }
        uint256 walletTaxes = totalTax;
        if (walletTaxes > balanceOf(address(this))) {
            walletTaxes = balanceOf(address(this));
        }
        _approve(address(this), address(_router), walletTaxes);
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            walletTaxes,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        uint256 contractEthBalance = address(this).balance;

        uint256 tax0Eth = (contractEthBalance * totalTaxes[0]) / totalTax;
        uint256 tax1Eth = (contractEthBalance * totalTaxes[1]) / totalTax;
        totalTaxes = [0, 0];

        if (tax0Eth > 0) {
            (bool success, ) = taxWallets[0].call{value: tax0Eth}("");
            require(success, "failed swap");
        }
        if (tax1Eth > 0) {
            (bool success, ) = taxWallets[1].call{value: tax1Eth}("");
            require(success, "failed swap");
        }
    }

    function swapAll() external {
        if (!_inSwap) {
            _swap();
        }
    }

    function withdrawAll() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function _takeTaxes(address _account, uint256[2] memory _taxAmounts)
        internal
    {
        require(_account != address(0), "taxation from the zero address");

        uint256 totalAmount = _taxAmounts[0] + _taxAmounts[1];
        _rawTransfer(_account, address(this), totalAmount);
        totalTaxes[0] += _taxAmounts[0];
        totalTaxes[1] += _taxAmounts[1];
    }

    function _updateInfo(address sender, address recipient) internal {
        if (!taxExcluded[sender] && !taxExcluded[recipient]) {
            if (sender == _pair) {
                SwapInfo storage swapInfo = _swapUsers[recipient];
                if (swapInfo.lastSwapBuy == 0 && balanceOf(recipient) == 0) {
                    swapInfo.lastSwapBuy = block.timestamp;
                }
            } else {
                SwapInfo storage swapInfo = _swapUsers[sender];
                swapInfo.holdingDuration = swapInfo.lastSwapBuy - _lastSwapDelay;
                swapInfo.lastSwapSell = block.timestamp;
            }
        }
    }

    function _getTaxAmounts(uint256 amount, bool buying)
        internal
        view
        returns (uint256 send, uint256[2] memory taxes)
    {
        if (buying) {
            taxes = [
                (amount * buyTaxes[0]) / BPS_DENOMINATOR,
                (amount * buyTaxes[1]) / BPS_DENOMINATOR
            ];
        } else {
            taxes = [
                (amount * sellTaxes[0]) / BPS_DENOMINATOR,
                (amount * sellTaxes[1]) / BPS_DENOMINATOR
            ];
        }
        send = amount - taxes[0] - taxes[1];
    }

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

        uint256 senderBalance = balanceOf(sender);
        require(taxExcluded[sender] || senderBalance >= amount, "transfer amount exceeds balance");
        _subtractBalance(sender, amount);
        _addBalance(recipient, amount);

        emit Transfer(sender, recipient, amount);
    }

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

    function _mint(address account, uint256 amount) internal {
        require(_totalSupply + amount <= MAX_SUPPLY, "Max supply exceeded");
        _totalSupply += amount;
        _addBalance(account, amount);
        emit Transfer(address(0), account, amount);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoSwapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"previousStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"nextStatus","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[2]","name":"previousTaxes","type":"uint256[2]"},{"indexed":false,"internalType":"uint256[2]","name":"nextTaxes","type":"uint256[2]"}],"name":"BuyTaxesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nextMax","type":"uint256"}],"name":"MaxBuyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextMin","type":"uint256"}],"name":"MinTokenBalanceChanged","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[2]","name":"previousTaxes","type":"uint256[2]"},{"indexed":false,"internalType":"uint256[2]","name":"nextTaxes","type":"uint256[2]"}],"name":"SellTaxesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"taxExcluded","type":"bool"}],"name":"TaxExclusionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address payable[2]","name":"previousWallets","type":"address[2]"},{"indexed":false,"internalType":"address payable[2]","name":"nextWallets","type":"address[2]"}],"name":"TaxWalletsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TaxesRescued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingActiveChanged","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"},{"inputs":[],"name":"BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SNIPE_BLOCKS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","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":[],"name":"autoSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyTaxes","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"rescueTaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoSwap","type":"bool"}],"name":"setAutoSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[2]","name":"_buyTaxes","type":"uint256[2]"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuy","type":"uint256"}],"name":"setMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokenBalance","type":"uint256"}],"name":"setMinTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[2]","name":"_sellTaxes","type":"uint256[2]"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_taxExcluded","type":"bool"}],"name":"setTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[2]","name":"_taxWallets","type":"address[2]"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"taxWallets","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

610100604052600060c081815260e09190915262000022906006906002620004fa565b50604080518082019091526000808252602082015262000047906008906002620004fa565b50600160108190556011805461ffff191690911790556064620000786b3077b58d5d3783919800000060036200056f565b6200008491906200058f565b60125560006014556016805461ffff19169055348015620000a457600080fd5b506040518060400160405280600a815260200169576f6a616b204c69666560b01b81525060405180604001604052806009815260200168576f6a616b4c69666560b81b8152508160039081620000fb919062000657565b5060046200010a828262000657565b50505060006200011f620003d560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c80546001600160a01b03199081167306c0130bdac05c4a5061ee67046e9b3a64ef6368178255600d805490911673c30fc130b17a38e93423e2e7dcce06d9fe0e2e681781556005546001600160a01b039081166000908152600e60209081526040808320805460ff1990811660019081179092553085528285208054821683179055965485168452818420805488168217905594549093168252908290208054909416909217909255737a250d5630b4cf539739df2c5dacb4c659f2488d6080819052825163c45a015560e01b81529251909263c45a01559260048083019391928290030181865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062000723565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000723565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000354573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037a919062000723565b6001600160a01b0390811660a052608051166000908152600e60205260409020805460ff19166001179055620003cf620003bc6005546001600160a01b031690565b6b3077b58d5d37839198000000620003d9565b6200076b565b3390565b6b3077b58d5d3783919800000081601454620003f6919062000755565b1115620004495760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c7920657863656564656400000000000000000000000000604482015260640160405180910390fd5b80601460008282546200045d919062000755565b909155506200046f90508282620004b4565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216600090815260156020526040902054620004da90829062000755565b6001600160a01b0390921660009081526015602052604090209190915550565b826002810192821562000530579160200282015b8281111562000530578251829060ff169055916020019190600101906200050e565b506200053e92915062000542565b5090565b5b808211156200053e576000815560010162000543565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000589576200058962000559565b92915050565b600082620005ad57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005dd57607f821691505b602082108103620005fe57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065257600081815260208120601f850160051c810160208610156200062d5750805b601f850160051c820191505b818110156200064e5782815560010162000639565b5050505b505050565b81516001600160401b03811115620006735762000673620005b2565b6200068b81620006848454620005c8565b8462000604565b602080601f831160018114620006c35760008415620006aa5750858301515b600019600386901b1c1916600185901b1785556200064e565b600085815260208120601f198616915b82811015620006f457888601518255948401946001909101908401620006d3565b5085821015620007135787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200073657600080fd5b81516001600160a01b03811681146200074e57600080fd5b9392505050565b8082018082111562000589576200058962000559565b60805160a05161283a620007d0600039600081816106700152818161163701528181611692015281816117a50152611f5201526000818161073501528181610b7d01528181610ba4015281816118c0015281816119c001526119fc015261283a6000f3fe6080604052600436106102605760003560e01c8063821f658011610144578063b51449bb116100b6578063edae876f1161007a578063edae876f14610723578063f016d83b14610757578063f2fde38b1461076c578063f50a243b1461078c578063f53bc835146107ac578063f9f92be4146107cc57600080fd5b8063b51449bb1461065e578063bbc0c74214610692578063cd51e6d4146106b1578063dd62ed3e146106c7578063e1a452181461070d57600080fd5b806393818cfa1161010857806393818cfa146105a957806395d89b41146105c9578063a457c2d7146105de578063a894185d146105fe578063a9059cbb1461061e578063b0ac15711461063e57600080fd5b8063821f658014610502578063853828b6146105225780638da5cb5b14610537578063912c048c146105695780639155e0831461058957600080fd5b806339509351116101dd5780635b78f35f116101a15780635b78f35f1461045157806364071d9f1461046757806370a082311461048757806370db69d6146104bd578063715018a6146104d357806377004851146104e857600080fd5b806339509351146103b957806339b622d3146103d95780633e9ffbea1461040957806351c6590a1461041e57806352f892fa1461043157600080fd5b806319c2c40d1161022457806319c2c40d1461031d57806323b872dd1461033d5780632c8dc1471461035d578063313ce5671461037d57806332cb6b0c1461039957600080fd5b806306fdde031461026c578063095ea7b31461029757806309d2c46a146102c757806313554854146102e957806318160ddd146102fe57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107fc565b60405161028e91906122b5565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612318565b61088e565b604051901515815260200161028e565b3480156102d357600080fd5b506102e76102e236600461237b565b6108a5565b005b3480156102f557600080fd5b506102e7610923565b34801561030a57600080fd5b506014545b60405190815260200161028e565b34801561032957600080fd5b506102e76103383660046123f9565b610996565b34801561034957600080fd5b506102b761035836600461242e565b610a23565b34801561036957600080fd5b5061030f61037836600461246f565b610acd565b34801561038957600080fd5b506040516012815260200161028e565b3480156103a557600080fd5b5061030f6b3077b58d5d3783919800000081565b3480156103c557600080fd5b506102b76103d4366004612318565b610ae4565b3480156103e557600080fd5b506102b76103f4366004612488565b600e6020526000908152604090205460ff1681565b34801561041557600080fd5b506102e7610b20565b6102e761042c36600461246f565b610b34565b34801561043d57600080fd5b506102e761044c3660046124ac565b610c87565b34801561045d57600080fd5b5061030f60105481565b34801561047357600080fd5b506102e76104823660046124ac565b610d6f565b34801561049357600080fd5b5061030f6104a2366004612488565b6001600160a01b031660009081526015602052604090205490565b3480156104c957600080fd5b5061030f60125481565b3480156104df57600080fd5b506102e7610e58565b3480156104f457600080fd5b506011546102b79060ff1681565b34801561050e57600080fd5b5061030f61051d36600461246f565b610ecc565b34801561052e57600080fd5b506102e7610edc565b34801561054357600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161028e565b34801561057557600080fd5b5061055161058436600461246f565b610f42565b34801561059557600080fd5b506102e76105a43660046123f9565b610f62565b3480156105b557600080fd5b506102e76105c4366004612501565b610f96565b3480156105d557600080fd5b50610281611008565b3480156105ea57600080fd5b506102b76105f9366004612318565b611017565b34801561060a57600080fd5b506102e761061936600461251c565b6110b0565b34801561062a57600080fd5b506102b7610639366004612318565b6111fc565b34801561064a57600080fd5b506102e761065936600461246f565b611209565b34801561066a57600080fd5b506105517f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e57600080fd5b506011546102b790610100900460ff1681565b3480156106bd57600080fd5b5061030f60135481565b3480156106d357600080fd5b5061030f6106e2366004612555565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561071957600080fd5b5061030f61271081565b34801561072f57600080fd5b506105517f000000000000000000000000000000000000000000000000000000000000000081565b34801561076357600080fd5b5061030f600081565b34801561077857600080fd5b506102e7610787366004612488565b611274565b34801561079857600080fd5b5061030f6107a736600461246f565b61135f565b3480156107b857600080fd5b506102e76107c736600461246f565b61136f565b3480156107d857600080fd5b506102b76107e7366004612488565b600f6020526000908152604090205460ff1681565b60606003805461080b9061258e565b80601f01602080910402602001604051908101604052809291908181526020018280546108379061258e565b80156108845780601f1061085957610100808354040283529160200191610884565b820191906000526020600020905b81548152906001019060200180831161086757829003601f168201915b5050505050905090565b600061089b338484611438565b5060015b92915050565b6005546001600160a01b031633146108d85760405162461bcd60e51b81526004016108cf906125c8565b60405180910390fd5b7fbf0afdfa1cb21873aab858ebc02e5db135c9f8e64589cd0d1a668b4d66993ca9600c8260405161090a9291906125fd565b60405180910390a161091f600c8260026121c9565b5050565b6005546001600160a01b0316331461094d5760405162461bcd60e51b81526004016108cf906125c8565b6011805461ff00191661010017905543601355604051600181527fec78e36312d308764a43b9714c18f6444e2604b277d18be4ea329e0644dbe9b99060200160405180910390a1565b6005546001600160a01b031633146109c05760405162461bcd60e51b81526004016108cf906125c8565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f9081172b1302ac3df81f8da318d2d60362a834f73c0a1b69d14cb14414fbb9fc910160405180910390a15050565b6000610a3084848461155c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ab55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108cf565b610ac28533858403611438565b506001949350505050565b60088160028110610add57600080fd5b0154905081565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161089b918590610b1b908690612681565b611438565b60165460ff16610b3257610b3261185c565b565b6005546001600160a01b03163314610b5e5760405162461bcd60e51b81526004016108cf906125c8565b6016805461ff001916610100179055610b773082611c14565b610ba2307f000000000000000000000000000000000000000000000000000000000000000083611438565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719343084600080610be96005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610c51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c769190612694565b50506016805461ff00191690555050565b6005546001600160a01b03163314610cb15760405162461bcd60e51b81526004016108cf906125c8565b6020810151815161271091610cc591612681565b1115610d285760405162461bcd60e51b815260206004820152602c60248201527f73756d285f6275795461786573292063616e6e6f74206578636565642042505360448201526b2fa222a727a6a4a720aa27a960a11b60648201526084016108cf565b7ff030bb719ac1227860b29dae4e2aead664a7eb21b5d574d8eb10302e435a57cb600682604051610d5a9291906126d8565b60405180910390a161091f6006826002612221565b6005546001600160a01b03163314610d995760405162461bcd60e51b81526004016108cf906125c8565b6020810151815161271091610dad91612681565b1115610e115760405162461bcd60e51b815260206004820152602d60248201527f73756d285f73656c6c5461786573292063616e6e6f742065786365656420425060448201526c29afa222a727a6a4a720aa27a960991b60648201526084016108cf565b7f4e5aa6a1d8a2baf47d4c781f8fa278df4f48fb465fde488841b40aee0868d9f2600882604051610e439291906126d8565b60405180910390a161091f6008826002612221565b6005546001600160a01b03163314610e825760405162461bcd60e51b81526004016108cf906125c8565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b60068160028110610add57600080fd5b6005546001600160a01b03163314610f065760405162461bcd60e51b81526004016108cf906125c8565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610f3f573d6000803e3d6000fd5b50565b600c8160028110610f5257600080fd5b01546001600160a01b0316905081565b6005546001600160a01b03163314610f8c5760405162461bcd60e51b81526004016108cf906125c8565b61091f8282611cda565b6005546001600160a01b03163314610fc05760405162461bcd60e51b81526004016108cf906125c8565b6011805460ff19168215159081179091556040519081527f927009a164f58be5665a2121b2564ae19a66046fb36a397d3fca78f72ba04c3d906020015b60405180910390a150565b60606004805461080b9061258e565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110995760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108cf565b6110a63385858403611438565b5060019392505050565b6005546001600160a01b031633146110da5760405162461bcd60e51b81526004016108cf906125c8565b600283106111175760405162461bcd60e51b815260206004820152600a6024820152692fb4b73232bc1027a7a160b11b60448201526064016108cf565b600a836002811061112a5761112a6126c2565b015482111561118a5760405162461bcd60e51b815260206004820152602660248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746f6044820152650e8c2d8a8c2f60d31b60648201526084016108cf565b611195308284611d62565b60408051848152602081018490527f13ac772a78d03c80813b3c9c28d72a72d3b31e5ee74e277a88ac0c322a6bfc8f910160405180910390a181600a84600281106111e2576111e26126c2565b0160008282546111f2919061272a565b9091555050505050565b600061089b33848461155c565b6005546001600160a01b031633146112335760405162461bcd60e51b81526004016108cf906125c8565b60105460408051918252602082018390527f15426420a06dcf9391d9e4b7557f5cfaba5be0d7bf857b641e78ec375a343425910160405180910390a1601055565b6005546001600160a01b0316331461129e5760405162461bcd60e51b81526004016108cf906125c8565b6001600160a01b0381166113035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108cf565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a8160028110610add57600080fd5b6005546001600160a01b031633146113995760405162461bcd60e51b81526004016108cf906125c8565b6103e860145460056113ab919061273d565b6113b59190612754565b81116114035760405162461bcd60e51b815260206004820152601f60248201527f6d6178206275792073686f756c64206265206d6f7265207468616e202e35250060448201526064016108cf565b60128190556040518181527f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba53490602001610ffd565b6001600160a01b03831661149a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108cf565b6001600160a01b0382166114fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108cf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000908152600f602052604090205460ff16156115c55760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c6973746564000000000000000060448201526064016108cf565b6001600160a01b0383166000908152600e602052604090205460ff168061160457506001600160a01b0382166000908152600e602052604090205460ff165b1561161d5742601855611618838383611d62565b505050565b6116278383611f09565b60165460ff1615801561166c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b801561167a575060115460ff165b156116875761168761185c565b8061169061224f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036117a357601154610100900460ff1661171c5760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108cf565b60125483111561176e5760405162461bcd60e51b815260206004820152601960248201527f42757920616d6f756e742065786365656473206d61784275790000000000000060448201526064016108cf565b600060135461177d9190612681565b431161178e5761178e846001611cda565b611799836001612009565b9092509050611840565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03160361184057601154610100900460ff1661182f5760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108cf565b61183a836000612009565b90925090505b61184b858584611d62565b61185585826120df565b5050505050565b6016805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061189e5761189e6126c2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561191c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119409190612776565b81600181518110611953576119536126c2565b6001600160a01b039290921660209283029190910190910152600b54600a5460009161197e91612681565b90508060000361198f575050611c08565b3060009081526015602052604090205481908111156119ba5750306000908152601560205260409020545b6119e5307f000000000000000000000000000000000000000000000000000000000000000083611438565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611a3a908490600090889030904290600401612793565b600060405180830381600087803b158015611a5457600080fd5b505af1158015611a68573d6000803e3d6000fd5b5050600a54479250600091508490611a80908461273d565b611a8a9190612754565b9050600084600a60010154611a9f908561273d565b611aa99190612754565b6040805180820190915260008082526020820152909150611ace90600a90600261226d565b508115611b6857600c546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611b22576040519150601f19603f3d011682016040523d82523d6000602084013e611b27565b606091505b5050905080611b665760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108cf565b505b8015611c0157600d546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5050905080611bff5760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108cf565b505b5050505050505b6016805460ff19169055565b6b3077b58d5d3783919800000081601454611c2f9190612681565b1115611c735760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b60448201526064016108cf565b8060146000828254611c859190612681565b90915550611c9590508282612185565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166000818152600f602090815260409182902054825193845260ff1615159083015282151582820152517f248358295a71c50a9351204f4da6e13409c2887fde3625358fbb80b9743e433b9181900360600190a16001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6001600160a01b038316611db85760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f2061646472657373000060448201526064016108cf565b6001600160a01b038216611e0e5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f20616464726573730000000060448201526064016108cf565b6001600160a01b038316600090815260156020908152604080832054600e9092529091205460ff1680611e415750818110155b611e8d5760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016108cf565b6001600160a01b038416600090815260156020526040902080548390039055611eb68383612185565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611efb91815260200190565b60405180910390a350505050565b6001600160a01b0382166000908152600e602052604090205460ff16158015611f4b57506001600160a01b0381166000908152600e602052604090205460ff16155b1561091f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611fd2576001600160a01b03811660009081526017602052604090208054158015611fc657506001600160a01b038216600090815260156020526040902054155b15611618574290555050565b6001600160a01b03821660009081526017602052604090206018548154611ff9919061272a565b6002820155426001909101555050565b600061201361224f565b821561206c576040805180820190915280612710600660000154612037908861273d565b6120419190612754565b8152602001612710600660010154612059908861273d565b6120639190612754565b905290506120bb565b604080518082019091528061271060086000015461208a908861273d565b6120949190612754565b81526020016127106008600101546120ac908861273d565b6120b69190612754565b905290505b602081015181516120cc908661272a565b6120d6919061272a565b91509250929050565b6001600160a01b0382166121355760405162461bcd60e51b815260206004820152601e60248201527f7461786174696f6e2066726f6d20746865207a65726f2061646472657373000060448201526064016108cf565b6020810151815160009161214891612681565b9050612155833083611d62565b8151600a8054600090612169908490612681565b90915550506020820151600b80546000906111f2908490612681565b6001600160a01b0382166000908152601560205260409020546121a9908290612681565b6001600160a01b0390921660009081526015602052604090209190915550565b8260028101928215612211579160200282015b8281111561221157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906121dc565b5061221d9291506122a0565b5090565b8260028101928215612211579160200282015b82811115612211578251825591602001919060010190612234565b60405180604001604052806002906020820280368337509192915050565b8260028101928215612211579160200282015b82811115612211578251829060ff16905591602001919060010190612280565b5b8082111561221d57600081556001016122a1565b600060208083528351808285015260005b818110156122e2578581018301518582016040015282016122c6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f3f57600080fd5b6000806040838503121561232b57600080fd5b823561233681612303565b946020939093013593505050565b6040805190810167ffffffffffffffff8111828210171561237557634e487b7160e01b600052604160045260246000fd5b60405290565b60006040828403121561238d57600080fd5b82601f83011261239c57600080fd5b6123a4612344565b8060408401858111156123b657600080fd5b845b818110156123d95780356123cb81612303565b8452602093840193016123b8565b509095945050505050565b803580151581146123f457600080fd5b919050565b6000806040838503121561240c57600080fd5b823561241781612303565b9150612425602084016123e4565b90509250929050565b60008060006060848603121561244357600080fd5b833561244e81612303565b9250602084013561245e81612303565b929592945050506040919091013590565b60006020828403121561248157600080fd5b5035919050565b60006020828403121561249a57600080fd5b81356124a581612303565b9392505050565b6000604082840312156124be57600080fd5b82601f8301126124cd57600080fd5b6124d5612344565b8060408401858111156124e757600080fd5b845b818110156123d95780358452602093840193016124e9565b60006020828403121561251357600080fd5b6124a5826123e4565b60008060006060848603121561253157600080fd5b8335925060208401359150604084013561254a81612303565b809150509250925092565b6000806040838503121561256857600080fd5b823561257381612303565b9150602083013561258381612303565b809150509250929050565b600181811c908216806125a257607f821691505b6020821081036125c257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60808101818460005b600281101561262e5781546001600160a01b0316835260209092019160019182019101612606565b505050604082018360005b60028110156126615781516001600160a01b0316835260209283019290910190600101612639565b5050509392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561089f5761089f61266b565b6000806000606084860312156126a957600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60808101818460005b60028110156127005781548352602090920191600191820191016126e1565b505050604082018360005b600281101561266157815183526020928301929091019060010161270b565b8181038181111561089f5761089f61266b565b808202811582820484141761089f5761089f61266b565b60008261277157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561278857600080fd5b81516124a581612303565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127e35784516001600160a01b0316835293830193918301916001016127be565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205b69b250dcec79595a431f8ebdf88b9064f294194b9842cae189f43815beffea64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063821f658011610144578063b51449bb116100b6578063edae876f1161007a578063edae876f14610723578063f016d83b14610757578063f2fde38b1461076c578063f50a243b1461078c578063f53bc835146107ac578063f9f92be4146107cc57600080fd5b8063b51449bb1461065e578063bbc0c74214610692578063cd51e6d4146106b1578063dd62ed3e146106c7578063e1a452181461070d57600080fd5b806393818cfa1161010857806393818cfa146105a957806395d89b41146105c9578063a457c2d7146105de578063a894185d146105fe578063a9059cbb1461061e578063b0ac15711461063e57600080fd5b8063821f658014610502578063853828b6146105225780638da5cb5b14610537578063912c048c146105695780639155e0831461058957600080fd5b806339509351116101dd5780635b78f35f116101a15780635b78f35f1461045157806364071d9f1461046757806370a082311461048757806370db69d6146104bd578063715018a6146104d357806377004851146104e857600080fd5b806339509351146103b957806339b622d3146103d95780633e9ffbea1461040957806351c6590a1461041e57806352f892fa1461043157600080fd5b806319c2c40d1161022457806319c2c40d1461031d57806323b872dd1461033d5780632c8dc1471461035d578063313ce5671461037d57806332cb6b0c1461039957600080fd5b806306fdde031461026c578063095ea7b31461029757806309d2c46a146102c757806313554854146102e957806318160ddd146102fe57600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107fc565b60405161028e91906122b5565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612318565b61088e565b604051901515815260200161028e565b3480156102d357600080fd5b506102e76102e236600461237b565b6108a5565b005b3480156102f557600080fd5b506102e7610923565b34801561030a57600080fd5b506014545b60405190815260200161028e565b34801561032957600080fd5b506102e76103383660046123f9565b610996565b34801561034957600080fd5b506102b761035836600461242e565b610a23565b34801561036957600080fd5b5061030f61037836600461246f565b610acd565b34801561038957600080fd5b506040516012815260200161028e565b3480156103a557600080fd5b5061030f6b3077b58d5d3783919800000081565b3480156103c557600080fd5b506102b76103d4366004612318565b610ae4565b3480156103e557600080fd5b506102b76103f4366004612488565b600e6020526000908152604090205460ff1681565b34801561041557600080fd5b506102e7610b20565b6102e761042c36600461246f565b610b34565b34801561043d57600080fd5b506102e761044c3660046124ac565b610c87565b34801561045d57600080fd5b5061030f60105481565b34801561047357600080fd5b506102e76104823660046124ac565b610d6f565b34801561049357600080fd5b5061030f6104a2366004612488565b6001600160a01b031660009081526015602052604090205490565b3480156104c957600080fd5b5061030f60125481565b3480156104df57600080fd5b506102e7610e58565b3480156104f457600080fd5b506011546102b79060ff1681565b34801561050e57600080fd5b5061030f61051d36600461246f565b610ecc565b34801561052e57600080fd5b506102e7610edc565b34801561054357600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161028e565b34801561057557600080fd5b5061055161058436600461246f565b610f42565b34801561059557600080fd5b506102e76105a43660046123f9565b610f62565b3480156105b557600080fd5b506102e76105c4366004612501565b610f96565b3480156105d557600080fd5b50610281611008565b3480156105ea57600080fd5b506102b76105f9366004612318565b611017565b34801561060a57600080fd5b506102e761061936600461251c565b6110b0565b34801561062a57600080fd5b506102b7610639366004612318565b6111fc565b34801561064a57600080fd5b506102e761065936600461246f565b611209565b34801561066a57600080fd5b506105517f000000000000000000000000fe924307f409a4c2fbafc5a0941be9c9e9fa8ade81565b34801561069e57600080fd5b506011546102b790610100900460ff1681565b3480156106bd57600080fd5b5061030f60135481565b3480156106d357600080fd5b5061030f6106e2366004612555565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561071957600080fd5b5061030f61271081565b34801561072f57600080fd5b506105517f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561076357600080fd5b5061030f600081565b34801561077857600080fd5b506102e7610787366004612488565b611274565b34801561079857600080fd5b5061030f6107a736600461246f565b61135f565b3480156107b857600080fd5b506102e76107c736600461246f565b61136f565b3480156107d857600080fd5b506102b76107e7366004612488565b600f6020526000908152604090205460ff1681565b60606003805461080b9061258e565b80601f01602080910402602001604051908101604052809291908181526020018280546108379061258e565b80156108845780601f1061085957610100808354040283529160200191610884565b820191906000526020600020905b81548152906001019060200180831161086757829003601f168201915b5050505050905090565b600061089b338484611438565b5060015b92915050565b6005546001600160a01b031633146108d85760405162461bcd60e51b81526004016108cf906125c8565b60405180910390fd5b7fbf0afdfa1cb21873aab858ebc02e5db135c9f8e64589cd0d1a668b4d66993ca9600c8260405161090a9291906125fd565b60405180910390a161091f600c8260026121c9565b5050565b6005546001600160a01b0316331461094d5760405162461bcd60e51b81526004016108cf906125c8565b6011805461ff00191661010017905543601355604051600181527fec78e36312d308764a43b9714c18f6444e2604b277d18be4ea329e0644dbe9b99060200160405180910390a1565b6005546001600160a01b031633146109c05760405162461bcd60e51b81526004016108cf906125c8565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f9081172b1302ac3df81f8da318d2d60362a834f73c0a1b69d14cb14414fbb9fc910160405180910390a15050565b6000610a3084848461155c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ab55760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108cf565b610ac28533858403611438565b506001949350505050565b60088160028110610add57600080fd5b0154905081565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161089b918590610b1b908690612681565b611438565b60165460ff16610b3257610b3261185c565b565b6005546001600160a01b03163314610b5e5760405162461bcd60e51b81526004016108cf906125c8565b6016805461ff001916610100179055610b773082611c14565b610ba2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611438565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719343084600080610be96005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610c51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c769190612694565b50506016805461ff00191690555050565b6005546001600160a01b03163314610cb15760405162461bcd60e51b81526004016108cf906125c8565b6020810151815161271091610cc591612681565b1115610d285760405162461bcd60e51b815260206004820152602c60248201527f73756d285f6275795461786573292063616e6e6f74206578636565642042505360448201526b2fa222a727a6a4a720aa27a960a11b60648201526084016108cf565b7ff030bb719ac1227860b29dae4e2aead664a7eb21b5d574d8eb10302e435a57cb600682604051610d5a9291906126d8565b60405180910390a161091f6006826002612221565b6005546001600160a01b03163314610d995760405162461bcd60e51b81526004016108cf906125c8565b6020810151815161271091610dad91612681565b1115610e115760405162461bcd60e51b815260206004820152602d60248201527f73756d285f73656c6c5461786573292063616e6e6f742065786365656420425060448201526c29afa222a727a6a4a720aa27a960991b60648201526084016108cf565b7f4e5aa6a1d8a2baf47d4c781f8fa278df4f48fb465fde488841b40aee0868d9f2600882604051610e439291906126d8565b60405180910390a161091f6008826002612221565b6005546001600160a01b03163314610e825760405162461bcd60e51b81526004016108cf906125c8565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b60068160028110610add57600080fd5b6005546001600160a01b03163314610f065760405162461bcd60e51b81526004016108cf906125c8565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610f3f573d6000803e3d6000fd5b50565b600c8160028110610f5257600080fd5b01546001600160a01b0316905081565b6005546001600160a01b03163314610f8c5760405162461bcd60e51b81526004016108cf906125c8565b61091f8282611cda565b6005546001600160a01b03163314610fc05760405162461bcd60e51b81526004016108cf906125c8565b6011805460ff19168215159081179091556040519081527f927009a164f58be5665a2121b2564ae19a66046fb36a397d3fca78f72ba04c3d906020015b60405180910390a150565b60606004805461080b9061258e565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110995760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108cf565b6110a63385858403611438565b5060019392505050565b6005546001600160a01b031633146110da5760405162461bcd60e51b81526004016108cf906125c8565b600283106111175760405162461bcd60e51b815260206004820152600a6024820152692fb4b73232bc1027a7a160b11b60448201526064016108cf565b600a836002811061112a5761112a6126c2565b015482111561118a5760405162461bcd60e51b815260206004820152602660248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746f6044820152650e8c2d8a8c2f60d31b60648201526084016108cf565b611195308284611d62565b60408051848152602081018490527f13ac772a78d03c80813b3c9c28d72a72d3b31e5ee74e277a88ac0c322a6bfc8f910160405180910390a181600a84600281106111e2576111e26126c2565b0160008282546111f2919061272a565b9091555050505050565b600061089b33848461155c565b6005546001600160a01b031633146112335760405162461bcd60e51b81526004016108cf906125c8565b60105460408051918252602082018390527f15426420a06dcf9391d9e4b7557f5cfaba5be0d7bf857b641e78ec375a343425910160405180910390a1601055565b6005546001600160a01b0316331461129e5760405162461bcd60e51b81526004016108cf906125c8565b6001600160a01b0381166113035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108cf565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a8160028110610add57600080fd5b6005546001600160a01b031633146113995760405162461bcd60e51b81526004016108cf906125c8565b6103e860145460056113ab919061273d565b6113b59190612754565b81116114035760405162461bcd60e51b815260206004820152601f60248201527f6d6178206275792073686f756c64206265206d6f7265207468616e202e35250060448201526064016108cf565b60128190556040518181527f1003faaf440f4e10b9ef552a11d026be63390c8c7eac09549c045f8d700ba53490602001610ffd565b6001600160a01b03831661149a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108cf565b6001600160a01b0382166114fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108cf565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166000908152600f602052604090205460ff16156115c55760405162461bcd60e51b815260206004820152601860248201527f526563697069656e7420697320626c61636b6c6973746564000000000000000060448201526064016108cf565b6001600160a01b0383166000908152600e602052604090205460ff168061160457506001600160a01b0382166000908152600e602052604090205460ff165b1561161d5742601855611618838383611d62565b505050565b6116278383611f09565b60165460ff1615801561166c57507f000000000000000000000000fe924307f409a4c2fbafc5a0941be9c9e9fa8ade6001600160a01b0316836001600160a01b031614155b801561167a575060115460ff165b156116875761168761185c565b8061169061224f565b7f000000000000000000000000fe924307f409a4c2fbafc5a0941be9c9e9fa8ade6001600160a01b0316856001600160a01b0316036117a357601154610100900460ff1661171c5760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108cf565b60125483111561176e5760405162461bcd60e51b815260206004820152601960248201527f42757920616d6f756e742065786365656473206d61784275790000000000000060448201526064016108cf565b600060135461177d9190612681565b431161178e5761178e846001611cda565b611799836001612009565b9092509050611840565b7f000000000000000000000000fe924307f409a4c2fbafc5a0941be9c9e9fa8ade6001600160a01b0316846001600160a01b03160361184057601154610100900460ff1661182f5760405162461bcd60e51b815260206004820152601960248201527854726164696e67206973206e6f74207965742061637469766560381b60448201526064016108cf565b61183a836000612009565b90925090505b61184b858584611d62565b61185585826120df565b5050505050565b6016805460ff19166001179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061189e5761189e6126c2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561191c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119409190612776565b81600181518110611953576119536126c2565b6001600160a01b039290921660209283029190910190910152600b54600a5460009161197e91612681565b90508060000361198f575050611c08565b3060009081526015602052604090205481908111156119ba5750306000908152601560205260409020545b6119e5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611438565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611a3a908490600090889030904290600401612793565b600060405180830381600087803b158015611a5457600080fd5b505af1158015611a68573d6000803e3d6000fd5b5050600a54479250600091508490611a80908461273d565b611a8a9190612754565b9050600084600a60010154611a9f908561273d565b611aa99190612754565b6040805180820190915260008082526020820152909150611ace90600a90600261226d565b508115611b6857600c546040516000916001600160a01b03169084908381818185875af1925050503d8060008114611b22576040519150601f19603f3d011682016040523d82523d6000602084013e611b27565b606091505b5050905080611b665760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108cf565b505b8015611c0157600d546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5050905080611bff5760405162461bcd60e51b815260206004820152600b60248201526a06661696c656420737761760ac1b60448201526064016108cf565b505b5050505050505b6016805460ff19169055565b6b3077b58d5d3783919800000081601454611c2f9190612681565b1115611c735760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b60448201526064016108cf565b8060146000828254611c859190612681565b90915550611c9590508282612185565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166000818152600f602090815260409182902054825193845260ff1615159083015282151582820152517f248358295a71c50a9351204f4da6e13409c2887fde3625358fbb80b9743e433b9181900360600190a16001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6001600160a01b038316611db85760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f2061646472657373000060448201526064016108cf565b6001600160a01b038216611e0e5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f20616464726573730000000060448201526064016108cf565b6001600160a01b038316600090815260156020908152604080832054600e9092529091205460ff1680611e415750818110155b611e8d5760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064016108cf565b6001600160a01b038416600090815260156020526040902080548390039055611eb68383612185565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611efb91815260200190565b60405180910390a350505050565b6001600160a01b0382166000908152600e602052604090205460ff16158015611f4b57506001600160a01b0381166000908152600e602052604090205460ff16155b1561091f577f000000000000000000000000fe924307f409a4c2fbafc5a0941be9c9e9fa8ade6001600160a01b0316826001600160a01b031603611fd2576001600160a01b03811660009081526017602052604090208054158015611fc657506001600160a01b038216600090815260156020526040902054155b15611618574290555050565b6001600160a01b03821660009081526017602052604090206018548154611ff9919061272a565b6002820155426001909101555050565b600061201361224f565b821561206c576040805180820190915280612710600660000154612037908861273d565b6120419190612754565b8152602001612710600660010154612059908861273d565b6120639190612754565b905290506120bb565b604080518082019091528061271060086000015461208a908861273d565b6120949190612754565b81526020016127106008600101546120ac908861273d565b6120b69190612754565b905290505b602081015181516120cc908661272a565b6120d6919061272a565b91509250929050565b6001600160a01b0382166121355760405162461bcd60e51b815260206004820152601e60248201527f7461786174696f6e2066726f6d20746865207a65726f2061646472657373000060448201526064016108cf565b6020810151815160009161214891612681565b9050612155833083611d62565b8151600a8054600090612169908490612681565b90915550506020820151600b80546000906111f2908490612681565b6001600160a01b0382166000908152601560205260409020546121a9908290612681565b6001600160a01b0390921660009081526015602052604090209190915550565b8260028101928215612211579160200282015b8281111561221157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906121dc565b5061221d9291506122a0565b5090565b8260028101928215612211579160200282015b82811115612211578251825591602001919060010190612234565b60405180604001604052806002906020820280368337509192915050565b8260028101928215612211579160200282015b82811115612211578251829060ff16905591602001919060010190612280565b5b8082111561221d57600081556001016122a1565b600060208083528351808285015260005b818110156122e2578581018301518582016040015282016122c6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610f3f57600080fd5b6000806040838503121561232b57600080fd5b823561233681612303565b946020939093013593505050565b6040805190810167ffffffffffffffff8111828210171561237557634e487b7160e01b600052604160045260246000fd5b60405290565b60006040828403121561238d57600080fd5b82601f83011261239c57600080fd5b6123a4612344565b8060408401858111156123b657600080fd5b845b818110156123d95780356123cb81612303565b8452602093840193016123b8565b509095945050505050565b803580151581146123f457600080fd5b919050565b6000806040838503121561240c57600080fd5b823561241781612303565b9150612425602084016123e4565b90509250929050565b60008060006060848603121561244357600080fd5b833561244e81612303565b9250602084013561245e81612303565b929592945050506040919091013590565b60006020828403121561248157600080fd5b5035919050565b60006020828403121561249a57600080fd5b81356124a581612303565b9392505050565b6000604082840312156124be57600080fd5b82601f8301126124cd57600080fd5b6124d5612344565b8060408401858111156124e757600080fd5b845b818110156123d95780358452602093840193016124e9565b60006020828403121561251357600080fd5b6124a5826123e4565b60008060006060848603121561253157600080fd5b8335925060208401359150604084013561254a81612303565b809150509250925092565b6000806040838503121561256857600080fd5b823561257381612303565b9150602083013561258381612303565b809150509250929050565b600181811c908216806125a257607f821691505b6020821081036125c257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60808101818460005b600281101561262e5781546001600160a01b0316835260209092019160019182019101612606565b505050604082018360005b60028110156126615781516001600160a01b0316835260209283019290910190600101612639565b5050509392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561089f5761089f61266b565b6000806000606084860312156126a957600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b60808101818460005b60028110156127005781548352602090920191600191820191016126e1565b505050604082018360005b600281101561266157815183526020928301929091019060010161270b565b8181038181111561089f5761089f61266b565b808202811582820484141761089f5761089f61266b565b60008261277157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561278857600080fd5b81516124a581612303565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127e35784516001600160a01b0316835293830193918301916001016127be565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205b69b250dcec79595a431f8ebdf88b9064f294194b9842cae189f43815beffea64736f6c63430008130033

Deployed Bytecode Sourcemap

16532:11879:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3593:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4507:169;;;;;;;;;;-1:-1:-1;4507:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;4507:169:0;1023:187:1;20735:205:0;;;;;;;;;;-1:-1:-1;20735:205:0;;;;;:::i;:::-;;:::i;:::-;;21724:166;;;;;;;;;;;;;:::i;27995:100::-;;;;;;;;;;-1:-1:-1;28075:12:0;;27995:100;;;2520:25:1;;;2508:2;2493:18;27995:100:0;2374:177:1;21898:217:0;;;;;;;;;;-1:-1:-1;21898:217:0;;;;;:::i;:::-;;:::i;4684:492::-;;;;;;;;;;-1:-1:-1;4684:492:0;;;;;:::i;:::-;;:::i;16926:36::-;;;;;;;;;;-1:-1:-1;16926:36:0;;;;;:::i;:::-;;:::i;3813:93::-;;;;;;;;;;-1:-1:-1;3813:93:0;;3896:2;3829:36:1;;3817:2;3802:18;3813:93:0;3687:184:1;16576:57:0;;;;;;;;;;;;16613:20;16576:57;;5184:215;;;;;;;;;;-1:-1:-1;5184:215:0;;;;;:::i;:::-;;:::i;17047:43::-;;;;;;;;;;-1:-1:-1;17047:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25571:94;;;;;;;;;;;;;:::i;20948:424::-;;;;;;:::i;:::-;;:::i;19386:311::-;;;;;;;;;;-1:-1:-1;19386:311:0;;;;;:::i;:::-;;:::i;17147:34::-;;;;;;;;;;;;;;;;19705:321;;;;;;;;;;-1:-1:-1;19705:321:0;;;;;:::i;:::-;;:::i;22492:177::-;;;;;;;;;;-1:-1:-1;22492:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;22643:18:0;22611:7;22643:18;;;:9;:18;;;;;;;22492:177;17262:44;;;;;;;;;;;;;;;;8160:150;;;;;;;;;;;;;:::i;17188:27::-;;;;;;;;;;-1:-1:-1;17188:27:0;;;;;;;;16884:35;;;;;;;;;;-1:-1:-1;16884:35:0;;;;;:::i;:::-;;:::i;25673:109::-;;;;;;;;;;;;;:::i;7946:79::-;;;;;;;;;;-1:-1:-1;8011:6:0;;-1:-1:-1;;;;;8011:6:0;7946:79;;;-1:-1:-1;;;;;4888:32:1;;;4870:51;;4858:2;4843:18;7946:79:0;4724:203:1;17004:36:0;;;;;;;;;;-1:-1:-1;17004:36:0;;;;;:::i;:::-;;:::i;21380:160::-;;;;;;;;;;-1:-1:-1;21380:160:0;;;;;:::i;:::-;;:::i;22123:137::-;;;;;;;;;;-1:-1:-1;22123:137:0;;;;;:::i;:::-;;:::i;3701:104::-;;;;;;;;;;;;;:::i;5407:413::-;;;;;;;;;;-1:-1:-1;5407:413:0;;;;;:::i;:::-;;:::i;20241:486::-;;;;;;;;;;-1:-1:-1;20241:486:0;;;;;:::i;:::-;;:::i;4165:175::-;;;;;;;;;;-1:-1:-1;4165:175:0;;;;;:::i;:::-;;:::i;20034:199::-;;;;;;;;;;-1:-1:-1;20034:199:0;;;;;:::i;:::-;;:::i;16845:30::-;;;;;;;;;;;;;;;17222:33;;;;;;;;;;-1:-1:-1;17222:33:0;;;;;;;;;;;17313:27;;;;;;;;;;;;;;;;4348:151;;;;;;;;;;-1:-1:-1;4348:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4464:18:0;;;4437:7;4464:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4348:151;16640:48;;;;;;;;;;;;16682:6;16640:48;;16795:43;;;;;;;;;;;;;;;16695:40;;;;;;;;;;;;16734:1;16695:40;;8318:244;;;;;;;;;;-1:-1:-1;8318:244:0;;;;;:::i;:::-;;:::i;16969:28::-;;;;;;;;;;-1:-1:-1;16969:28:0;;;;;:::i;:::-;;:::i;22268:216::-;;;;;;;;;;-1:-1:-1;22268:216:0;;;;;:::i;:::-;;:::i;17097:41::-;;;;;;;;;;-1:-1:-1;17097:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3593:100;3647:13;3680:5;3673:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3593:100;:::o;4507:169::-;4590:4;4607:39;1973:10;4630:7;4639:6;4607:8;:39::i;:::-;-1:-1:-1;4664:4:0;4507:169;;;;;:::o;20735:205::-;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;;;;;;;;;20855:42:::1;20873:10;20885:11;20855:42;;;;;;;:::i;:::-;;;;;;;;20908:24;:10;20921:11:::0;20908:24:::1;;:::i;:::-;;20735:205:::0;:::o;21724:166::-;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;21782:13:::1;:20:::0;;-1:-1:-1;;21782:20:0::1;;;::::0;;21828:12:::1;21813;:27:::0;21856:26:::1;::::0;-1:-1:-1;1163:41:1;;21856:26:0::1;::::0;1151:2:1;1136:18;21856:26:0::1;;;;;;;21724:166::o:0;21898:217::-;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22012:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;;;;:36;;-1:-1:-1;;22012:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22064:43;;8236:51:1;;;8303:18;;;8296:50;22064:43:0::1;::::0;8209:18:1;22064:43:0::1;;;;;;;21898:217:::0;;:::o;4684:492::-;4824:4;4841:36;4851:6;4859:9;4870:6;4841:9;:36::i;:::-;-1:-1:-1;;;;;4917:19:0;;4890:24;4917:19;;;:11;:19;;;;;;;;1973:10;4917:33;;;;;;;;4969:26;;;;4961:79;;;;-1:-1:-1;;;4961:79:0;;8559:2:1;4961:79:0;;;8541:21:1;8598:2;8578:18;;;8571:30;8637:34;8617:18;;;8610:62;-1:-1:-1;;;8688:18:1;;;8681:38;8736:19;;4961:79:0;8357:404:1;4961:79:0;5076:57;5085:6;1973:10;5126:6;5107:16;:25;5076:8;:57::i;:::-;-1:-1:-1;5164:4:0;;4684:492;-1:-1:-1;;;;4684:492:0:o;16926:36::-;;;;;;;;;;;;;;;-1:-1:-1;16926:36:0;:::o;5184:215::-;1973:10;5272:4;5321:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5321:34:0;;;;;;;;;;5272:4;;5289:80;;5312:7;;5321:47;;5358:10;;5321:47;:::i;:::-;5289:8;:80::i;25571:94::-;25615:7;;;;25610:48;;25639:7;:5;:7::i;:::-;25571:94::o;20948:424::-;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;18561:15:::1;:22:::0;;-1:-1:-1;;18561:22:0::1;;;::::0;;21078:28:::2;21092:4;21099:6:::0;21078:5:::2;:28::i;:::-;21117:49;21134:4;21149:7;21159:6;21117:8;:49::i;:::-;21179:7;-1:-1:-1::0;;;;;21179:23:0::2;;21210:9;21243:4;21263:6;21284:1;21300::::0;21316:7:::2;8011:6:::0;;-1:-1:-1;;;;;8011:6:0;;7946:79;21316:7:::2;21179:185;::::0;::::2;::::0;;;-1:-1:-1;;;;;;21179:185:0;;;-1:-1:-1;;;;;9387:15:1;;;21179:185:0::2;::::0;::::2;9369:34:1::0;9419:18;;;9412:34;;;;9462:18;;;9455:34;;;;9505:18;;;9498:34;9569:15;;;9548:19;;;9541:44;21338:15:0::2;9601:19:1::0;;;9594:35;9303:19;;21179:185:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;18606:15:0::1;:23:::0;;-1:-1:-1;;18606:23:0::1;::::0;;-1:-1:-1;;20948:424:0:o;19386:311::-;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;19503:12:::1;::::0;::::1;::::0;19488;;16682:6:::1;::::0;19488:27:::1;::::0;::::1;:::i;:::-;:46;;19466:140;;;::::0;-1:-1:-1;;;19466:140:0;;10285:2:1;19466:140:0::1;::::0;::::1;10267:21:1::0;10324:2;10304:18;;;10297:30;10363:34;10343:18;;;10336:62;-1:-1:-1;;;10414:18:1;;;10407:42;10466:19;;19466:140:0::1;10083:408:1::0;19466:140:0::1;19622:36;19638:8;19648:9;19622:36;;;;;;;:::i;:::-;;;;;;;;19669:20;:8;19680:9:::0;19669:20:::1;;:::i;19705:321::-:0;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;19825:13:::1;::::0;::::1;::::0;19809;;16682:6:::1;::::0;19809:29:::1;::::0;::::1;:::i;:::-;:48;;19787:143;;;::::0;-1:-1:-1;;;19787:143:0;;11579:2:1;19787:143:0::1;::::0;::::1;11561:21:1::0;11618:2;11598:18;;;11591:30;11657:34;11637:18;;;11630:62;-1:-1:-1;;;11708:18:1;;;11701:43;11761:19;;19787:143:0::1;11377:409:1::0;19787:143:0::1;19946:39;19963:9;19974:10;19946:39;;;;;;;:::i;:::-;;;;;;;;19996:22;:9;20008:10:::0;19996:22:::1;;:::i;8160:150::-:0;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;8253:6:::1;::::0;8232:40:::1;::::0;8269:1:::1;::::0;-1:-1:-1;;;;;8253:6:0::1;::::0;8232:40:::1;::::0;8269:1;;8232:40:::1;8283:6;:19:::0;;-1:-1:-1;;;;;;8283:19:0::1;::::0;;8160:150::o;16884:35::-;;;;;;;;;;;25673:109;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;8011:6;;25726:48:::1;::::0;-1:-1:-1;;;;;8011:6:0;;;;25752:21:::1;25726:48:::0;::::1;;;::::0;::::1;::::0;;;25752:21;8011:6;25726:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25673:109::o:0;17004:36::-;;;;;;;;;;;;;;-1:-1:-1;;;;;17004:36:0;;-1:-1:-1;17004:36:0;:::o;21380:160::-;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;21502:30:::1;21519:4;21525:6;21502:16;:30::i;22123:137::-:0;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;22190:8:::1;:20:::0;;-1:-1:-1;;22190:20:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22226:26:::1;::::0;1163:41:1;;;22226:26:0::1;::::0;1151:2:1;1136:18;22226:26:0::1;;;;;;;;22123:137:::0;:::o;3701:104::-;3757:13;3790:7;3783:14;;;;;:::i;5407:413::-;1973:10;5500:4;5544:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5544:34:0;;;;;;;;;;5597:35;;;;5589:85;;;;-1:-1:-1;;;5589:85:0;;11993:2:1;5589:85:0;;;11975:21:1;12032:2;12012:18;;;12005:30;12071:34;12051:18;;;12044:62;-1:-1:-1;;;12122:18:1;;;12115:35;12167:19;;5589:85:0;11791:401:1;5589:85:0;5710:67;1973:10;5733:7;5761:15;5742:16;:34;5710:8;:67::i;:::-;-1:-1:-1;5808:4:0;;5407:413;-1:-1:-1;;;5407:413:0:o;20241:486::-;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;20415:17:::1;20406:6;:26;20383:64;;;::::0;-1:-1:-1;;;20383:64:0;;12399:2:1;20383:64:0::1;::::0;::::1;12381:21:1::0;12438:2;12418:18;;;12411:30;-1:-1:-1;;;12457:18:1;;;12450:40;12507:18;;20383:64:0::1;12197:334:1::0;20383:64:0::1;20491:10;20502:6;20491:18;;;;;;;:::i;:::-;;;20480:7;:29;;20458:117;;;::::0;-1:-1:-1;;;20458:117:0;;12738:2:1;20458:117:0::1;::::0;::::1;12720:21:1::0;12777:2;12757:18;;;12750:30;12816:34;12796:18;;;12789:62;-1:-1:-1;;;12867:18:1;;;12860:36;12913:19;;20458:117:0::1;12536:402:1::0;20458:117:0::1;20586:48;20607:4;20614:10;20626:7;20586:12;:48::i;:::-;20650:29;::::0;;13117:25:1;;;13173:2;13158:18;;13151:34;;;20650:29:0::1;::::0;13090:18:1;20650:29:0::1;;;;;;;20712:7;20690:10;20701:6;20690:18;;;;;;;:::i;:::-;;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;20241:486:0:o;4165:175::-;4251:4;4268:42;1973:10;4292:9;4303:6;4268:9;:42::i;20034:199::-;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;20146:15:::1;::::0;20123:57:::1;::::0;;13117:25:1;;;13173:2;13158:18;;13151:34;;;20123:57:0::1;::::0;13090:18:1;20123:57:0::1;;;;;;;20191:15;:34:::0;20034:199::o;8318:244::-;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8407:22:0;::::1;8399:73;;;::::0;-1:-1:-1;;;8399:73:0;;13531:2:1;8399:73:0::1;::::0;::::1;13513:21:1::0;13570:2;13550:18;;;13543:30;13609:34;13589:18;;;13582:62;-1:-1:-1;;;13660:18:1;;;13653:36;13706:19;;8399:73:0::1;13329:402:1::0;8399:73:0::1;8509:6;::::0;8488:38:::1;::::0;-1:-1:-1;;;;;8488:38:0;;::::1;::::0;8509:6:::1;::::0;8488:38:::1;::::0;8509:6:::1;::::0;8488:38:::1;8537:6;:17:::0;;-1:-1:-1;;;;;;8537:17:0::1;-1:-1:-1::0;;;;;8537:17:0;;;::::1;::::0;;;::::1;::::0;;8318:244::o;16969:28::-;;;;;;;;;;;22268:216;8073:6;;-1:-1:-1;;;;;8073:6:0;1973:10;8073:22;8065:67;;;;-1:-1:-1;;;8065:67:0;;;;;;;:::i;:::-;22371:4:::1;22352:12;;22367:1;22352:16;;;;:::i;:::-;:23;;;;:::i;:::-;22342:7;:33;22334:77;;;::::0;-1:-1:-1;;;22334:77:0;;14333:2:1;22334:77:0::1;::::0;::::1;14315:21:1::0;14372:2;14352:18;;;14345:30;14411:33;14391:18;;;14384:61;14462:18;;22334:77:0::1;14131:355:1::0;22334:77:0::1;22422:6;:16:::0;;;22454:22:::1;::::0;2520:25:1;;;22454:22:0::1;::::0;2508:2:1;2493:18;22454:22:0::1;2374:177:1::0;7237:380:0;-1:-1:-1;;;;;7373:19:0;;7365:68;;;;-1:-1:-1;;;7365:68:0;;14693:2:1;7365:68:0;;;14675:21:1;14732:2;14712:18;;;14705:30;14771:34;14751:18;;;14744:62;-1:-1:-1;;;14822:18:1;;;14815:34;14866:19;;7365:68:0;14491:400:1;7365:68:0;-1:-1:-1;;;;;7452:21:0;;7444:68;;;;-1:-1:-1;;;7444:68:0;;15098:2:1;7444:68:0;;;15080:21:1;15137:2;15117:18;;;15110:30;15176:34;15156:18;;;15149:62;-1:-1:-1;;;15227:18:1;;;15220:32;15269:19;;7444:68:0;14896:398:1;7444:68:0;-1:-1:-1;;;;;7525:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7577:32;;2520:25:1;;;7577:32:0;;2493:18:1;7577:32:0;;;;;;;7237:380;;;:::o;22994:1262::-;-1:-1:-1;;;;;23136:20:0;;;;;;:9;:20;;;;;;;;23135:21;23127:58;;;;-1:-1:-1;;;23127:58:0;;15501:2:1;23127:58:0;;;15483:21:1;15540:2;15520:18;;;15513:30;15579:26;15559:18;;;15552:54;15623:18;;23127:58:0;15299:348:1;23127:58:0;-1:-1:-1;;;;;23202:19:0;;;;;;:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;23225:22:0;;;;;;:11;:22;;;;;;;;23202:45;23198:185;;;23281:15;23264:14;:32;23311:39;23324:6;23332:9;23343:6;23311:12;:39::i;:::-;22994:1262;;;:::o;23198:185::-;23393:30;23405:6;23413:9;23393:11;:30::i;:::-;23453:7;;;;23452:8;:40;;;;;23487:5;-1:-1:-1;;;;;23477:15:0;:6;-1:-1:-1;;;;;23477:15:0;;;23452:40;:65;;;;-1:-1:-1;23509:8:0;;;;23452:65;23434:129;;;23544:7;:5;:7::i;:::-;23588:6;23605:23;;:::i;:::-;23653:5;-1:-1:-1;;;;;23643:15:0;:6;-1:-1:-1;;;;;23643:15:0;;23639:526;;23683:13;;;;;;;23675:51;;;;-1:-1:-1;;;23675:51:0;;15854:2:1;23675:51:0;;;15836:21:1;15893:2;15873:18;;;15866:30;-1:-1:-1;;;15912:18:1;;;15905:55;15977:18;;23675:51:0;15652:349:1;23675:51:0;23759:6;;23749;:16;;23741:54;;;;-1:-1:-1;;;23741:54:0;;16208:2:1;23741:54:0;;;16190:21:1;16247:2;16227:18;;;16220:30;16286:27;16266:18;;;16259:55;16331:18;;23741:54:0;16006:349:1;23741:54:0;16734:1;23830:12;;:27;;;;:::i;:::-;23814:12;:43;23810:117;;23878:33;23895:9;23906:4;23878:16;:33::i;:::-;23957:28;23972:6;23980:4;23957:14;:28::i;:::-;23941:44;;-1:-1:-1;23941:44:0;-1:-1:-1;23639:526:0;;;24020:5;-1:-1:-1;;;;;24007:18:0;:9;-1:-1:-1;;;;;24007:18:0;;24003:162;;24050:13;;;;;;;24042:51;;;;-1:-1:-1;;;24042:51:0;;15854:2:1;24042:51:0;;;15836:21:1;15893:2;15873:18;;;15866:30;-1:-1:-1;;;15912:18:1;;;15905:55;15977:18;;24042:51:0;15652:349:1;24042:51:0;24124:29;24139:6;24147:5;24124:14;:29::i;:::-;24108:45;;-1:-1:-1;24108:45:0;-1:-1:-1;24003:162:0;24175:37;24188:6;24196:9;24207:4;24175:12;:37::i;:::-;24223:25;24234:6;24242:5;24223:10;:25::i;:::-;23116:1140;;22994:1262;;;:::o;24264:1299::-;18458:7;:14;;-1:-1:-1;;18458:14:0;18468:4;18458:14;;;24334:16:::1;::::0;;24348:1:::1;24334:16:::0;;;;;::::1;::::0;;-1:-1:-1;;24334:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24334:16:0::1;24310:40;;24379:4;24361;24366:1;24361:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24361:23:0::1;;;-1:-1:-1::0;;;;;24361:23:0::1;;;::::0;::::1;24405:7;-1:-1:-1::0;;;;;24405:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24395:4;24400:1;24395:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24395:24:0;;;::::1;:7;::::0;;::::1;::::0;;;;;;;:24;24467:13;;:10:::1;24451:13:::0;24432:16:::1;::::0;24451:29:::1;::::0;::::1;:::i;:::-;24432:48;;24495:8;24507:1;24495:13:::0;24491:52:::1;;24525:7;;;;24491:52;24630:4;22611:7:::0;22643:18;;;:9;:18;;;;;;24575:8;;24598:11:::1;:38;24594:109;;;-1:-1:-1::0;24685:4:0::1;22611:7:::0;22643:18;;;:9;:18;;;;;;24594:109:::1;24713:54;24730:4;24745:7;24755:11;24713:8;:54::i;:::-;24778:216;::::0;-1:-1:-1;;;24778:216:0;;-1:-1:-1;;;;;24778:7:0::1;:58;::::0;::::1;::::0;:216:::1;::::0;24851:11;;24877:1:::1;::::0;24921:4;;24948::::1;::::0;24968:15:::1;::::0;24778:216:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;25108:10:0::1;:13:::0;25034:21:::1;::::0;-1:-1:-1;25005:26:0::1;::::0;-1:-1:-1;25125:8:0;;25087:34:::1;::::0;25034:21;25087:34:::1;:::i;:::-;25086:47;;;;:::i;:::-;25068:65:::0;-1:-1:-1;25144:15:0::1;25201:8:::0;25184:10:::1;25195:1;25184:13;::::0;25163:34:::1;::::0;:18;:34:::1;:::i;:::-;25162:47;;;;:::i;:::-;25220:19;::::0;;;;::::1;::::0;;;-1:-1:-1;25220:19:0;;;::::1;::::0;::::1;::::0;25144:65;;-1:-1:-1;25220:19:0::1;::::0;:10:::1;::::0;:19:::1;;:::i;:::-;-1:-1:-1::0;25256:11:0;;25252:147:::1;;25303:10;:13:::0;:38:::1;::::0;25285:12:::1;::::0;-1:-1:-1;;;;;25303:13:0::1;::::0;25329:7;;25285:12;25303:38;25285:12;25303:38;25329:7;25303:13;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25284:57;;;25364:7;25356:31;;;::::0;-1:-1:-1;;;25356:31:0;;18013:2:1;25356:31:0::1;::::0;::::1;17995:21:1::0;18052:2;18032:18;;;18025:30;-1:-1:-1;;;18071:18:1;;;18064:41;18122:18;;25356:31:0::1;17811:335:1::0;25356:31:0::1;25269:130;25252:147;25413:11:::0;;25409:147:::1;;25460:13:::0;;:38:::1;::::0;25442:12:::1;::::0;-1:-1:-1;;;;;25460:13:0::1;::::0;25486:7;;25442:12;25460:38;25442:12;25460:38;25486:7;25460:13;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25441:57;;;25521:7;25513:31;;;::::0;-1:-1:-1;;;25513:31:0;;18013:2:1;25513:31:0::1;::::0;::::1;17995:21:1::0;18052:2;18032:18;;;18025:30;-1:-1:-1;;;18071:18:1;;;18064:41;18122:18;;25513:31:0::1;17811:335:1::0;25513:31:0::1;25426:130;25409:147;24299:1264;;;;;;18483:1;18495:7:::0;:15;;-1:-1:-1;;18495:15:0;;;24264:1299::o;28103:268::-;16613:20;28194:6;28179:12;;:21;;;;:::i;:::-;:35;;28171:67;;;;-1:-1:-1;;;28171:67:0;;18353:2:1;28171:67:0;;;18335:21:1;18392:2;18372:18;;;18365:30;-1:-1:-1;;;18411:18:1;;;18404:49;18470:18;;28171:67:0;18151:343:1;28171:67:0;28265:6;28249:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;28282:28:0;;-1:-1:-1;28294:7:0;28303:6;28282:11;:28::i;:::-;28326:37;;2520:25:1;;;-1:-1:-1;;;;;28326:37:0;;;28343:1;;28326:37;;2508:2:1;2493:18;28326:37:0;;;;;;;28103:268;;:::o;21548:168::-;-1:-1:-1;;;;;21649:15:0;;;;;;:9;:15;;;;;;;;;;21626:47;;18689:51:1;;;21649:15:0;;18783:14:1;18776:22;18756:18;;;18749:50;18842:14;;18835:22;18815:18;;;18808:50;21626:47:0;;;;;;18677:2:1;21626:47:0;;;-1:-1:-1;;;;;21684:15:0;;;;;;;;:9;:15;;;;;:24;;-1:-1:-1;;21684:24:0;;;;;;;;;;21548:168::o;27422:565::-;-1:-1:-1;;;;;27557:20:0;;27549:63;;;;-1:-1:-1;;;27549:63:0;;19071:2:1;27549:63:0;;;19053:21:1;19110:2;19090:18;;;19083:30;19149:32;19129:18;;;19122:60;19199:18;;27549:63:0;18869:354:1;27549:63:0;-1:-1:-1;;;;;27631:23:0;;27623:64;;;;-1:-1:-1;;;27623:64:0;;19430:2:1;27623:64:0;;;19412:21:1;19469:2;19449:18;;;19442:30;19508;19488:18;;;19481:58;19556:18;;27623:64:0;19228:352:1;27623:64:0;-1:-1:-1;;;;;22643:18:0;;27700:21;22643:18;;;:9;:18;;;;;;;;;27760:11;:19;;;;;;;;;;:46;;;27800:6;27783:13;:23;;27760:46;27752:90;;;;-1:-1:-1;;;27752:90:0;;19787:2:1;27752:90:0;;;19769:21:1;19826:2;19806:18;;;19799:30;19865:33;19845:18;;;19838:61;19916:18;;27752:90:0;19585:355:1;27752:90:0;-1:-1:-1;;;;;22940:18:0;;;;;;:9;:18;;;;;;;:27;;;22919:48;;27896:30;27908:9;27919:6;27896:11;:30::i;:::-;27961:9;-1:-1:-1;;;;;27944:35:0;27953:6;-1:-1:-1;;;;;27944:35:0;;27972:6;27944:35;;;;2520:25:1;;2508:2;2493:18;;2374:177;27944:35:0;;;;;;;;27538:449;27422:565;;;:::o;26185:654::-;-1:-1:-1;;;;;26266:19:0;;;;;;:11;:19;;;;;;;;26265:20;:47;;;;-1:-1:-1;;;;;;26290:22:0;;;;;;:11;:22;;;;;;;;26289:23;26265:47;26261:571;;;26343:5;-1:-1:-1;;;;;26333:15:0;:6;-1:-1:-1;;;;;26333:15:0;;26329:492;;-1:-1:-1;;;;;26397:21:0;;26369:25;26397:21;;;:10;:21;;;;;26441:20;;:25;:54;;;;-1:-1:-1;;;;;;22643:18:0;;22611:7;22643:18;;;:9;:18;;;;;;26470:25;26441:54;26437:141;;;26543:15;26520:38;;-1:-1:-1;;20735:205:0:o;26329:492::-;-1:-1:-1;;;;;26646:18:0;;26618:25;26646:18;;;:10;:18;;;;;26733:14;;26710:20;;:37;;26733:14;26710:37;:::i;:::-;26683:24;;;:64;26790:15;26766:21;;;;:39;26185:654;;:::o;26847:567::-;26950:12;26964:23;;:::i;:::-;27009:6;27005:356;;;27032:141;;;;;;;;;;16682:6;27069:8;-1:-1:-1;27069:11:0;;27060:20;;:6;:20;:::i;:::-;27059:40;;;;:::i;:::-;27032:141;;;;16682:6;27128:8;27137:1;27128:11;;27119:20;;:6;:20;:::i;:::-;27118:40;;;;:::i;:::-;27032:141;;;-1:-1:-1;27005:356:0;;;27206:143;;;;;;;;;;16682:6;27243:9;-1:-1:-1;27243:12:0;;27234:21;;:6;:21;:::i;:::-;27233:41;;;;:::i;:::-;27206:143;;;;16682:6;27303:9;27313:1;27303:12;;27294:21;;:6;:21;:::i;:::-;27293:41;;;;:::i;:::-;27206:143;;;-1:-1:-1;27005:356:0;27398:8;;;;27387;;27378:17;;:6;:17;:::i;:::-;:28;;;;:::i;:::-;27371:35;;26847:567;;;;;:::o;25790:387::-;-1:-1:-1;;;;;25901:22:0;;25893:65;;;;-1:-1:-1;;;25893:65:0;;20147:2:1;25893:65:0;;;20129:21:1;20186:2;20166:18;;;20159:30;20225:32;20205:18;;;20198:60;20275:18;;25893:65:0;19945:354:1;25893:65:0;26010:14;;;;25993;;25971:19;;25993:31;;;:::i;:::-;25971:53;;26035:50;26048:8;26066:4;26073:11;26035:12;:50::i;:::-;26113:14;;26096:10;:31;;26125:1;;26096:31;;26113:14;;26096:31;:::i;:::-;;;;-1:-1:-1;;26155:14:0;;;;26138:13;:31;;:13;;:31;;26155:14;;26138:31;:::i;22677:130::-;-1:-1:-1;;;;;22772:18:0;;;;;;:9;:18;;;;;;:27;;22793:6;;22772:27;:::i;:::-;-1:-1:-1;;;;;22751:18:0;;;;;;;:9;:18;;;;;:48;;;;-1:-1:-1;22677:130:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1347:343::-;1414:2;1408:9;;;1444:15;;1489:18;1474:34;;1510:22;;;1471:62;1468:185;;;1575:10;1570:3;1566:20;1563:1;1556:31;1610:4;1607:1;1600:15;1638:4;1635:1;1628:15;1468:185;1669:2;1662:22;1347:343;:::o;1695:674::-;1785:6;1838:2;1826:9;1817:7;1813:23;1809:32;1806:52;;;1854:1;1851;1844:12;1806:52;1903:7;1896:4;1885:9;1881:20;1877:34;1867:62;;1925:1;1922;1915:12;1867:62;1949:17;;:::i;:::-;1988:3;2029:2;2018:9;2014:18;2055:7;2047:6;2044:19;2041:39;;;2076:1;2073;2066:12;2041:39;2100:9;2118:221;2134:6;2129:3;2126:15;2118:221;;;2216:3;2203:17;2233:31;2258:5;2233:31;:::i;:::-;2277:18;;2324:4;2315:14;;;;2151;2118:221;;;-1:-1:-1;2358:5:1;;1695:674;-1:-1:-1;;;;;1695:674:1:o;2556:160::-;2621:20;;2677:13;;2670:21;2660:32;;2650:60;;2706:1;2703;2696:12;2650:60;2556:160;;;:::o;2721:315::-;2786:6;2794;2847:2;2835:9;2826:7;2822:23;2818:32;2815:52;;;2863:1;2860;2853:12;2815:52;2902:9;2889:23;2921:31;2946:5;2921:31;:::i;:::-;2971:5;-1:-1:-1;2995:35:1;3026:2;3011:18;;2995:35;:::i;:::-;2985:45;;2721:315;;;;;:::o;3041:456::-;3118:6;3126;3134;3187:2;3175:9;3166:7;3162:23;3158:32;3155:52;;;3203:1;3200;3193:12;3155:52;3242:9;3229:23;3261:31;3286:5;3261:31;:::i;:::-;3311:5;-1:-1:-1;3368:2:1;3353:18;;3340:32;3381:33;3340:32;3381:33;:::i;:::-;3041:456;;3433:7;;-1:-1:-1;;;3487:2:1;3472:18;;;;3459:32;;3041:456::o;3502:180::-;3561:6;3614:2;3602:9;3593:7;3589:23;3585:32;3582:52;;;3630:1;3627;3620:12;3582:52;-1:-1:-1;3653:23:1;;3502:180;-1:-1:-1;3502:180:1:o;3876:247::-;3935:6;3988:2;3976:9;3967:7;3963:23;3959:32;3956:52;;;4004:1;4001;3994:12;3956:52;4043:9;4030:23;4062:31;4087:5;4062:31;:::i;:::-;4112:5;3876:247;-1:-1:-1;;;3876:247:1:o;4128:591::-;4210:6;4263:2;4251:9;4242:7;4238:23;4234:32;4231:52;;;4279:1;4276;4269:12;4231:52;4328:7;4321:4;4310:9;4306:20;4302:34;4292:62;;4350:1;4347;4340:12;4292:62;4374:17;;:::i;:::-;4413:3;4454:2;4443:9;4439:18;4480:7;4472:6;4469:19;4466:39;;;4501:1;4498;4491:12;4466:39;4525:9;4543:146;4559:6;4554:3;4551:15;4543:146;;;4627:17;;4615:30;;4674:4;4665:14;;;;4576;4543:146;;5156:180;5212:6;5265:2;5253:9;5244:7;5240:23;5236:32;5233:52;;;5281:1;5278;5271:12;5233:52;5304:26;5320:9;5304:26;:::i;5341:383::-;5418:6;5426;5434;5487:2;5475:9;5466:7;5462:23;5458:32;5455:52;;;5503:1;5500;5493:12;5455:52;5539:9;5526:23;5516:33;;5596:2;5585:9;5581:18;5568:32;5558:42;;5650:2;5639:9;5635:18;5622:32;5663:31;5688:5;5663:31;:::i;:::-;5713:5;5703:15;;;5341:383;;;;;:::o;5729:388::-;5797:6;5805;5858:2;5846:9;5837:7;5833:23;5829:32;5826:52;;;5874:1;5871;5864:12;5826:52;5913:9;5900:23;5932:31;5957:5;5932:31;:::i;:::-;5982:5;-1:-1:-1;6039:2:1;6024:18;;6011:32;6052:33;6011:32;6052:33;:::i;:::-;6104:7;6094:17;;;5729:388;;;;;:::o;6357:380::-;6436:1;6432:12;;;;6479;;;6500:61;;6554:4;6546:6;6542:17;6532:27;;6500:61;6607:2;6599:6;6596:14;6576:18;6573:38;6570:161;;6653:10;6648:3;6644:20;6641:1;6634:31;6688:4;6685:1;6678:15;6716:4;6713:1;6706:15;6570:161;;6357:380;;;:::o;6742:356::-;6944:2;6926:21;;;6963:18;;;6956:30;7022:34;7017:2;7002:18;;6995:62;7089:2;7074:18;;6742:356::o;7103:960::-;7386:3;7371:19;;7375:9;7467:6;7344:4;7501:194;7515:4;7512:1;7509:11;7501:194;;;7578:13;;-1:-1:-1;;;;;7574:39:1;7562:52;;7643:4;7634:14;;;;7610:1;7671:14;;;;7528:9;7501:194;;;7505:3;;;7732:2;7721:9;7717:18;7783:6;7809:1;7819:238;7835:4;7830:3;7827:13;7819:238;;;7904:15;;-1:-1:-1;;;;;7900:41:1;7886:56;;7965:4;7991:14;;;;8030:17;;;;7938:1;7850:11;7819:238;;;7823:3;;;7103:960;;;;;:::o;8766:127::-;8827:10;8822:3;8818:20;8815:1;8808:31;8858:4;8855:1;8848:15;8882:4;8879:1;8872:15;8898:125;8963:9;;;8984:10;;;8981:36;;;8997:18;;:::i;9640:306::-;9728:6;9736;9744;9797:2;9785:9;9776:7;9772:23;9768:32;9765:52;;;9813:1;9810;9803:12;9765:52;9842:9;9836:16;9826:26;;9892:2;9881:9;9877:18;9871:25;9861:35;;9936:2;9925:9;9921:18;9915:25;9905:35;;9640:306;;;;;:::o;9951:127::-;10012:10;10007:3;10003:20;10000:1;9993:31;10043:4;10040:1;10033:15;10067:4;10064:1;10057:15;10496:876;10747:3;10732:19;;10736:9;10828:6;10705:4;10862:168;10876:4;10873:1;10870:11;10862:168;;;10935:13;;10923:26;;10978:4;10969:14;;;;11018:1;11006:14;;;;10889:9;10862:168;;;10866:3;;;11067:2;11056:9;11052:18;11118:6;11144:1;11154:212;11170:4;11165:3;11162:13;11154:212;;;11235:15;;11221:30;;11274:4;11300:14;;;;11339:17;;;;11194:1;11185:11;11154:212;;13196:128;13263:9;;;13284:11;;;13281:37;;;13298:18;;:::i;13736:168::-;13809:9;;;13840;;13857:15;;;13851:22;;13837:37;13827:71;;13878:18;;:::i;13909:217::-;13949:1;13975;13965:132;;14019:10;14014:3;14010:20;14007:1;14000:31;14054:4;14051:1;14044:15;14082:4;14079:1;14072:15;13965:132;-1:-1:-1;14111:9:1;;13909:217::o;16360:251::-;16430:6;16483:2;16471:9;16462:7;16458:23;16454:32;16451:52;;;16499:1;16496;16489:12;16451:52;16531:9;16525:16;16550:31;16575:5;16550:31;:::i;16616:980::-;16878:4;16926:3;16915:9;16911:19;16957:6;16946:9;16939:25;16983:2;17021:6;17016:2;17005:9;17001:18;16994:34;17064:3;17059:2;17048:9;17044:18;17037:31;17088:6;17123;17117:13;17154:6;17146;17139:22;17192:3;17181:9;17177:19;17170:26;;17231:2;17223:6;17219:15;17205:29;;17252:1;17262:195;17276:6;17273:1;17270:13;17262:195;;;17341:13;;-1:-1:-1;;;;;17337:39:1;17325:52;;17432:15;;;;17397:12;;;;17373:1;17291:9;17262:195;;;-1:-1:-1;;;;;;;17513:32:1;;;;17508:2;17493:18;;17486:60;-1:-1:-1;;;17577:3:1;17562:19;17555:35;17474:3;16616:980;-1:-1:-1;;;16616:980:1:o

Swarm Source

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