ETH Price: $3,161.77 (+1.63%)

Token

zkInfra (ZKIN)
 

Overview

Max Total Supply

1,000,000 ZKIN

Holders

525

Market

Price

$0.02 @ 0.000007 ETH

Onchain Market Cap

$22,236.82

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 ZKIN

Value
$0.00
0xcbb6c7c98a587b3797903fa429b6265193dad28c
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

zkInfra is designed to harness ZK technology for enhanced privacy in DeFi, DePIN and AI, featuring zk-SNARK Private Transaction, Account Abstraction / ERC-4337 Smart Contract Wallet and Decentralized Cloud Platform for GPU & AI Model Training.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
zkInfra

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-25
*/

// SPDX-License-Identifier: MIT

/*

Website: https://zkinfra.io/
Telegram: https://t.me/zkinfra_portal
Twitter: https://x.com/zkInfra_io
Medium : https://medium.com/@zkInfra
Linktree: https://linktr.ee/zkinfra

*/

pragma solidity ^0.8.24;

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

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

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 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

    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 waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;
    uint256 public buyFees;
    uint256 public sellFees;
    uint256 private _maxSwapableTokens;

    uint256 public _preventSwapBefore = 20;
    uint256 public _removeLimitsAt = 30;
    uint256 public _totalBuys = 0;

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

    address private developmentWallet;
    address private marketingWallet;
    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;


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

    mapping(address => uint256) private _holderLastTransferBlock;
    bool public transDelayActived = true;
    uint256 public launchBlockNo;

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

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

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

    constructor() ERC20("zkInfra", "ZKIN", 18) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);

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

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

        uint256 totalSupply = 1_000_000 * (10**18);

        maxTransaction = (totalSupply * 100) / 10_000; // 1%
        maxWallet = (totalSupply * 100) / 10_000; // 1%
        swapTokensAtAmount = (totalSupply * 50) / 10_000; // 0.5%
        _maxSwapableTokens = (totalSupply * 100) / 10_000; // 1%

        buyFees = 3_000;
        sellFees = 4_000;

        developmentWallet = 0xfFC213Dd045773Ee27000D6B127c0B2524A0e5F7;
        marketingWallet = 0x82217b9FAb59A11FB2185d7F6938c4e804e90b95;

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

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

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transDelayActived = false;
        return true;
    }

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

    function updateMarketingWallet(address newWallet) external onlyOwner {
        emit MarketingWalletUpdated(newWallet, marketingWallet);
        marketingWallet = newWallet;
    }

    function updateDevelopmentWallet(address newWallet) external onlyOwner {
        emit DevelopmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

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

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

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

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

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

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


        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to] &&
            _totalBuys > _preventSwapBefore
        ) {
            swapping = true;
            swapBack(min(contractTokenBalance, _maxSwapableTokens));
            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;

        if (takeFee) {
            // SELL
            if (automatedMarketMakerPairs[to] && sellFees > 0) {
                fees = amount.mul(sellFees).div(10_000);
            }
            // BUY
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                fees = amount.mul(buyFees).div(10_000);
                _totalBuys++;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);

    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 amount) private {
        bool success;

        if (amount == 0) {
            return;
        }

        uint256 amountToSwapForETH = amount;
        swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance;
        // Calculate allocations
        uint256 mkt_amount = ethBalance / 2;
        uint256 development_amount = ethBalance - mkt_amount;

        (success, ) = address(marketingWallet).call{value: mkt_amount}("");
        (success, ) = address(developmentWallet).call{
            value: development_amount
        }("");
    }

    function changeSwapTokensAtAmount(uint256 newValue)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newValue >= (totalSupply() * 1) / 100_000,
            "Swap amount < 0.001% total supply."
        );
        require(
            newValue <= (totalSupply() * 100) / 10_000,
            "Swap amount > 1% total supply."
        );
        swapTokensAtAmount = newValue;
        return true;
    }

    function changeMaxTransaction(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 10) / 10_000),
            "maxTransaction < 0.1%"
        );
        maxTransaction = newValue * (10**decimals());
    }

    function changeMaxWallet(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 50) / 10_000),
            "maxWallet < 0.5%"
        );
        maxWallet = newValue * (10**decimals());
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool _isEnable) external onlyOwner {
        swapEnabled = _isEnable;
    }

    function updateBuyFee(uint256 _newFee) external onlyOwner {
        require(buyFees <= 5_000);
        buyFees = _newFee;
    }

    function updateSellFee(uint256 _newFee) external onlyOwner {
        require(sellFees <= 5_000);
        sellFees = _newFee;
    }
}

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":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevelopmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"TreasuryWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_preventSwapBefore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removeLimitsAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlockNo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsOff","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDelayActived","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnable","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556014600b55601e600c556000600d556016805462ffffff191660019081179091556018805460ff191690911790553480156200006557600080fd5b50604051806040016040528060078152602001667a6b496e66726160c81b815250604051806040016040528060048152602001632d25a4a760e11b81525060128260039081620000b691906200075d565b506004620000c583826200075d565b506005805460ff191660ff929092169190911790555060009050620000e73390565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506007546001600160a01b03166200015681600162000449565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c7919062000829565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023b919062000829565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000289573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002af919062000829565b6001600160a01b031660a0819052620002ca90600162000449565b60a051620002da906001620004c9565b69d3c21bcecceda1000000612710620002f582606462000871565b62000301919062000891565b6013556127106200031482606462000871565b62000320919062000891565b6015556127106200033382603262000871565b6200033f919062000891565b6014556127106200035282606462000871565b6200035e919062000891565b600a55610bb8600855610fa0600955601180546001600160a01b031990811673ffc213dd045773ee27000d6b127c0b2524a0e5f717909155601280549091167382217b9fab59a11fb2185d7f6938c4e804e90b95179055620003d9620003d160055461010090046001600160a01b031690565b60016200051d565b620003e63060016200051d565b620003f561dead60016200051d565b620004196200041160055461010090046001600160a01b031690565b600162000449565b6200042630600162000449565b6200043561dead600162000449565b620004413382620005cd565b5050620008ca565b6005546001600160a01b036101009091041633146200049e5760405162461bcd60e51b8152602060048201819052602482015260008051602062002fee83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260106020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b036101009091041633146200056e5760405162461bcd60e51b8152602060048201819052602482015260008051602062002fee833981519152604482015260640162000495565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006255760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000495565b8060026000828254620006399190620008b4565b90915550506001600160a01b0382166000908152602081905260408120805483929062000668908490620008b4565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006e257607f821691505b6020821081036200070357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006b2576000816000526020600020601f850160051c81016020861015620007345750805b601f850160051c820191505b81811015620007555782815560010162000740565b505050505050565b81516001600160401b03811115620007795762000779620006b7565b62000791816200078a8454620006cd565b8462000709565b602080601f831160018114620007c95760008415620007b05750858301515b600019600386901b1c1916600185901b17855562000755565b600085815260208120601f198616915b82811015620007fa57888601518255948401946001909101908401620007d9565b5085821015620008195787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200083c57600080fd5b81516001600160a01b03811681146200085457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200088b576200088b6200085b565b92915050565b600082620008af57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200088b576200088b6200085b565b60805160a0516126d46200091a6000396000818161047e01528181610ef001526116f601526000818161035c015281816116b80152818161203d015281816120f6015261213201526126d46000f3fe60806040526004361061028c5760003560e01c8063914eb66a1161015a578063cd73ab02116100c1578063e4748b9e1161007a578063e4748b9e1461080f578063e884f26014610825578063f023f5731461083a578063f2fde38b1461085a578063f887ea401461087a578063f8b45b051461089a57600080fd5b8063cd73ab0214610733578063d14df23914610753578063dd62ed3e1461076d578063e0f3ccf5146107b3578063e1bc3394146107c9578063e2f45605146107f957600080fd5b8063aacebbe311610113578063aacebbe314610678578063b62496f514610698578063bbc0c742146106c8578063c0246668146106e7578063c3f70b5214610707578063c81d92461461071d57600080fd5b8063914eb66a146105ce578063924de9b7146105e357806395d89b41146106035780639a7a23d614610618578063a457c2d714610638578063a9059cbb1461065857600080fd5b806339509351116101fe57806368018226116101b757806368018226146105095780636ddd17131461051f57806370a082311461053f57806373a94292146105755780637571336a1461058b5780638da5cb5b146105ab57600080fd5b8063395093511461042c578063467abe0a1461044c57806349bd5a5e1461046c5780634a62bb65146104a05780634fbee193146104ba57806363ee4d1c146104f357600080fd5b80631694505e116102505780631694505e1461034a57806318160ddd146103965780631d933a4a146103b5578063232050f9146103d557806323b872dd146103ea578063313ce5671461040a57600080fd5b806301339c211461029857806306fdde03146102af578063095ea7b3146102da57806309d6bf0a1461030a5780630b006d601461032a57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6108b0565b005b3480156102bb57600080fd5b506102c4610949565b6040516102d191906121dd565b60405180910390f35b3480156102e657600080fd5b506102fa6102f5366004612244565b6109db565b60405190151581526020016102d1565b34801561031657600080fd5b506102fa610325366004612270565b6109f2565b34801561033657600080fd5b506102ad610345366004612270565b610b1f565b34801561035657600080fd5b5061037e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102d1565b3480156103a257600080fd5b506002545b6040519081526020016102d1565b3480156103c157600080fd5b506102ad6103d0366004612270565b610bd3565b3480156103e157600080fd5b506102fa610c19565b3480156103f657600080fd5b506102fa610405366004612289565b610c5c565b34801561041657600080fd5b5060055460405160ff90911681526020016102d1565b34801561043857600080fd5b506102fa610447366004612244565b610d06565b34801561045857600080fd5b506102ad610467366004612270565b610d42565b34801561047857600080fd5b5061037e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ac57600080fd5b506016546102fa9060ff1681565b3480156104c657600080fd5b506102fa6104d53660046122ca565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156104ff57600080fd5b506103a760195481565b34801561051557600080fd5b506103a7600c5481565b34801561052b57600080fd5b506016546102fa9062010000900460ff1681565b34801561054b57600080fd5b506103a761055a3660046122ca565b6001600160a01b031660009081526020819052604090205490565b34801561058157600080fd5b506103a7600d5481565b34801561059757600080fd5b506102ad6105a63660046122f7565b610d88565b3480156105b757600080fd5b5060055461010090046001600160a01b031661037e565b3480156105da57600080fd5b506102ad610de3565b3480156105ef57600080fd5b506102ad6105fe36600461232c565b610e63565b34801561060f57600080fd5b506102c4610eaf565b34801561062457600080fd5b506102ad6106333660046122f7565b610ebe565b34801561064457600080fd5b506102fa610653366004612244565b610fa3565b34801561066457600080fd5b506102fa610673366004612244565b61103c565b34801561068457600080fd5b506102ad6106933660046122ca565b611049565b3480156106a457600080fd5b506102fa6106b33660046122ca565b60106020526000908152604090205460ff1681565b3480156106d457600080fd5b506016546102fa90610100900460ff1681565b3480156106f357600080fd5b506102ad6107023660046122f7565b6110d6565b34801561071357600080fd5b506103a760135481565b34801561072957600080fd5b506103a7600b5481565b34801561073f57600080fd5b506102ad61074e366004612270565b611165565b34801561075f57600080fd5b506018546102fa9060ff1681565b34801561077957600080fd5b506103a7610788366004612347565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107bf57600080fd5b506103a760095481565b3480156107d557600080fd5b506102fa6107e43660046122ca565b600f6020526000908152604090205460ff1681565b34801561080557600080fd5b506103a760145481565b34801561081b57600080fd5b506103a760085481565b34801561083157600080fd5b506102fa61121e565b34801561084657600080fd5b506102ad6108553660046122ca565b611261565b34801561086657600080fd5b506102ad6108753660046122ca565b6112ee565b34801561088657600080fd5b5060075461037e906001600160a01b031681565b3480156108a657600080fd5b506103a760155481565b6005546001600160a01b036101009091041633146108e95760405162461bcd60e51b81526004016108e090612380565b60405180910390fd5b601654610100900460ff16156109325760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b60448201526064016108e0565b601680544360195562ffff00191662010100179055565b606060038054610958906123b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610984906123b5565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b60006109e83384846113ea565b5060015b92915050565b6005546000906001600160a01b03610100909104163314610a255760405162461bcd60e51b81526004016108e090612380565b620186a0610a3260025490565b610a3d906001612405565b610a47919061241c565b821015610aa15760405162461bcd60e51b815260206004820152602260248201527f5377617020616d6f756e74203c20302e3030312520746f74616c20737570706c6044820152613c9760f11b60648201526084016108e0565b612710610aad60025490565b610ab8906064612405565b610ac2919061241c565b821115610b115760405162461bcd60e51b815260206004820152601e60248201527f5377617020616d6f756e74203e20312520746f74616c20737570706c792e000060448201526064016108e0565b50601481905560015b919050565b6005546001600160a01b03610100909104163314610b4f5760405162461bcd60e51b81526004016108e090612380565b612710610b5b60025490565b610b66906032612405565b610b70919061241c565b811015610bb25760405162461bcd60e51b815260206004820152601060248201526f6d617857616c6c6574203c20302e352560801b60448201526064016108e0565b60055460ff16610bc390600a612522565b610bcd9082612405565b60155550565b6005546001600160a01b03610100909104163314610c035760405162461bcd60e51b81526004016108e090612380565b6113886009541115610c1457600080fd5b600955565b6005546000906001600160a01b03610100909104163314610c4c5760405162461bcd60e51b81526004016108e090612380565b506016805460ff19169055600190565b6000610c6984848461150e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108e0565b610cfb85338584036113ea565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109e8918590610d3d908690612531565b6113ea565b6005546001600160a01b03610100909104163314610d725760405162461bcd60e51b81526004016108e090612380565b6113886008541115610d8357600080fd5b600855565b6005546001600160a01b03610100909104163314610db85760405162461bcd60e51b81526004016108e090612380565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03610100909104163314610e135760405162461bcd60e51b81526004016108e090612380565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b03610100909104163314610e935760405162461bcd60e51b81526004016108e090612380565b60168054911515620100000262ff000019909216919091179055565b606060048054610958906123b5565b6005546001600160a01b03610100909104163314610eee5760405162461bcd60e51b81526004016108e090612380565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610f955760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108e0565b610f9f8282611c7a565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108e0565b61103233858584036113ea565b5060019392505050565b60006109e833848461150e565b6005546001600160a01b036101009091041633146110795760405162461bcd60e51b81526004016108e090612380565b6012546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3601280546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146111065760405162461bcd60e51b81526004016108e090612380565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b036101009091041633146111955760405162461bcd60e51b81526004016108e090612380565b6127106111a160025490565b6111ac90600a612405565b6111b6919061241c565b8110156111fd5760405162461bcd60e51b81526020600482015260156024820152746d61785472616e73616374696f6e203c20302e312560581b60448201526064016108e0565b60055460ff1661120e90600a612522565b6112189082612405565b60135550565b6005546000906001600160a01b036101009091041633146112515760405162461bcd60e51b81526004016108e090612380565b506018805460ff19169055600190565b6005546001600160a01b036101009091041633146112915760405162461bcd60e51b81526004016108e090612380565b6011546040516001600160a01b03918216918316907f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd90600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0361010090910416331461131e5760405162461bcd60e51b81526004016108e090612380565b6001600160a01b0381166113835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e0565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b03831661144c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108e0565b6001600160a01b0382166114ad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108e0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115345760405162461bcd60e51b81526004016108e090612544565b6001600160a01b03821661155a5760405162461bcd60e51b81526004016108e090612589565b806000036115735761156e83836000611cce565b505050565b60165460ff1615611a33576005546001600160a01b0384811661010090920416148015906115b457506005546001600160a01b038381166101009092041614155b80156115c857506001600160a01b03821615155b80156115df57506001600160a01b03821661dead14155b80156115f55750600754600160a01b900460ff16155b15611a3357601654610100900460ff1661168d576001600160a01b0383166000908152600e602052604090205460ff168061164857506001600160a01b0382166000908152600e602052604090205460ff165b61168d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108e0565b60185460ff16156117d9576005546001600160a01b0383811661010090920416148015906116ed57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561172b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156117d9573260009081526017602052604090205443116117c65760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016108e0565b3260009081526017602052604090204390555b6001600160a01b03831660009081526010602052604090205460ff16801561181a57506001600160a01b0382166000908152600f602052604090205460ff16155b156118f8576013548111156118895760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b60648201526084016108e0565b6015546001600160a01b0383166000908152602081905260409020546118af9083612531565b11156118f35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108e0565b611a33565b6001600160a01b03821660009081526010602052604090205460ff16801561193957506001600160a01b0383166000908152600f602052604090205460ff16155b156119a9576013548111156118f35760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b60648201526084016108e0565b6001600160a01b0382166000908152600f602052604090205460ff16611a33576015546001600160a01b0383166000908152602081905260409020546119ef9083612531565b1115611a335760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108e0565b3060009081526020819052604090205460145481108015908190611a5f575060165462010000900460ff165b8015611a755750600754600160a01b900460ff16155b8015611a9a57506001600160a01b03851660009081526010602052604090205460ff16155b8015611abf57506001600160a01b0385166000908152600e602052604090205460ff16155b8015611ae457506001600160a01b0384166000908152600e602052604090205460ff16155b8015611af35750600b54600d54115b15611b30576007805460ff60a01b1916600160a01b179055600a54611b2290611b1d908490611e23565b611e3b565b6007805460ff60a01b191690555b6007546001600160a01b0386166000908152600e602052604090205460ff600160a01b909204821615911680611b7e57506001600160a01b0385166000908152600e602052604090205460ff165b15611b87575060005b60008115611c66576001600160a01b03861660009081526010602052604090205460ff168015611bb957506000600954115b15611be657611bdf612710611bd960095488611f2290919063ffffffff16565b90611fa4565b9050611c48565b6001600160a01b03871660009081526010602052604090205460ff168015611c1057506000600854115b15611c4857611c30612710611bd960085488611f2290919063ffffffff16565b600d80549192506000611c42836125cc565b91905055505b8015611c5957611c59873083611cce565b611c6381866125e5565b94505b611c71878787611cce565b50505050505050565b6001600160a01b038216600081815260106020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611cf45760405162461bcd60e51b81526004016108e090612544565b6001600160a01b038216611d1a5760405162461bcd60e51b81526004016108e090612589565b6001600160a01b03831660009081526020819052604090205481811015611d925760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108e0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611dc9908490612531565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e1591815260200190565b60405180910390a350505050565b6000818311611e325782611e34565b815b9392505050565b600081600003611e49575050565b81611e5381611fe6565b476000611e6160028361241c565b90506000611e6f82846125e5565b6012546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b50506011546040519196506001600160a01b0316908290600081818185875af1925050503d8060008114611f12576040519150601f19603f3d011682016040523d82523d6000602084013e611f17565b606091505b505050505050505050565b600082600003611f34575060006109ec565b6000611f408385612405565b905082611f4d858361241c565b14611e345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108e0565b6000611e3483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121a6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061201b5761201b6125f8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bd919061260e565b816001815181106120d0576120d06125f8565b60200260200101906001600160a01b031690816001600160a01b03168152505061211b307f0000000000000000000000000000000000000000000000000000000000000000846113ea565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061217090859060009086903090429060040161262b565b600060405180830381600087803b15801561218a57600080fd5b505af115801561219e573d6000803e3d6000fd5b505050505050565b600081836121c75760405162461bcd60e51b81526004016108e091906121dd565b5060006121d4848661241c565b95945050505050565b60006020808352835180602085015260005b8181101561220b578581018301518582016040015282016121ef565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461224157600080fd5b50565b6000806040838503121561225757600080fd5b82356122628161222c565b946020939093013593505050565b60006020828403121561228257600080fd5b5035919050565b60008060006060848603121561229e57600080fd5b83356122a98161222c565b925060208401356122b98161222c565b929592945050506040919091013590565b6000602082840312156122dc57600080fd5b8135611e348161222c565b80358015158114610b1a57600080fd5b6000806040838503121561230a57600080fd5b82356123158161222c565b9150612323602084016122e7565b90509250929050565b60006020828403121561233e57600080fd5b611e34826122e7565b6000806040838503121561235a57600080fd5b82356123658161222c565b915060208301356123758161222c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806123c957607f821691505b6020821081036123e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109ec576109ec6123ef565b60008261243957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561247957816000190482111561245f5761245f6123ef565b8085161561246c57918102915b93841c9390800290612443565b509250929050565b600082612490575060016109ec565b8161249d575060006109ec565b81600181146124b357600281146124bd576124d9565b60019150506109ec565b60ff8411156124ce576124ce6123ef565b50506001821b6109ec565b5060208310610133831016604e8410600b84101617156124fc575081810a6109ec565b612506838361243e565b806000190482111561251a5761251a6123ef565b029392505050565b6000611e3460ff841683612481565b808201808211156109ec576109ec6123ef565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000600182016125de576125de6123ef565b5060010190565b818103818111156109ec576109ec6123ef565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561262057600080fd5b8151611e348161222c565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b8181101561267d5784516001600160a01b031683529383019391830191600101612658565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212206c8816ba3f4e5367d90c6c2a8cfb9511a4c2719d9b57f433ec7640762147f44d64736f6c634300081800334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061028c5760003560e01c8063914eb66a1161015a578063cd73ab02116100c1578063e4748b9e1161007a578063e4748b9e1461080f578063e884f26014610825578063f023f5731461083a578063f2fde38b1461085a578063f887ea401461087a578063f8b45b051461089a57600080fd5b8063cd73ab0214610733578063d14df23914610753578063dd62ed3e1461076d578063e0f3ccf5146107b3578063e1bc3394146107c9578063e2f45605146107f957600080fd5b8063aacebbe311610113578063aacebbe314610678578063b62496f514610698578063bbc0c742146106c8578063c0246668146106e7578063c3f70b5214610707578063c81d92461461071d57600080fd5b8063914eb66a146105ce578063924de9b7146105e357806395d89b41146106035780639a7a23d614610618578063a457c2d714610638578063a9059cbb1461065857600080fd5b806339509351116101fe57806368018226116101b757806368018226146105095780636ddd17131461051f57806370a082311461053f57806373a94292146105755780637571336a1461058b5780638da5cb5b146105ab57600080fd5b8063395093511461042c578063467abe0a1461044c57806349bd5a5e1461046c5780634a62bb65146104a05780634fbee193146104ba57806363ee4d1c146104f357600080fd5b80631694505e116102505780631694505e1461034a57806318160ddd146103965780631d933a4a146103b5578063232050f9146103d557806323b872dd146103ea578063313ce5671461040a57600080fd5b806301339c211461029857806306fdde03146102af578063095ea7b3146102da57806309d6bf0a1461030a5780630b006d601461032a57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6108b0565b005b3480156102bb57600080fd5b506102c4610949565b6040516102d191906121dd565b60405180910390f35b3480156102e657600080fd5b506102fa6102f5366004612244565b6109db565b60405190151581526020016102d1565b34801561031657600080fd5b506102fa610325366004612270565b6109f2565b34801561033657600080fd5b506102ad610345366004612270565b610b1f565b34801561035657600080fd5b5061037e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102d1565b3480156103a257600080fd5b506002545b6040519081526020016102d1565b3480156103c157600080fd5b506102ad6103d0366004612270565b610bd3565b3480156103e157600080fd5b506102fa610c19565b3480156103f657600080fd5b506102fa610405366004612289565b610c5c565b34801561041657600080fd5b5060055460405160ff90911681526020016102d1565b34801561043857600080fd5b506102fa610447366004612244565b610d06565b34801561045857600080fd5b506102ad610467366004612270565b610d42565b34801561047857600080fd5b5061037e7f000000000000000000000000e69a25ecd29ab877ce5a0ed6336d12bad3fe931d81565b3480156104ac57600080fd5b506016546102fa9060ff1681565b3480156104c657600080fd5b506102fa6104d53660046122ca565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156104ff57600080fd5b506103a760195481565b34801561051557600080fd5b506103a7600c5481565b34801561052b57600080fd5b506016546102fa9062010000900460ff1681565b34801561054b57600080fd5b506103a761055a3660046122ca565b6001600160a01b031660009081526020819052604090205490565b34801561058157600080fd5b506103a7600d5481565b34801561059757600080fd5b506102ad6105a63660046122f7565b610d88565b3480156105b757600080fd5b5060055461010090046001600160a01b031661037e565b3480156105da57600080fd5b506102ad610de3565b3480156105ef57600080fd5b506102ad6105fe36600461232c565b610e63565b34801561060f57600080fd5b506102c4610eaf565b34801561062457600080fd5b506102ad6106333660046122f7565b610ebe565b34801561064457600080fd5b506102fa610653366004612244565b610fa3565b34801561066457600080fd5b506102fa610673366004612244565b61103c565b34801561068457600080fd5b506102ad6106933660046122ca565b611049565b3480156106a457600080fd5b506102fa6106b33660046122ca565b60106020526000908152604090205460ff1681565b3480156106d457600080fd5b506016546102fa90610100900460ff1681565b3480156106f357600080fd5b506102ad6107023660046122f7565b6110d6565b34801561071357600080fd5b506103a760135481565b34801561072957600080fd5b506103a7600b5481565b34801561073f57600080fd5b506102ad61074e366004612270565b611165565b34801561075f57600080fd5b506018546102fa9060ff1681565b34801561077957600080fd5b506103a7610788366004612347565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107bf57600080fd5b506103a760095481565b3480156107d557600080fd5b506102fa6107e43660046122ca565b600f6020526000908152604090205460ff1681565b34801561080557600080fd5b506103a760145481565b34801561081b57600080fd5b506103a760085481565b34801561083157600080fd5b506102fa61121e565b34801561084657600080fd5b506102ad6108553660046122ca565b611261565b34801561086657600080fd5b506102ad6108753660046122ca565b6112ee565b34801561088657600080fd5b5060075461037e906001600160a01b031681565b3480156108a657600080fd5b506103a760155481565b6005546001600160a01b036101009091041633146108e95760405162461bcd60e51b81526004016108e090612380565b60405180910390fd5b601654610100900460ff16156109325760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b60448201526064016108e0565b601680544360195562ffff00191662010100179055565b606060038054610958906123b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610984906123b5565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b60006109e83384846113ea565b5060015b92915050565b6005546000906001600160a01b03610100909104163314610a255760405162461bcd60e51b81526004016108e090612380565b620186a0610a3260025490565b610a3d906001612405565b610a47919061241c565b821015610aa15760405162461bcd60e51b815260206004820152602260248201527f5377617020616d6f756e74203c20302e3030312520746f74616c20737570706c6044820152613c9760f11b60648201526084016108e0565b612710610aad60025490565b610ab8906064612405565b610ac2919061241c565b821115610b115760405162461bcd60e51b815260206004820152601e60248201527f5377617020616d6f756e74203e20312520746f74616c20737570706c792e000060448201526064016108e0565b50601481905560015b919050565b6005546001600160a01b03610100909104163314610b4f5760405162461bcd60e51b81526004016108e090612380565b612710610b5b60025490565b610b66906032612405565b610b70919061241c565b811015610bb25760405162461bcd60e51b815260206004820152601060248201526f6d617857616c6c6574203c20302e352560801b60448201526064016108e0565b60055460ff16610bc390600a612522565b610bcd9082612405565b60155550565b6005546001600160a01b03610100909104163314610c035760405162461bcd60e51b81526004016108e090612380565b6113886009541115610c1457600080fd5b600955565b6005546000906001600160a01b03610100909104163314610c4c5760405162461bcd60e51b81526004016108e090612380565b506016805460ff19169055600190565b6000610c6984848461150e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108e0565b610cfb85338584036113ea565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109e8918590610d3d908690612531565b6113ea565b6005546001600160a01b03610100909104163314610d725760405162461bcd60e51b81526004016108e090612380565b6113886008541115610d8357600080fd5b600855565b6005546001600160a01b03610100909104163314610db85760405162461bcd60e51b81526004016108e090612380565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b03610100909104163314610e135760405162461bcd60e51b81526004016108e090612380565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b03610100909104163314610e935760405162461bcd60e51b81526004016108e090612380565b60168054911515620100000262ff000019909216919091179055565b606060048054610958906123b5565b6005546001600160a01b03610100909104163314610eee5760405162461bcd60e51b81526004016108e090612380565b7f000000000000000000000000e69a25ecd29ab877ce5a0ed6336d12bad3fe931d6001600160a01b0316826001600160a01b031603610f955760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108e0565b610f9f8282611c7a565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110255760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108e0565b61103233858584036113ea565b5060019392505050565b60006109e833848461150e565b6005546001600160a01b036101009091041633146110795760405162461bcd60e51b81526004016108e090612380565b6012546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3601280546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146111065760405162461bcd60e51b81526004016108e090612380565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b036101009091041633146111955760405162461bcd60e51b81526004016108e090612380565b6127106111a160025490565b6111ac90600a612405565b6111b6919061241c565b8110156111fd5760405162461bcd60e51b81526020600482015260156024820152746d61785472616e73616374696f6e203c20302e312560581b60448201526064016108e0565b60055460ff1661120e90600a612522565b6112189082612405565b60135550565b6005546000906001600160a01b036101009091041633146112515760405162461bcd60e51b81526004016108e090612380565b506018805460ff19169055600190565b6005546001600160a01b036101009091041633146112915760405162461bcd60e51b81526004016108e090612380565b6011546040516001600160a01b03918216918316907f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd90600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0361010090910416331461131e5760405162461bcd60e51b81526004016108e090612380565b6001600160a01b0381166113835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e0565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b03831661144c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108e0565b6001600160a01b0382166114ad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108e0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115345760405162461bcd60e51b81526004016108e090612544565b6001600160a01b03821661155a5760405162461bcd60e51b81526004016108e090612589565b806000036115735761156e83836000611cce565b505050565b60165460ff1615611a33576005546001600160a01b0384811661010090920416148015906115b457506005546001600160a01b038381166101009092041614155b80156115c857506001600160a01b03821615155b80156115df57506001600160a01b03821661dead14155b80156115f55750600754600160a01b900460ff16155b15611a3357601654610100900460ff1661168d576001600160a01b0383166000908152600e602052604090205460ff168061164857506001600160a01b0382166000908152600e602052604090205460ff165b61168d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108e0565b60185460ff16156117d9576005546001600160a01b0383811661010090920416148015906116ed57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561172b57507f000000000000000000000000e69a25ecd29ab877ce5a0ed6336d12bad3fe931d6001600160a01b0316826001600160a01b031614155b156117d9573260009081526017602052604090205443116117c65760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016108e0565b3260009081526017602052604090204390555b6001600160a01b03831660009081526010602052604090205460ff16801561181a57506001600160a01b0382166000908152600f602052604090205460ff16155b156118f8576013548111156118895760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b60648201526084016108e0565b6015546001600160a01b0383166000908152602081905260409020546118af9083612531565b11156118f35760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108e0565b611a33565b6001600160a01b03821660009081526010602052604090205460ff16801561193957506001600160a01b0383166000908152600f602052604090205460ff16155b156119a9576013548111156118f35760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b60648201526084016108e0565b6001600160a01b0382166000908152600f602052604090205460ff16611a33576015546001600160a01b0383166000908152602081905260409020546119ef9083612531565b1115611a335760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108e0565b3060009081526020819052604090205460145481108015908190611a5f575060165462010000900460ff165b8015611a755750600754600160a01b900460ff16155b8015611a9a57506001600160a01b03851660009081526010602052604090205460ff16155b8015611abf57506001600160a01b0385166000908152600e602052604090205460ff16155b8015611ae457506001600160a01b0384166000908152600e602052604090205460ff16155b8015611af35750600b54600d54115b15611b30576007805460ff60a01b1916600160a01b179055600a54611b2290611b1d908490611e23565b611e3b565b6007805460ff60a01b191690555b6007546001600160a01b0386166000908152600e602052604090205460ff600160a01b909204821615911680611b7e57506001600160a01b0385166000908152600e602052604090205460ff165b15611b87575060005b60008115611c66576001600160a01b03861660009081526010602052604090205460ff168015611bb957506000600954115b15611be657611bdf612710611bd960095488611f2290919063ffffffff16565b90611fa4565b9050611c48565b6001600160a01b03871660009081526010602052604090205460ff168015611c1057506000600854115b15611c4857611c30612710611bd960085488611f2290919063ffffffff16565b600d80549192506000611c42836125cc565b91905055505b8015611c5957611c59873083611cce565b611c6381866125e5565b94505b611c71878787611cce565b50505050505050565b6001600160a01b038216600081815260106020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611cf45760405162461bcd60e51b81526004016108e090612544565b6001600160a01b038216611d1a5760405162461bcd60e51b81526004016108e090612589565b6001600160a01b03831660009081526020819052604090205481811015611d925760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108e0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611dc9908490612531565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e1591815260200190565b60405180910390a350505050565b6000818311611e325782611e34565b815b9392505050565b600081600003611e49575050565b81611e5381611fe6565b476000611e6160028361241c565b90506000611e6f82846125e5565b6012546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b50506011546040519196506001600160a01b0316908290600081818185875af1925050503d8060008114611f12576040519150601f19603f3d011682016040523d82523d6000602084013e611f17565b606091505b505050505050505050565b600082600003611f34575060006109ec565b6000611f408385612405565b905082611f4d858361241c565b14611e345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108e0565b6000611e3483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121a6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061201b5761201b6125f8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bd919061260e565b816001815181106120d0576120d06125f8565b60200260200101906001600160a01b031690816001600160a01b03168152505061211b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113ea565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061217090859060009086903090429060040161262b565b600060405180830381600087803b15801561218a57600080fd5b505af115801561219e573d6000803e3d6000fd5b505050505050565b600081836121c75760405162461bcd60e51b81526004016108e091906121dd565b5060006121d4848661241c565b95945050505050565b60006020808352835180602085015260005b8181101561220b578581018301518582016040015282016121ef565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461224157600080fd5b50565b6000806040838503121561225757600080fd5b82356122628161222c565b946020939093013593505050565b60006020828403121561228257600080fd5b5035919050565b60008060006060848603121561229e57600080fd5b83356122a98161222c565b925060208401356122b98161222c565b929592945050506040919091013590565b6000602082840312156122dc57600080fd5b8135611e348161222c565b80358015158114610b1a57600080fd5b6000806040838503121561230a57600080fd5b82356123158161222c565b9150612323602084016122e7565b90509250929050565b60006020828403121561233e57600080fd5b611e34826122e7565b6000806040838503121561235a57600080fd5b82356123658161222c565b915060208301356123758161222c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806123c957607f821691505b6020821081036123e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109ec576109ec6123ef565b60008261243957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561247957816000190482111561245f5761245f6123ef565b8085161561246c57918102915b93841c9390800290612443565b509250929050565b600082612490575060016109ec565b8161249d575060006109ec565b81600181146124b357600281146124bd576124d9565b60019150506109ec565b60ff8411156124ce576124ce6123ef565b50506001821b6109ec565b5060208310610133831016604e8410600b84101617156124fc575081810a6109ec565b612506838361243e565b806000190482111561251a5761251a6123ef565b029392505050565b6000611e3460ff841683612481565b808201808211156109ec576109ec6123ef565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000600182016125de576125de6123ef565b5060010190565b818103818111156109ec576109ec6123ef565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561262057600080fd5b8151611e348161222c565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b8181101561267d5784516001600160a01b031683529383019391830191600101612658565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212206c8816ba3f4e5367d90c6c2a8cfb9511a4c2719d9b57f433ec7640762147f44d64736f6c63430008180033

Deployed Bytecode Sourcemap

22457:11899:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25792:196;;;;;;;;;;;;;:::i;:::-;;2397:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3459:210;;;;;;;;;;-1:-1:-1;3459:210:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;3459:210:0;1023:187:1;32906:457:0;;;;;;;;;;-1:-1:-1;32906:457:0;;;;;:::i;:::-;;:::i;33634:240::-;;;;;;;;;;-1:-1:-1;33634:240:0;;;;;:::i;:::-;;:::i;22534:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1591:32:1;;;1573:51;;1561:2;1546:18;22534:51:0;1400:230:1;2725:108:0;;;;;;;;;;-1:-1:-1;2813:12:0;;2725:108;;;1781:25:1;;;1769:2;1754:18;2725:108:0;1635:177:1;34220:133:0;;;;;;;;;;-1:-1:-1;34220:133:0;;;;;:::i;:::-;;:::i;25996:118::-;;;;;;;;;;;;;:::i;3677:529::-;;;;;;;;;;-1:-1:-1;3677:529:0;;;;;:::i;:::-;;:::i;2617:100::-;;;;;;;;;;-1:-1:-1;2700:9:0;;2617:100;;2700:9;;;;2420:36:1;;2408:2;2393:18;2617:100:0;2278:184:1;4214:297:0;;;;;;;;;;-1:-1:-1;4214:297:0;;;;;:::i;:::-;;:::i;34082:130::-;;;;;;;;;;-1:-1:-1;34082:130:0;;;;;:::i;:::-;;:::i;22592:38::-;;;;;;;;;;;;;;;23345:33;;;;;;;;;;-1:-1:-1;23345:33:0;;;;;;;;27566:126;;;;;;;;;;-1:-1:-1;27566:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;27656:28:0;27632:4;27656:28;;;:19;:28;;;;;;;;;27566:126;23575:28;;;;;;;;;;;;;;;;22887:35;;;;;;;;;;;;;;;;23425:31;;;;;;;;;;-1:-1:-1;23425:31:0;;;;;;;;;;;2841:177;;;;;;;;;;-1:-1:-1;2841:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;2992:18:0;2960:7;2992:18;;;;;;;;;;;;2841:177;22929:29;;;;;;;;;;;;;;;;26315:161;;;;;;;;;;-1:-1:-1;26315:161:0;;;;;:::i;:::-;;:::i;12605:79::-;;;;;;;;;;-1:-1:-1;12670:6:0;;;;;-1:-1:-1;;;;;12670:6:0;12605:79;;12819:145;;;;;;;;;;;;;:::i;33970:104::-;;;;;;;;;;-1:-1:-1;33970:104:0;;;;;:::i;:::-;;:::i;2505:::-;;;;;;;;;;;;;:::i;26674:304::-;;;;;;;;;;-1:-1:-1;26674:304:0;;;;;:::i;:::-;;:::i;4519:482::-;;;;;;;;;;-1:-1:-1;4519:482:0;;;;;:::i;:::-;;:::i;3026:216::-;;;;;;;;;;-1:-1:-1;3026:216:0;;;;;:::i;:::-;;:::i;27180:181::-;;;;;;;;;;-1:-1:-1;27180:181:0;;;;;:::i;:::-;;:::i;23090:57::-;;;;;;;;;;-1:-1:-1;23090:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23385:33;;;;;;;;;;-1:-1:-1;23385:33:0;;;;;;;;;;;26484:182;;;;;;;;;;-1:-1:-1;26484:182:0;;;;;:::i;:::-;;:::i;23234:29::-;;;;;;;;;;;;;;;;22842:38;;;;;;;;;;;;;;;;33371:255;;;;;;;;;;-1:-1:-1;33371:255:0;;;;;:::i;:::-;;:::i;23532:36::-;;;;;;;;;;-1:-1:-1;23532:36:0;;;;;;;;3250:201;;;;;;;;;;-1:-1:-1;3250:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;3416:18:0;;;3384:7;3416:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3250:201;22769:23;;;;;;;;;;;;;;;;23026:57;;;;;;;;;;-1:-1:-1;23026:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23270:33;;;;;;;;;;;;;;;;22740:22;;;;;;;;;;;;;;;;26175:132;;;;;;;;;;;;;:::i;27369:189::-;;;;;;;;;;-1:-1:-1;27369:189:0;;;;;:::i;:::-;;:::i;12972:281::-;;;;;;;;;;-1:-1:-1;12972:281:0;;;;;:::i;:::-;;:::i;22637:66::-;;;;;;;;;;-1:-1:-1;22637:66:0;;;;-1:-1:-1;;;;;22637:66:0;;;23310:24;;;;;;;;;;;;;;;;25792:196;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;;;;;;;;;25849:13:::1;::::0;::::1;::::0;::::1;;;25848:14;25840:41;;;::::0;-1:-1:-1;;;25840:41:0;;4553:2:1;25840:41:0::1;::::0;::::1;4535:21:1::0;4592:2;4572:18;;;4565:30;-1:-1:-1;;;4611:18:1;;;4604:44;4665:18;;25840:41:0::1;4351:338:1::0;25840:41:0::1;25892:13;:20:::0;;25939:12:::1;25923:13;:28:::0;-1:-1:-1;;25962:18:0;;;;;25792:196::o;2397:100::-;2451:13;2484:5;2477:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2397:100;:::o;3459:210::-;3578:4;3600:39;385:10;3623:7;3632:6;3600:8;:39::i;:::-;-1:-1:-1;3657:4:0;3459:210;;;;;:::o;32906:457::-;12732:6;;33013:4;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;33091:7:::1;33070:13;2813:12:::0;;;2725:108;33070:13:::1;:17;::::0;33086:1:::1;33070:17;:::i;:::-;33069:29;;;;:::i;:::-;33057:8;:41;;33035:125;;;::::0;-1:-1:-1;;;33035:125:0;;5808:2:1;33035:125:0::1;::::0;::::1;5790:21:1::0;5847:2;5827:18;;;5820:30;5886:34;5866:18;;;5859:62;-1:-1:-1;;;5937:18:1;;;5930:32;5979:19;;33035:125:0::1;5606:398:1::0;33035:125:0::1;33229:6;33206:13;2813:12:::0;;;2725:108;33206:13:::1;:19;::::0;33222:3:::1;33206:19;:::i;:::-;33205:30;;;;:::i;:::-;33193:8;:42;;33171:122;;;::::0;-1:-1:-1;;;33171:122:0;;6211:2:1;33171:122:0::1;::::0;::::1;6193:21:1::0;6250:2;6230:18;;;6223:30;6289:32;6269:18;;;6262:60;6339:18;;33171:122:0::1;6009:354:1::0;33171:122:0::1;-1:-1:-1::0;33304:18:0::1;:29:::0;;;33351:4:::1;12802:1;32906:457:::0;;;:::o;33634:240::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;33765:6:::1;33743:13;2813:12:::0;;;2725:108;33743:13:::1;:18;::::0;33759:2:::1;33743:18;:::i;:::-;33742:29;;;;:::i;:::-;33729:8;:43;;33707:109;;;::::0;-1:-1:-1;;;33707:109:0;;6570:2:1;33707:109:0::1;::::0;::::1;6552:21:1::0;6609:2;6589:18;;;6582:30;-1:-1:-1;;;6628:18:1;;;6621:46;6684:18;;33707:109:0::1;6368:340:1::0;33707:109:0::1;2700:9:::0;;;;33851:14:::1;::::0;:2:::1;:14;:::i;:::-;33839:27;::::0;:8;:27:::1;:::i;:::-;33827:9;:39:::0;-1:-1:-1;33634:240:0:o;34220:133::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;34310:5:::1;34298:8;;:17;;34290:26;;;::::0;::::1;;34327:8;:18:::0;34220:133::o;25996:118::-;12732:6;;26045:4;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;-1:-1:-1;26062:14:0::1;:22:::0;;-1:-1:-1;;26062:22:0::1;::::0;;;25996:118;:::o;3677:529::-;3817:4;3834:36;3844:6;3852:9;3863:6;3834:9;:36::i;:::-;-1:-1:-1;;;;;3910:19:0;;3883:24;3910:19;;;:11;:19;;;;;;;;385:10;3910:33;;;;;;;;3976:26;;;;3954:116;;;;-1:-1:-1;;;3954:116:0;;8292:2:1;3954:116:0;;;8274:21:1;8331:2;8311:18;;;8304:30;8370:34;8350:18;;;8343:62;-1:-1:-1;;;8421:18:1;;;8414:38;8469:19;;3954:116:0;8090:404:1;3954:116:0;4106:57;4115:6;385:10;4156:6;4137:16;:25;4106:8;:57::i;:::-;-1:-1:-1;4194:4:0;;3677:529;-1:-1:-1;;;;3677:529:0:o;4214:297::-;385:10;4329:4;4423:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4423:34:0;;;;;;;;;;4329:4;;4351:130;;4401:7;;4423:47;;4460:10;;4423:47;:::i;:::-;4351:8;:130::i;34082:::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;34170:5:::1;34159:7;;:16;;34151:25;;;::::0;::::1;;34187:7;:17:::0;34082:130::o;26315:161::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26428:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;26428:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26315:161::o;12819:145::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;12907:6:::1;::::0;12886:40:::1;::::0;12923:1:::1;::::0;12907:6:::1;::::0;::::1;-1:-1:-1::0;;;;;12907:6:0::1;::::0;12886:40:::1;::::0;12923:1;;12886:40:::1;12937:6;:19:::0;;-1:-1:-1;;;;;;12937:19:0::1;::::0;;12819:145::o;33970:104::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;34043:11:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34043:23:0;;::::1;::::0;;;::::1;::::0;;33970:104::o;2505:::-;2561:13;2594:7;2587:14;;;;;:::i;26674:304::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;26818:13:::1;-1:-1:-1::0;;;;;26810:21:0::1;:4;-1:-1:-1::0;;;;;26810:21:0::1;::::0;26788:128:::1;;;::::0;-1:-1:-1;;;26788:128:0;;8831:2:1;26788:128:0::1;::::0;::::1;8813:21:1::0;8870:2;8850:18;;;8843:30;8909:34;8889:18;;;8882:62;8980:27;8960:18;;;8953:55;9025:19;;26788:128:0::1;8629:421:1::0;26788:128:0::1;26929:41;26958:4;26964:5;26929:28;:41::i;:::-;26674:304:::0;;:::o;4519:482::-;385:10;4639:4;4688:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4688:34:0;;;;;;;;;;4755:35;;;;4733:122;;;;-1:-1:-1;;;4733:122:0;;9257:2:1;4733:122:0;;;9239:21:1;9296:2;9276:18;;;9269:30;9335:34;9315:18;;;9308:62;-1:-1:-1;;;9386:18:1;;;9379:35;9431:19;;4733:122:0;9055:401:1;4733:122:0;4891:67;385:10;4914:7;4942:15;4923:16;:34;4891:8;:67::i;:::-;-1:-1:-1;4989:4:0;;4519:482;-1:-1:-1;;;4519:482:0:o;3026:216::-;3148:4;3170:42;385:10;3194:9;3205:6;3170:9;:42::i;27180:181::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;27299:15:::1;::::0;27265:50:::1;::::0;-1:-1:-1;;;;;27299:15:0;;::::1;::::0;27265:50;::::1;::::0;::::1;::::0;27299:15:::1;::::0;27265:50:::1;27326:15;:27:::0;;-1:-1:-1;;;;;;27326:27:0::1;-1:-1:-1::0;;;;;27326:27:0;;;::::1;::::0;;;::::1;::::0;;27180:181::o;26484:182::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26569:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;26569:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26624:34;;1163:41:1;;;26624:34:0::1;::::0;1136:18:1;26624:34:0::1;;;;;;;26484:182:::0;;:::o;33371:255::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;33507:6:::1;33485:13;2813:12:::0;;;2725:108;33485:13:::1;:18;::::0;33501:2:::1;33485:18;:::i;:::-;33484:29;;;;:::i;:::-;33471:8;:43;;33449:114;;;::::0;-1:-1:-1;;;33449:114:0;;9663:2:1;33449:114:0::1;::::0;::::1;9645:21:1::0;9702:2;9682:18;;;9675:30;-1:-1:-1;;;9721:18:1;;;9714:51;9782:18;;33449:114:0::1;9461:345:1::0;33449:114:0::1;2700:9:::0;;;;33603:14:::1;::::0;:2:::1;:14;:::i;:::-;33591:27;::::0;:8;:27:::1;:::i;:::-;33574:14;:44:::0;-1:-1:-1;33371:255:0:o;26175:132::-;12732:6;;26235:4;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;-1:-1:-1;26252:17:0::1;:25:::0;;-1:-1:-1;;26252:25:0::1;::::0;;;26175:132;:::o;27369:189::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;27492:17:::1;::::0;27456:54:::1;::::0;-1:-1:-1;;;;;27492:17:0;;::::1;::::0;27456:54;::::1;::::0;::::1;::::0;27492:17:::1;::::0;27456:54:::1;27521:17;:29:::0;;-1:-1:-1;;;;;;27521:29:0::1;-1:-1:-1::0;;;;;27521:29:0;;;::::1;::::0;;;::::1;::::0;;27369:189::o;12972:281::-;12732:6;;-1:-1:-1;;;;;12732:6:0;;;;;385:10;12732:22;12724:67;;;;-1:-1:-1;;;12724:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13075:22:0;::::1;13053:110;;;::::0;-1:-1:-1;;;13053:110:0;;10013:2:1;13053:110:0::1;::::0;::::1;9995:21:1::0;10052:2;10032:18;;;10025:30;10091:34;10071:18;;;10064:62;-1:-1:-1;;;10142:18:1;;;10135:36;10188:19;;13053:110:0::1;9811:402:1::0;13053:110:0::1;13200:6;::::0;13179:38:::1;::::0;-1:-1:-1;;;;;13179:38:0;;::::1;::::0;13200:6:::1;::::0;::::1;;::::0;13179:38:::1;::::0;;;::::1;13228:6;:17:::0;;-1:-1:-1;;;;;13228:17:0;;::::1;;;-1:-1:-1::0;;;;;;13228:17:0;;::::1;::::0;;;::::1;::::0;;12972:281::o;6793:380::-;-1:-1:-1;;;;;6929:19:0;;6921:68;;;;-1:-1:-1;;;6921:68:0;;10420:2:1;6921:68:0;;;10402:21:1;10459:2;10439:18;;;10432:30;10498:34;10478:18;;;10471:62;-1:-1:-1;;;10549:18:1;;;10542:34;10593:19;;6921:68:0;10218:400:1;6921:68:0;-1:-1:-1;;;;;7008:21:0;;7000:68;;;;-1:-1:-1;;;7000:68:0;;10825:2:1;7000:68:0;;;10807:21:1;10864:2;10844:18;;;10837:30;10903:34;10883:18;;;10876:62;-1:-1:-1;;;10954:18:1;;;10947:32;10996:19;;7000:68:0;10623:398:1;7000:68:0;-1:-1:-1;;;;;7081:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7133:32;;1781:25:1;;;7133:32:0;;1754:18:1;7133:32:0;;;;;;;6793:380;;;:::o;27700:3976::-;-1:-1:-1;;;;;27832:18:0;;27824:68;;;;-1:-1:-1;;;27824:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27911:16:0;;27903:64;;;;-1:-1:-1;;;27903:64:0;;;;;;;:::i;:::-;27984:6;27994:1;27984:11;27980:93;;28012:28;28028:4;28034:2;28038:1;28012:15;:28::i;:::-;27700:3976;;;:::o;27980:93::-;28089:14;;;;28085:2261;;;12670:6;;-1:-1:-1;;;;;28142:15:0;;;12670:6;;;;;28142:15;;;;:49;;-1:-1:-1;12670:6:0;;-1:-1:-1;;;;;28178:13:0;;;12670:6;;;;;28178:13;;28142:49;:86;;;;-1:-1:-1;;;;;;28212:16:0;;;;28142:86;:128;;;;-1:-1:-1;;;;;;28249:21:0;;28263:6;28249:21;;28142:128;:158;;;;-1:-1:-1;28292:8:0;;-1:-1:-1;;;28292:8:0;;;;28291:9;28142:158;28120:2215;;;28340:13;;;;;;;28335:223;;-1:-1:-1;;;;;28412:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;28441:23:0;;;;;;:19;:23;;;;;;;;28412:52;28378:160;;;;-1:-1:-1;;;28378:160:0;;12038:2:1;28378:160:0;;;12020:21:1;12077:2;12057:18;;;12050:30;-1:-1:-1;;;12096:18:1;;;12089:52;12158:18;;28378:160:0;11836:346:1;28378:160:0;28582:17;;;;28578:597;;;12670:6;;-1:-1:-1;;;;;28654:13:0;;;12670:6;;;;;28654:13;;;;:72;;;28710:15;-1:-1:-1;;;;;28696:30:0;:2;-1:-1:-1;;;;;28696:30:0;;;28654:72;:129;;;;;28769:13;-1:-1:-1;;;;;28755:28:0;:2;-1:-1:-1;;;;;28755:28:0;;;28654:129;28624:532;;;28897:9;28872:35;;;;:24;:35;;;;;;28910:12;-1:-1:-1;28834:221:0;;;;-1:-1:-1;;;28834:221:0;;12389:2:1;28834:221:0;;;12371:21:1;12428:2;12408:18;;;12401:30;12467:34;12447:18;;;12440:62;12538:34;12518:18;;;12511:62;-1:-1:-1;;;12589:19:1;;;12582:40;12639:19;;28834:221:0;12187:477:1;28834:221:0;29107:9;29082:35;;;;:24;:35;;;;;29120:12;29082:50;;28624:532;-1:-1:-1;;;;;29245:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;29302:29:0;;;;;;:25;:29;;;;;;;;29301:30;29245:86;29219:1101;;;29418:14;;29408:6;:24;;29374:157;;;;-1:-1:-1;;;29374:157:0;;12871:2:1;29374:157:0;;;12853:21:1;12910:2;12890:18;;;12883:30;12949:34;12929:18;;;12922:62;-1:-1:-1;;;13000:18:1;;;12993:45;13055:19;;29374:157:0;12669:411:1;29374:157:0;29614:9;;-1:-1:-1;;;;;2992:18:0;;2960:7;2992:18;;;;;;;;;;;29588:22;;:6;:22;:::i;:::-;:35;;29554:140;;;;-1:-1:-1;;;29554:140:0;;13287:2:1;29554:140:0;;;13269:21:1;13326:2;13306:18;;;13299:30;-1:-1:-1;;;13345:18:1;;;13338:49;13404:18;;29554:140:0;13085:343:1;29554:140:0;29219:1101;;;-1:-1:-1;;;;;29788:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;29843:31:0;;;;;;:25;:31;;;;;;;;29842:32;29788:86;29762:558;;;29961:14;;29951:6;:24;;29917:158;;;;-1:-1:-1;;;29917:158:0;;13635:2:1;29917:158:0;;;13617:21:1;13674:2;13654:18;;;13647:30;13713:34;13693:18;;;13686:62;-1:-1:-1;;;13764:18:1;;;13757:46;13820:19;;29917:158:0;13433:412:1;29762:558:0;-1:-1:-1;;;;;30106:29:0;;;;;;:25;:29;;;;;;;;30101:219;;30220:9;;-1:-1:-1;;;;;2992:18:0;;2960:7;2992:18;;;;;;;;;;;30194:22;;:6;:22;:::i;:::-;:35;;30160:140;;;;-1:-1:-1;;;30160:140:0;;13287:2:1;30160:140:0;;;13269:21:1;13326:2;13306:18;;;13299:30;-1:-1:-1;;;13345:18:1;;;13338:49;13404:18;;30160:140:0;13085:343:1;30160:140:0;30409:4;30360:28;2992:18;;;;;;;;;;;30467;;30443:42;;;;;;;30516:35;;-1:-1:-1;30540:11:0;;;;;;;30516:35;:61;;;;-1:-1:-1;30569:8:0;;-1:-1:-1;;;30569:8:0;;;;30568:9;30516:61;:110;;;;-1:-1:-1;;;;;;30595:31:0;;;;;;:25;:31;;;;;;;;30594:32;30516:110;:153;;;;-1:-1:-1;;;;;;30644:25:0;;;;;;:19;:25;;;;;;;;30643:26;30516:153;:194;;;;-1:-1:-1;;;;;;30687:23:0;;;;;;:19;:23;;;;;;;;30686:24;30516:194;:242;;;;;30740:18;;30727:10;;:31;30516:242;30498:415;;;30785:8;:15;;-1:-1:-1;;;;30785:15:0;-1:-1:-1;;;30785:15:0;;;30850:18;;30815:55;;30824:45;;30828:20;;30824:3;:45::i;:::-;30815:8;:55::i;:::-;30885:8;:16;;-1:-1:-1;;;;30885:16:0;;;30498:415;30941:8;;-1:-1:-1;;;;;30966:25:0;;30925:12;30966:25;;;:19;:25;;;;;;30941:8;-1:-1:-1;;;30941:8:0;;;;;30940:9;;30966:25;;:52;;-1:-1:-1;;;;;;30995:23:0;;;;;;:19;:23;;;;;;;;30966:52;30962:100;;;-1:-1:-1;31045:5:0;30962:100;31074:12;31107:7;31103:518;;;-1:-1:-1;;;;;31156:29:0;;;;;;:25;:29;;;;;;;;:45;;;;;31200:1;31189:8;;:12;31156:45;31152:320;;;31229:32;31254:6;31229:20;31240:8;;31229:6;:10;;:20;;;;:::i;:::-;:24;;:32::i;:::-;31222:39;;31152:320;;;-1:-1:-1;;;;;31320:31:0;;;;;;:25;:31;;;;;;;;:46;;;;;31365:1;31355:7;;:11;31320:46;31316:156;;;31394:31;31418:6;31394:19;31405:7;;31394:6;:10;;:19;;;;:::i;:31::-;31444:10;:12;;31387:38;;-1:-1:-1;31444:10:0;:12;;;:::i;:::-;;;;;;31316:156;31492:8;;31488:91;;31521:42;31537:4;31551;31558;31521:15;:42::i;:::-;31595:14;31605:4;31595:14;;:::i;:::-;;;31103:518;31633:33;31649:4;31655:2;31659:6;31633:15;:33::i;:::-;27813:3863;;;;27700:3976;;;:::o;26986:186::-;-1:-1:-1;;;;;27069:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;27069:39:0;;;;;;;;;;27124:40;;27069:39;;:31;27124:40;;;26986:186;;:::o;5009:770::-;-1:-1:-1;;;;;5149:20:0;;5141:70;;;;-1:-1:-1;;;5141:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5230:23:0;;5222:71;;;;-1:-1:-1;;;5222:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5390:17:0;;5366:21;5390:17;;;;;;;;;;;5440:23;;;;5418:111;;;;-1:-1:-1;;;5418:111:0;;14325:2:1;5418:111:0;;;14307:21:1;14364:2;14344:18;;;14337:30;14403:34;14383:18;;;14376:62;-1:-1:-1;;;14454:18:1;;;14447:36;14500:19;;5418:111:0;14123:402:1;5418:111:0;-1:-1:-1;;;;;5565:17:0;;;:9;:17;;;;;;;;;;;5585:22;;;5565:42;;5629:20;;;;;;;;:30;;5601:6;;5565:9;5629:30;;5601:6;;5629:30;:::i;:::-;;;;;;;;5694:9;-1:-1:-1;;;;;5677:35:0;5686:6;-1:-1:-1;;;;;5677:35:0;;5705:6;5677:35;;;;1781:25:1;;1769:2;1754:18;;1635:177;5677:35:0;;;;;;;;5130:649;5009:770;;;:::o;31684:107::-;31741:7;31773:1;31769;:5;31768:15;;31782:1;31768:15;;;31778:1;31768:15;31761:22;31684:107;-1:-1:-1;;;31684:107:0:o;32282:616::-;32335:12;32364:6;32374:1;32364:11;32360:50;;32392:7;32282:616;:::o;32360:50::-;32451:6;32468:36;32451:6;32468:16;:36::i;:::-;32536:21;32515:18;32623:14;32636:1;32536:21;32623:14;:::i;:::-;32602:35;-1:-1:-1;32648:26:0;32677:23;32602:35;32677:10;:23;:::i;:::-;32735:15;;32727:52;;32648;;-1:-1:-1;;;;;;32735:15:0;;32764:10;;32727:52;;;;32764:10;32735:15;32727:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32812:17:0;;32804:86;;32713:66;;-1:-1:-1;;;;;;32812:17:0;;32857:18;;32804:86;;;;32857:18;32812:17;32804:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;32282:616:0:o;8036:250::-;8094:7;8118:1;8123;8118:6;8114:47;;-1:-1:-1;8148:1:0;8141:8;;8114:47;8173:9;8185:5;8189:1;8185;:5;:::i;:::-;8173:17;-1:-1:-1;8218:1:0;8209:5;8213:1;8173:17;8209:5;:::i;:::-;:10;8201:56;;;;-1:-1:-1;;;8201:56:0;;14942:2:1;8201:56:0;;;14924:21:1;14981:2;14961:18;;;14954:30;15020:34;15000:18;;;14993:62;-1:-1:-1;;;15071:18:1;;;15064:31;15112:19;;8201:56:0;14740:397:1;8294:132:0;8352:7;8379:39;8383:1;8386;8379:39;;;;;;;;;;;;;;;;;:3;:39::i;31799:475::-;31889:16;;;31903:1;31889:16;;;;;;;;31865:21;;31889:16;;;;;;;;;;-1:-1:-1;31889:16:0;31865:40;;31934:4;31916;31921:1;31916:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31916:23:0;;;-1:-1:-1;;;;;31916:23:0;;;;;31960:15;-1:-1:-1;;;;;31960:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31950:4;31955:1;31950:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31950:32:0;;;-1:-1:-1;;;;;31950:32:0;;;;;31995:62;32012:4;32027:15;32045:11;31995:8;:62::i;:::-;32070:196;;-1:-1:-1;;;32070:196:0;;-1:-1:-1;;;;;32070:15:0;:66;;;;:196;;32151:11;;32177:1;;32193:4;;32220;;32240:15;;32070:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31854:420;31799:475;:::o;8434:312::-;8554:7;8589:12;8582:5;8574:28;;;;-1:-1:-1;;;8574:28:0;;;;;;;;:::i;:::-;-1:-1:-1;8613:9:0;8625:5;8629:1;8625;:5;:::i;:::-;8613:17;8434:312;-1:-1:-1;;;;;8434:312:0: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;622:70;567:131;:::o;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;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1817:456::-;1894:6;1902;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;2018:9;2005:23;2037:31;2062:5;2037:31;:::i;:::-;2087:5;-1:-1:-1;2144:2:1;2129:18;;2116:32;2157:33;2116:32;2157:33;:::i;:::-;1817:456;;2209:7;;-1:-1:-1;;;2263:2:1;2248:18;;;;2235:32;;1817:456::o;2675:247::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2861:31;2886:5;2861:31;:::i;2927:160::-;2992:20;;3048:13;;3041:21;3031:32;;3021:60;;3077:1;3074;3067:12;3092:315;3157:6;3165;3218:2;3206:9;3197:7;3193:23;3189:32;3186:52;;;3234:1;3231;3224:12;3186:52;3273:9;3260:23;3292:31;3317:5;3292:31;:::i;:::-;3342:5;-1:-1:-1;3366:35:1;3397:2;3382:18;;3366:35;:::i;:::-;3356:45;;3092:315;;;;;:::o;3412:180::-;3468:6;3521:2;3509:9;3500:7;3496:23;3492:32;3489:52;;;3537:1;3534;3527:12;3489:52;3560:26;3576:9;3560:26;:::i;3597:388::-;3665:6;3673;3726:2;3714:9;3705:7;3701:23;3697:32;3694:52;;;3742:1;3739;3732:12;3694:52;3781:9;3768:23;3800:31;3825:5;3800:31;:::i;:::-;3850:5;-1:-1:-1;3907:2:1;3892:18;;3879:32;3920:33;3879:32;3920:33;:::i;:::-;3972:7;3962:17;;;3597:388;;;;;:::o;3990:356::-;4192:2;4174:21;;;4211:18;;;4204:30;4270:34;4265:2;4250:18;;4243:62;4337:2;4322:18;;3990:356::o;4694:380::-;4773:1;4769:12;;;;4816;;;4837:61;;4891:4;4883:6;4879:17;4869:27;;4837:61;4944:2;4936:6;4933:14;4913:18;4910:38;4907:161;;4990:10;4985:3;4981:20;4978:1;4971:31;5025:4;5022:1;5015:15;5053:4;5050:1;5043:15;4907:161;;4694:380;;;:::o;5079:127::-;5140:10;5135:3;5131:20;5128:1;5121:31;5171:4;5168:1;5161:15;5195:4;5192:1;5185:15;5211:168;5284:9;;;5315;;5332:15;;;5326:22;;5312:37;5302:71;;5353:18;;:::i;5384:217::-;5424:1;5450;5440:132;;5494:10;5489:3;5485:20;5482:1;5475:31;5529:4;5526:1;5519:15;5557:4;5554:1;5547:15;5440:132;-1:-1:-1;5586:9:1;;5384:217::o;6713:416::-;6802:1;6839:5;6802:1;6853:270;6874:7;6864:8;6861:21;6853:270;;;6933:4;6929:1;6925:6;6921:17;6915:4;6912:27;6909:53;;;6942:18;;:::i;:::-;6992:7;6982:8;6978:22;6975:55;;;7012:16;;;;6975:55;7091:22;;;;7051:15;;;;6853:270;;;6857:3;6713:416;;;;;:::o;7134:806::-;7183:5;7213:8;7203:80;;-1:-1:-1;7254:1:1;7268:5;;7203:80;7302:4;7292:76;;-1:-1:-1;7339:1:1;7353:5;;7292:76;7384:4;7402:1;7397:59;;;;7470:1;7465:130;;;;7377:218;;7397:59;7427:1;7418:10;;7441:5;;;7465:130;7502:3;7492:8;7489:17;7486:43;;;7509:18;;:::i;:::-;-1:-1:-1;;7565:1:1;7551:16;;7580:5;;7377:218;;7679:2;7669:8;7666:16;7660:3;7654:4;7651:13;7647:36;7641:2;7631:8;7628:16;7623:2;7617:4;7614:12;7610:35;7607:77;7604:159;;;-1:-1:-1;7716:19:1;;;7748:5;;7604:159;7795:34;7820:8;7814:4;7795:34;:::i;:::-;7865:6;7861:1;7857:6;7853:19;7844:7;7841:32;7838:58;;;7876:18;;:::i;:::-;7914:20;;7134:806;-1:-1:-1;;;7134:806:1:o;7945:140::-;8003:5;8032:47;8073:4;8063:8;8059:19;8053:4;8032:47;:::i;8499:125::-;8564:9;;;8585:10;;;8582:36;;;8598:18;;:::i;11026:401::-;11228:2;11210:21;;;11267:2;11247:18;;;11240:30;11306:34;11301:2;11286:18;;11279:62;-1:-1:-1;;;11372:2:1;11357:18;;11350:35;11417:3;11402:19;;11026:401::o;11432:399::-;11634:2;11616:21;;;11673:2;11653:18;;;11646:30;11712:34;11707:2;11692:18;;11685:62;-1:-1:-1;;;11778:2:1;11763:18;;11756:33;11821:3;11806:19;;11432:399::o;13850:135::-;13889:3;13910:17;;;13907:43;;13930:18;;:::i;:::-;-1:-1:-1;13977:1:1;13966:13;;13850:135::o;13990:128::-;14057:9;;;14078:11;;;14075:37;;;14092:18;;:::i;15274:127::-;15335:10;15330:3;15326:20;15323:1;15316:31;15366:4;15363:1;15356:15;15390:4;15387:1;15380:15;15406:251;15476:6;15529:2;15517:9;15508:7;15504:23;15500:32;15497:52;;;15545:1;15542;15535:12;15497:52;15577:9;15571:16;15596:31;15621:5;15596:31;:::i;15662:980::-;15924:4;15972:3;15961:9;15957:19;16003:6;15992:9;15985:25;16029:2;16067:6;16062:2;16051:9;16047:18;16040:34;16110:3;16105:2;16094:9;16090:18;16083:31;16134:6;16169;16163:13;16200:6;16192;16185:22;16238:3;16227:9;16223:19;16216:26;;16277:2;16269:6;16265:15;16251:29;;16298:1;16308:195;16322:6;16319:1;16316:13;16308:195;;;16387:13;;-1:-1:-1;;;;;16383:39:1;16371:52;;16478:15;;;;16443:12;;;;16419:1;16337:9;16308:195;;;-1:-1:-1;;;;;;;16559:32:1;;;;16554:2;16539:18;;16532:60;-1:-1:-1;;;16623:3:1;16608:19;16601:35;16520:3;15662:980;-1:-1:-1;;;15662:980:1:o

Swarm Source

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