ETH Price: $3,333.47 (-2.50%)

Token

Nodez (NODE)
 

Overview

Max Total Supply

100,000,000 NODE

Holders

326

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,024.375715619936068435 NODE

Value
$0.00
0x0ec4c79483c3af3f7cbd2d7948d89b7b1a963853
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Nodez

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-24
*/

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

/* 
     Nodez is officially incubated by Sentinel Incubator - https://sentinelbot.ai
     
     Deploy and manage blockchain nodes with unprecedented ease. 
     Earn rewards and contribute to network security without technical expertise. 
     Join the decentralized revolution with just a single click. 

     Website: https://nodez.tech
     Dapp: https://app.nodez.tech/
     Telegram: https://t.me/NodezTech
     Twitter: https://x.com/nodeztech
     Whitepaper: https://nodez.tech/whitepaper
*/

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

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

contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - 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');

        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

contract Nodez is ERC20, Ownable, ReentrancyGuard {
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public projectWallet;
    address public incubatorWallet;

    uint256 public maxTransactionAmount;
    uint256 public maxWallet;
    uint8 private _decimals;

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

    uint256 public tradingActiveBlock;
    uint256 public taxStartTime;
    uint256 public redirectionHours = 2160; // Default 2160 hours (90 days)

    uint256 public buyTotalFees;
    uint256 public sellTotalFees;

    uint256 public tokensForProject;
    uint256 public tokensForIncubator;

    // Exclusions from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // Store AMM pairs
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ProjectWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event IncubatorWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    event OwnerForcedSwapBack(uint256 timestamp);

    // Added event declarations for new events
    event TradingEnabled(uint256 blockNumber);
    event LimitsRemoved();
    event MaxTransactionAmountUpdated(uint256 newAmount);
    event MaxWalletUpdated(uint256 newAmount);
    event ExcludedFromMaxTransaction(address account, bool isExcluded);
    event SwapEnabledUpdated(bool enabled);
    event RescueSwapUpdated(bool enabled);
    event BuyFeesUpdated(uint256 totalBuyFee);
    event SellFeesUpdated(uint256 totalSellFee);
    event RedirectionHoursUpdated(uint256 newRedirectionHours);

    constructor() ERC20('Nodez', 'NODE') {
        address _owner = _msgSender();

        _decimals = 18;

        uint256 totalSupply = 100_000_000 * (10 ** _decimals); // 100 million

        maxTransactionAmount = totalSupply * 2 / 100; // 2%
        maxWallet = totalSupply * 2 / 100; // 2%

        // Initial buy and sell fees
        buyTotalFees = 30;
        sellTotalFees = 40;

        projectWallet = 0x1C812f13BEB346678a134Bf89480076e8D299701;
        incubatorWallet = 0x85dBe4ce3c809DAC17E4B1D32a5A2478038a3ae1;

        address currentRouter;

        if (block.chainid == 56) {
            currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router
        } else if (block.chainid == 97) {
            currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet
        } else if (block.chainid == 43114) {
            currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; // Avax Mainnet
        } else if (block.chainid == 137) {
            currentRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; // Polygon Ropsten
        } else if (block.chainid == 250) {
            currentRouter = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; // SpookySwap FTM
        } else if (block.chainid == 3) {
            currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Ropsten
        } else if (block.chainid == 1 || block.chainid == 4) {
            currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Mainnet
        } else if (block.chainid == 8453) {
            currentRouter = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24; // Base Mainnet Router
        } else {
            revert("Unsupported chain");
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);

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

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

        // Exclude from fees and max transaction amount
        excludeFromFees(_owner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);

        excludeFromMaxTransaction(_owner, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);

        _mint(_owner, totalSupply);
        transferOwnership(_owner);
    }

    receive() external payable {}

    // Enable trading (irreversible)
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        taxStartTime = block.timestamp;

        // Set initial tax rates
        buyTotalFees = 30;
        sellTotalFees = 40;

        emit TradingEnabled(block.number);
    }

    // Remove transaction and wallet limits
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        emit LimitsRemoved();
        return true;
    }

    // Update max transaction amount
    function updateMaxTransactionAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100), 'Cannot set maxTransactionAmount lower than 1%');
        maxTransactionAmount = newNum;
        emit MaxTransactionAmountUpdated(newNum);
    }

    // Update max wallet amount
    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100), 'Cannot set maxWallet lower than 1%');
        maxWallet = newNum;
        emit MaxWalletUpdated(newNum);
    }

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

    // Only use to disable contract sales in an emergency
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
        emit SwapEnabledUpdated(enabled);
    }

    // Disable swap and send tokens as is
    function updateRescueSwap(bool enabled) external onlyOwner {
        rescueSwap = enabled;
        emit RescueSwapUpdated(enabled);
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, 'Cannot remove pair');
        _setAutomatedMarketMakerPair(pair, value);
    }

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

    function updateProjectWallet(address newWallet) external onlyOwner {
        emit ProjectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    function updateIncubatorWallet(address newWallet) external onlyOwner {
        emit IncubatorWalletUpdated(newWallet, incubatorWallet);
        incubatorWallet = newWallet;
    }

    function updateRedirectionHours(uint256 newRedirectionHours) external onlyOwner {
    require(newRedirectionHours >= 1 && newRedirectionHours <= 2160, "Duration must be between 1 and 2160 hours");
    redirectionHours = newRedirectionHours;
    emit RedirectionHoursUpdated(newRedirectionHours);
    }


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

    // Timelock tax mechanism
    function getTaxRates() public view returns (uint256 buyFee, uint256 sellFee) {
        if (!tradingActive) {
            return (0, 0);
        }

        uint256 timeElapsed = block.timestamp - taxStartTime;

        if (timeElapsed <= 30 minutes) {
            if (timeElapsed <= 5 minutes) {
                return (30, 40);
            } else if (timeElapsed <= 10 minutes) {
                return (20, 30);
            } else if (timeElapsed <= 15 minutes) {
                return (15, 25);
            } else if (timeElapsed <= 20 minutes) {
                return (10, 20);
            } else if (timeElapsed <= 25 minutes) {
                return (7, 15);
            } else if (timeElapsed <= 30 minutes) {
                return (5, 5);
            }
        }

        // After the timelock period, use the manually set fees
        return (buyTotalFees, sellTotalFees);
    }

    function updateBuyFees(uint256 newBuyFee) external onlyOwner {
        require(newBuyFee <= 30, "Total buy fees cannot exceed 30%");
        buyTotalFees = newBuyFee;
        emit BuyFeesUpdated(newBuyFee);
    }

    function updateSellFees(uint256 newSellFee) external onlyOwner {
        require(newSellFee <= 40, "Total sell fees cannot exceed 40%");
        sellTotalFees = newSellFee;
        emit SellFeesUpdated(newSellFee);
    }

    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 (!tradingActive) {
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], 'Trading is not active.');
        }

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

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != deadAddress && !(_isExcludedFromFees[from] || _isExcludedFromFees[to]) && !swapping) {
                // On buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, 'Buy exceeds max transaction amount.');
                    require(amount + balanceOf(to) <= maxWallet, 'Exceeds max wallet.');
                }
                // On sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, 'Sell exceeds max transaction amount.');
                } else {
                    require(amount + balanceOf(to) <= maxWallet, 'Exceeds max wallet.');
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance > 0;

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

        bool takeFee = !swapping;

        // If any account is excluded from fees, remove fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            (uint256 buyFee, uint256 sellFee) = getTaxRates();

            if (automatedMarketMakerPairs[to]) {
                fees = amount * sellFee / 100;
            } else if (automatedMarketMakerPairs[from]) {
                fees = amount * buyFee / 100;
            }

            if (fees > 0) {
                uint256 timeElapsed = block.timestamp - taxStartTime;
                if (timeElapsed >= redirectionHours * 1 hours) {
                    // After the specified hours, redirect 100% of the fees to the project wallet
                    tokensForProject += fees;
                } else {
                    uint256 incubatorShare = fees * 20 / 100;
                    uint256 projectShare = fees - incubatorShare;

                    tokensForIncubator += incubatorShare;
                    tokensForProject += projectShare;
                }

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

            amount -= fees;
        }

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

    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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0,
            0,
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private nonReentrant {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForProject + tokensForIncubator;

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

        // Limit swap to 0.5% of total supply
        uint256 maxTokensToSwap = totalSupply() * 5 / 1000;
        if (contractBalance > maxTokensToSwap) {
            contractBalance = maxTokensToSwap;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForIncubator = ethBalance * tokensForIncubator / totalTokensToSwap;
        uint256 ethForProject = ethBalance - ethForIncubator;

        tokensForIncubator = 0;
        tokensForProject = 0;

        payable(incubatorWallet).transfer(ethForIncubator);
        payable(projectWallet).transfer(ethForProject);
    }

    // Rescue ETH from the contract to the owner's wallet
    function rescueETH() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        require(contractETHBalance > 0, "No ETH in contract");
        payable(owner()).transfer(contractETHBalance);
    }

    // Rescue ERC20 tokens from the contract to the owner's wallet
    function rescueTokens(address tokenAddress) external onlyOwner {
        IERC20 token = IERC20(tokenAddress);
        uint256 contractTokenBalance = token.balanceOf(address(this));
        require(contractTokenBalance > 0, "No tokens in contract");
        token.transfer(owner(), contractTokenBalance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalBuyFee","type":"uint256"}],"name":"BuyFeesUpdated","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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"IncubatorWalletUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"MaxTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRedirectionHours","type":"uint256"}],"name":"RedirectionHoursUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"RescueSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalSellFee","type":"uint256"}],"name":"SellFeesUpdated","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTaxRates","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"incubatorWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","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":"projectWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redirectionHours","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForIncubator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForProject","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateIncubatorWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRedirectionHours","type":"uint256"}],"name":"updateRedirectionHours","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateRescueSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805464ffffffff001916610100179055610870600e55348015610027575f80fd5b50604051806040016040528060058152602001642737b232bd60d91b815250604051806040016040528060048152602001634e4f444560e01b815250816003908161007291906108e0565b50600461007f82826108e0565b5050505f6100916104d360201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f905f8051602061333d833981519152908290a3506001600655600b805460ff1916601290811790915533905f906100ef90600a610a95565b6100fd906305f5e100610aaa565b9050606461010c826002610aaa565b6101169190610ac1565b6009556064610126826002610aaa565b6101309190610ac1565b600a55601e600f55602860105560078054741c812f13beb346678a134bf89480076e8d29970100610100600160a81b0319909116179055600880546001600160a01b0319167385dbe4ce3c809dac17e4b1d32a5a2478038a3ae11790555f466038036101b157507310ed43c718714eb63d5aa57b78b54704e256024e6102f5565b466061036101d4575073d99d1c33f9fc3444f8101754abc46c52416550d16102f5565b4661a86a036101f857507360ae616a2155ee3d9a68541ba4544862310933d46102f5565b4660890361021b575073a5e0829caced8ffdd4de3c43696c57f7d7a678ff6102f5565b4660fa0361023e575073f491e7b69e4244ad4002bc14e878a34207e38c296102f5565b466003036102615750737a250d5630b4cf539739df2c5dacb4c659f2488d6102f5565b46600114806102705750466004145b156102905750737a250d5630b4cf539739df2c5dacb4c659f2488d6102f5565b46612105036102b45750734752ba5dbc23f44d87826276bf6fd6b1c372ad246102f5565b60405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b21031b430b4b760791b60448201526064015b60405180910390fd5b806103018160016104d7565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610349573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061036d9190610ae0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103dc9190610ae0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610426573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044a9190610ae0565b6001600160a01b031660a08190526104639060016104d7565b60a051610471906001610580565b61047c8460016105d3565b6104873060016105d3565b61049461dead60016105d3565b61049f8460016104d7565b6104aa3060016104d7565b6104b761dead60016104d7565b6104c18484610678565b6104ca84610754565b50505050610b19565b3390565b6005546001600160a01b0316331461051e5760405162461bcd60e51b815260206004820181905260248201525f8051602061331d83398151915260448201526064016102ec565b6001600160a01b0382165f81815260146020908152604091829020805460ff19168515159081179091558251938452908301527f388758d239a7790471b273e3760fe65d6424024ca3adb4582f843cec8e71ba5e910160405180910390a15050565b6001600160a01b0382165f81815260156020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b0316331461061a5760405162461bcd60e51b815260206004820181905260248201525f8051602061331d83398151915260448201526064016102ec565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166106ce5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016102ec565b8060025f8282546106df9190610b06565b90915550506001600160a01b0382165f908152602081905260408120805483929061070b908490610b06565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b0316331461079b5760405162461bcd60e51b815260206004820181905260248201525f8051602061331d83398151915260448201526064016102ec565b6001600160a01b0381166108005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ec565b6005546040516001600160a01b038084169216905f8051602061333d833981519152905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061087057607f821691505b60208210810361088e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156108db57805f5260205f20601f840160051c810160208510156108b95750805b601f840160051c820191505b818110156108d8575f81556001016108c5565b50505b505050565b81516001600160401b038111156108f9576108f9610848565b61090d81610907845461085c565b84610894565b602080601f831160018114610940575f84156109295750858301515b5f19600386901b1c1916600185901b178555610997565b5f85815260208120601f198616915b8281101561096e5788860151825594840194600190910190840161094f565b508582101561098b57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156109ed57815f19048211156109d3576109d361099f565b808516156109e057918102915b93841c93908002906109b8565b509250929050565b5f82610a0357506001610a8f565b81610a0f57505f610a8f565b8160018114610a255760028114610a2f57610a4b565b6001915050610a8f565b60ff841115610a4057610a4061099f565b50506001821b610a8f565b5060208310610133831016604e8410600b8410161715610a6e575081810a610a8f565b610a7883836109b3565b805f1904821115610a8b57610a8b61099f565b0290505b92915050565b5f610aa360ff8416836109f5565b9392505050565b8082028115828204841417610a8f57610a8f61099f565b5f82610adb57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610af0575f80fd5b81516001600160a01b0381168114610aa3575f80fd5b80820180821115610a8f57610a8f61099f565b60805160a0516127c7610b565f395f8181610501015261136301525f81816103b90152818161228101528181612338015261237401526127c75ff3fe6080604052600436106102f5575f3560e01c80637571336a11610189578063bbc0c742116100d8578063dd62ed3e11610092578063ee40166e1161006d578063ee40166e14610920578063ee6bdf8914610935578063f2fde38b14610954578063f8b45b0514610973575f80fd5b8063dd62ed3e146108a8578063e8338a1c146108ec578063eba4c33314610901575f80fd5b8063bbc0c74214610807578063beb08ab914610826578063c02466681461084a578063c4bf91e714610869578063c8c8ebe41461087e578063d85ba06314610893575f80fd5b80639a7a23d611610143578063a96ad9cf1161011e578063a96ad9cf1461077c578063aa49802314610791578063b62496f5146107b0578063b8a7d108146107de575f80fd5b80639a7a23d61461071f578063a457c2d71461073e578063a9059cbb1461075d575f80fd5b80637571336a1461067d5780638a8c523c1461069c5780638da5cb5b146106b0578063924de9b7146106cd578063955b225b146106ec57806395d89b411461070b575f80fd5b806347b48be0116102455780636ddd1713116101ff578063715018a6116101da578063715018a614610617578063719276281461062b57806371fc46881461064a578063751039fc14610669575f80fd5b80636ddd1713146105ae57806370a08231146105ce57806370e6e18214610602575f80fd5b806347b48be0146104d157806349bd5a5e146104f05780634a62bb65146105235780634c24c51d146105415780634fbee193146105625780636a486a8e14610599575f80fd5b80631c499ab0116102b057806327c8f8351161028b57806327c8f835146104635780632e71c87714610478578063313ce5671461049757806339509351146104b2575f80fd5b80631c499ab01461041157806320800a001461043057806323b872dd14610444575f80fd5b8062ae3bf81461030057806306fdde0314610321578063095ea7b31461034b57806310d5de531461037a5780631694505e146103a857806318160ddd146103f3575f80fd5b366102fc57005b5f80fd5b34801561030b575f80fd5b5061031f61031a3660046123f9565b610988565b005b34801561032c575f80fd5b50610335610b03565b604051610342919061241b565b60405180910390f35b348015610356575f80fd5b5061036a610365366004612450565b610b93565b6040519015158152602001610342565b348015610385575f80fd5b5061036a6103943660046123f9565b60146020525f908152604090205460ff1681565b3480156103b3575f80fd5b506103db7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610342565b3480156103fe575f80fd5b506002545b604051908152602001610342565b34801561041c575f80fd5b5061031f61042b36600461247a565b610ba9565b34801561043b575f80fd5b5061031f610c89565b34801561044f575f80fd5b5061036a61045e366004612491565b610d31565b34801561046e575f80fd5b506103db61dead81565b348015610483575f80fd5b5061031f6104923660046123f9565b610d81565b3480156104a2575f80fd5b5060405160128152602001610342565b3480156104bd575f80fd5b5061036a6104cc366004612450565b610e07565b3480156104dc575f80fd5b5061031f6104eb36600461247a565b610e3d565b3480156104fb575f80fd5b506103db7f000000000000000000000000000000000000000000000000000000000000000081565b34801561052e575f80fd5b50600b5461036a90610100900460ff1681565b34801561054c575f80fd5b50600b5461036a90640100000000900460ff1681565b34801561056d575f80fd5b5061036a61057c3660046123f9565b6001600160a01b03165f9081526013602052604090205460ff1690565b3480156105a4575f80fd5b5061040360105481565b3480156105b9575f80fd5b50600b5461036a906301000000900460ff1681565b3480156105d9575f80fd5b506104036105e83660046123f9565b6001600160a01b03165f9081526020819052604090205490565b34801561060d575f80fd5b50610403600d5481565b348015610622575f80fd5b5061031f610f0d565b348015610636575f80fd5b5061031f6106453660046123f9565b610f80565b348015610655575f80fd5b5061031f61066436600461247a565b611011565b348015610674575f80fd5b5061036a6110c1565b348015610688575f80fd5b5061031f6106973660046124dc565b611126565b3480156106a7575f80fd5b5061031f6111b2565b3480156106bb575f80fd5b506005546001600160a01b03166103db565b3480156106d8575f80fd5b5061031f6106e7366004612513565b611238565b3480156106f7575f80fd5b5061031f610706366004612513565b6112af565b348015610716575f80fd5b50610335611328565b34801561072a575f80fd5b5061031f6107393660046124dc565b611337565b348015610749575f80fd5b5061036a610758366004612450565b6113e1565b348015610768575f80fd5b5061036a610777366004612450565b611417565b348015610787575f80fd5b50610403600e5481565b34801561079c575f80fd5b5061031f6107ab36600461247a565b611423565b3480156107bb575f80fd5b5061036a6107ca3660046123f9565b60156020525f908152604090205460ff1681565b3480156107e9575f80fd5b506107f2611507565b60408051928352602083019190915201610342565b348015610812575f80fd5b50600b5461036a9062010000900460ff1681565b348015610831575f80fd5b506007546103db9061010090046001600160a01b031681565b348015610855575f80fd5b5061031f6108643660046124dc565b6115c9565b348015610874575f80fd5b5061040360125481565b348015610889575f80fd5b5061040360095481565b34801561089e575f80fd5b50610403600f5481565b3480156108b3575f80fd5b506104036108c236600461252e565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156108f7575f80fd5b5061040360115481565b34801561090c575f80fd5b5061031f61091b36600461247a565b611651565b34801561092b575f80fd5b50610403600c5481565b348015610940575f80fd5b506008546103db906001600160a01b031681565b34801561095f575f80fd5b5061031f61096e3660046123f9565b61170b565b34801561097e575f80fd5b50610403600a5481565b6005546001600160a01b031633146109bb5760405162461bcd60e51b81526004016109b29061255a565b60405180910390fd5b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610a01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a25919061258f565b90505f8111610a6e5760405162461bcd60e51b8152602060048201526015602482015274139bc81d1bdad95b9cc81a5b8818dbdb9d1c9858dd605a1b60448201526064016109b2565b816001600160a01b031663a9059cbb610a8f6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610afd91906125a6565b50505050565b606060038054610b12906125c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906125c1565b8015610b895780601f10610b6057610100808354040283529160200191610b89565b820191905f5260205f20905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b5f610b9f3384846117f5565b5060015b92915050565b6005546001600160a01b03163314610bd35760405162461bcd60e51b81526004016109b29061255a565b6064610bde60025490565b610be990600161260d565b610bf39190612624565b811015610c4d5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b60648201526084016109b2565b600a8190556040518181527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace906020015b60405180910390a150565b6005546001600160a01b03163314610cb35760405162461bcd60e51b81526004016109b29061255a565b4780610cf65760405162461bcd60e51b8152602060048201526012602482015271139bc8115512081a5b8818dbdb9d1c9858dd60721b60448201526064016109b2565b6005546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610d2d573d5f803e3d5ffd5b5050565b5f610d3d848484611919565b6001600160a01b0384165f90815260016020908152604080832033808552925290912054610d77918691610d72908690612643565b6117f5565b5060019392505050565b6005546001600160a01b03163314610dab5760405162461bcd60e51b81526004016109b29061255a565b6008546040516001600160a01b03918216918316907fd5bab94e3f642caa9f25830fdd5537e2df93309890c3a49998c6d0eb0c8c053b905f90a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b9f918590610d72908690612656565b6005546001600160a01b03163314610e675760405162461bcd60e51b81526004016109b29061255a565b60018110158015610e7a57506108708111155b610ed85760405162461bcd60e51b815260206004820152602960248201527f4475726174696f6e206d757374206265206265747765656e203120616e64203260448201526831363020686f75727360b81b60648201526084016109b2565b600e8190556040518181527f64a8317ff01a351e27350b550c078035fcd4951e69c3b45135b2be48673a397d90602001610c7e565b6005546001600160a01b03163314610f375760405162461bcd60e51b81526004016109b29061255a565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610faa5760405162461bcd60e51b81526004016109b29061255a565b6007546040516001600160a01b036101009092048216918316907fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e7905f90a3600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b0316331461103b5760405162461bcd60e51b81526004016109b29061255a565b601e81111561108c5760405162461bcd60e51b815260206004820181905260248201527f546f74616c2062757920666565732063616e6e6f74206578636565642033302560448201526064016109b2565b600f8190556040518181527f491005465ab6f82fd10f4b13a1b1e5ca452bc4856b019f63775e33a6b1ad2feb90602001610c7e565b6005545f906001600160a01b031633146110ed5760405162461bcd60e51b81526004016109b29061255a565b600b805461ff00191690556040517f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef905f90a150600190565b6005546001600160a01b031633146111505760405162461bcd60e51b81526004016109b29061255a565b6001600160a01b0382165f81815260146020908152604091829020805460ff19168515159081179091558251938452908301527f388758d239a7790471b273e3760fe65d6424024ca3adb4582f843cec8e71ba5e910160405180910390a15050565b6005546001600160a01b031633146111dc5760405162461bcd60e51b81526004016109b29061255a565b600b805463ffff00001916630101000017905543600c81905542600d55601e600f5560286010556040519081527fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9239060200160405180910390a1565b6005546001600160a01b031633146112625760405162461bcd60e51b81526004016109b29061255a565b600b805482151563010000000263ff000000199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610c7e90831515815260200190565b6005546001600160a01b031633146112d95760405162461bcd60e51b81526004016109b29061255a565b600b80548215156401000000000264ff00000000199091161790556040517fcc6ba8b2cb05e1012c160fdd5a639e55fef8c9598383d1c8c625f4fa0cda5ccf90610c7e90831515815260200190565b606060048054610b12906125c1565b6005546001600160a01b031633146113615760405162461bcd60e51b81526004016109b29061255a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036113d75760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016109b2565b610d2d8282611f5d565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b9f918590610d72908690612643565b5f610b9f338484611919565b6005546001600160a01b0316331461144d5760405162461bcd60e51b81526004016109b29061255a565b606461145860025490565b61146390600161260d565b61146d9190612624565b8110156114d25760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b60648201526084016109b2565b60098190556040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac90602001610c7e565b600b545f90819062010000900460ff1661152357505f91829150565b5f600d54426115329190612643565b905061070881116115ba5761012c81116115525750601e92602892509050565b61025881116115675750601492601e92509050565b610384811161157c5750600f92601992509050565b6104b081116115915750600a92601492509050565b6105dc81116115a65750600792600f92509050565b61070881116115ba57506005928392509050565b600f5460105492509250509091565b6005546001600160a01b031633146115f35760405162461bcd60e51b81526004016109b29061255a565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461167b5760405162461bcd60e51b81526004016109b29061255a565b60288111156116d65760405162461bcd60e51b815260206004820152602160248201527f546f74616c2073656c6c20666565732063616e6e6f74206578636565642034306044820152602560f81b60648201526084016109b2565b60108190556040518181527f16df2c25b3392f376a685a3826b941b25140108d95899d6b1bd983feafbc1c5590602001610c7e565b6005546001600160a01b031633146117355760405162461bcd60e51b81526004016109b29061255a565b6001600160a01b03811661179a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b2565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109b2565b6001600160a01b0382166118b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109b2565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661193f5760405162461bcd60e51b81526004016109b290612669565b6001600160a01b0382166119655760405162461bcd60e51b81526004016109b2906126ae565b600b5462010000900460ff166119f7576001600160a01b0383165f9081526013602052604090205460ff16806119b257506001600160a01b0382165f9081526013602052604090205460ff165b6119f75760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109b2565b805f03611a0e57611a0983835f611fb0565b505050565b600b54610100900460ff1615611cea576005546001600160a01b03848116911614801590611a4a57506005546001600160a01b03838116911614155b8015611a5e57506001600160a01b03821615155b8015611a7557506001600160a01b03821661dead14155b8015611abb57506001600160a01b0383165f9081526013602052604090205460ff1680611ab957506001600160a01b0382165f9081526013602052604090205460ff165b155b8015611aca575060075460ff16155b15611cea576001600160a01b0383165f9081526015602052604090205460ff168015611b0e57506001600160a01b0382165f9081526014602052604090205460ff16155b15611bdf57600954811115611b715760405162461bcd60e51b815260206004820152602360248201527f4275792065786365656473206d6178207472616e73616374696f6e20616d6f75604482015262373a1760e91b60648201526084016109b2565b600a546001600160a01b0383165f90815260208190526040902054611b969083612656565b1115611bda5760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b2399036b0bc103bb0b63632ba1760691b60448201526064016109b2565b611cea565b6001600160a01b0382165f9081526015602052604090205460ff168015611c1e57506001600160a01b0383165f9081526014602052604090205460ff16155b15611c8157600954811115611bda5760405162461bcd60e51b8152602060048201526024808201527f53656c6c2065786365656473206d6178207472616e73616374696f6e20616d6f6044820152633ab73a1760e11b60648201526084016109b2565b600a546001600160a01b0383165f90815260208190526040902054611ca69083612656565b1115611cea5760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b2399036b0bc103bb0b63632ba1760691b60448201526064016109b2565b305f9081526020819052604090205480158015908190611d135750600b546301000000900460ff165b8015611d22575060075460ff16155b8015611d4657506001600160a01b0385165f9081526015602052604090205460ff16155b8015611d6a57506001600160a01b0385165f9081526013602052604090205460ff16155b8015611d8e57506001600160a01b0384165f9081526013602052604090205460ff16155b15611db3576007805460ff19166001179055611da861209b565b6007805460ff191690555b6007546001600160a01b0386165f9081526013602052604090205460ff91821615911680611df857506001600160a01b0385165f9081526013602052604090205460ff165b15611e0057505f5b5f8115611f49575f80611e11611507565b6001600160a01b038a165f90815260156020526040902054919350915060ff1615611e53576064611e42828961260d565b611e4c9190612624565b9250611e8c565b6001600160a01b0389165f9081526015602052604090205460ff1615611e8c576064611e7f838961260d565b611e899190612624565b92505b8215611f3a575f600d5442611ea19190612643565b9050600e54610e10611eb3919061260d565b8110611ed5578360115f828254611eca9190612656565b90915550611f2d9050565b5f6064611ee386601461260d565b611eed9190612624565b90505f611efa8287612643565b90508160125f828254611f0d9190612656565b925050819055508060115f828254611f259190612656565b909155505050505b611f388a3086611fb0565b505b611f448388612643565b965050505b611f54878787611fb0565b50505050505050565b6001600160a01b0382165f81815260156020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611fd65760405162461bcd60e51b81526004016109b290612669565b6001600160a01b038216611ffc5760405162461bcd60e51b81526004016109b2906126ae565b6001600160a01b0383165f9081526020819052604081208054839290612023908490612643565b90915550506001600160a01b0382165f908152602081905260408120805483929061204f908490612656565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161190c91815260200190565b6002600654036120ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109b2565b6002600655305f9081526020819052604081205490505f6012546011546121149190612656565b9050811580612121575080155b1561212d575050612225565b5f6103e861213a60025490565b61214590600561260d565b61214f9190612624565b90508083111561215d578092505b82476121688261222c565b5f6121738247612643565b90505f8560125483612185919061260d565b61218f9190612624565b90505f61219c8284612643565b5f601281905560118190556008546040519293506001600160a01b03169184156108fc0291859190818181858888f193505050501580156121df573d5f803e3d5ffd5b506007546040516101009091046001600160a01b0316906108fc8315029083905f818181858888f1935050505015801561221b573d5f803e3d5ffd5b5050505050505050505b6001600655565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061225f5761225f6126f1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ff9190612705565b81600181518110612312576123126126f1565b60200260200101906001600160a01b031690816001600160a01b03168152505061235d307f0000000000000000000000000000000000000000000000000000000000000000846117f5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123b19085905f90869030904290600401612720565b5f604051808303815f87803b1580156123c8575f80fd5b505af11580156123da573d5f803e3d5ffd5b505050505050565b6001600160a01b03811681146123f6575f80fd5b50565b5f60208284031215612409575f80fd5b8135612414816123e2565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215612461575f80fd5b823561246c816123e2565b946020939093013593505050565b5f6020828403121561248a575f80fd5b5035919050565b5f805f606084860312156124a3575f80fd5b83356124ae816123e2565b925060208401356124be816123e2565b929592945050506040919091013590565b80151581146123f6575f80fd5b5f80604083850312156124ed575f80fd5b82356124f8816123e2565b91506020830135612508816124cf565b809150509250929050565b5f60208284031215612523575f80fd5b8135612414816124cf565b5f806040838503121561253f575f80fd5b823561254a816123e2565b91506020830135612508816123e2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f6020828403121561259f575f80fd5b5051919050565b5f602082840312156125b6575f80fd5b8151612414816124cf565b600181811c908216806125d557607f821691505b6020821081036125f357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ba357610ba36125f9565b5f8261263e57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610ba357610ba36125f9565b80820180821115610ba357610ba36125f9565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612715575f80fd5b8151612414816123e2565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156127705784516001600160a01b03168352938301939183019160010161274b565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220ea2b08f0288b3144b314e7e76bd5e205bc44337b205d50c318a46912c30b851e64736f6c634300081900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106102f5575f3560e01c80637571336a11610189578063bbc0c742116100d8578063dd62ed3e11610092578063ee40166e1161006d578063ee40166e14610920578063ee6bdf8914610935578063f2fde38b14610954578063f8b45b0514610973575f80fd5b8063dd62ed3e146108a8578063e8338a1c146108ec578063eba4c33314610901575f80fd5b8063bbc0c74214610807578063beb08ab914610826578063c02466681461084a578063c4bf91e714610869578063c8c8ebe41461087e578063d85ba06314610893575f80fd5b80639a7a23d611610143578063a96ad9cf1161011e578063a96ad9cf1461077c578063aa49802314610791578063b62496f5146107b0578063b8a7d108146107de575f80fd5b80639a7a23d61461071f578063a457c2d71461073e578063a9059cbb1461075d575f80fd5b80637571336a1461067d5780638a8c523c1461069c5780638da5cb5b146106b0578063924de9b7146106cd578063955b225b146106ec57806395d89b411461070b575f80fd5b806347b48be0116102455780636ddd1713116101ff578063715018a6116101da578063715018a614610617578063719276281461062b57806371fc46881461064a578063751039fc14610669575f80fd5b80636ddd1713146105ae57806370a08231146105ce57806370e6e18214610602575f80fd5b806347b48be0146104d157806349bd5a5e146104f05780634a62bb65146105235780634c24c51d146105415780634fbee193146105625780636a486a8e14610599575f80fd5b80631c499ab0116102b057806327c8f8351161028b57806327c8f835146104635780632e71c87714610478578063313ce5671461049757806339509351146104b2575f80fd5b80631c499ab01461041157806320800a001461043057806323b872dd14610444575f80fd5b8062ae3bf81461030057806306fdde0314610321578063095ea7b31461034b57806310d5de531461037a5780631694505e146103a857806318160ddd146103f3575f80fd5b366102fc57005b5f80fd5b34801561030b575f80fd5b5061031f61031a3660046123f9565b610988565b005b34801561032c575f80fd5b50610335610b03565b604051610342919061241b565b60405180910390f35b348015610356575f80fd5b5061036a610365366004612450565b610b93565b6040519015158152602001610342565b348015610385575f80fd5b5061036a6103943660046123f9565b60146020525f908152604090205460ff1681565b3480156103b3575f80fd5b506103db7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610342565b3480156103fe575f80fd5b506002545b604051908152602001610342565b34801561041c575f80fd5b5061031f61042b36600461247a565b610ba9565b34801561043b575f80fd5b5061031f610c89565b34801561044f575f80fd5b5061036a61045e366004612491565b610d31565b34801561046e575f80fd5b506103db61dead81565b348015610483575f80fd5b5061031f6104923660046123f9565b610d81565b3480156104a2575f80fd5b5060405160128152602001610342565b3480156104bd575f80fd5b5061036a6104cc366004612450565b610e07565b3480156104dc575f80fd5b5061031f6104eb36600461247a565b610e3d565b3480156104fb575f80fd5b506103db7f000000000000000000000000d679c1df5993c4c84543676fc293285d99b02c2981565b34801561052e575f80fd5b50600b5461036a90610100900460ff1681565b34801561054c575f80fd5b50600b5461036a90640100000000900460ff1681565b34801561056d575f80fd5b5061036a61057c3660046123f9565b6001600160a01b03165f9081526013602052604090205460ff1690565b3480156105a4575f80fd5b5061040360105481565b3480156105b9575f80fd5b50600b5461036a906301000000900460ff1681565b3480156105d9575f80fd5b506104036105e83660046123f9565b6001600160a01b03165f9081526020819052604090205490565b34801561060d575f80fd5b50610403600d5481565b348015610622575f80fd5b5061031f610f0d565b348015610636575f80fd5b5061031f6106453660046123f9565b610f80565b348015610655575f80fd5b5061031f61066436600461247a565b611011565b348015610674575f80fd5b5061036a6110c1565b348015610688575f80fd5b5061031f6106973660046124dc565b611126565b3480156106a7575f80fd5b5061031f6111b2565b3480156106bb575f80fd5b506005546001600160a01b03166103db565b3480156106d8575f80fd5b5061031f6106e7366004612513565b611238565b3480156106f7575f80fd5b5061031f610706366004612513565b6112af565b348015610716575f80fd5b50610335611328565b34801561072a575f80fd5b5061031f6107393660046124dc565b611337565b348015610749575f80fd5b5061036a610758366004612450565b6113e1565b348015610768575f80fd5b5061036a610777366004612450565b611417565b348015610787575f80fd5b50610403600e5481565b34801561079c575f80fd5b5061031f6107ab36600461247a565b611423565b3480156107bb575f80fd5b5061036a6107ca3660046123f9565b60156020525f908152604090205460ff1681565b3480156107e9575f80fd5b506107f2611507565b60408051928352602083019190915201610342565b348015610812575f80fd5b50600b5461036a9062010000900460ff1681565b348015610831575f80fd5b506007546103db9061010090046001600160a01b031681565b348015610855575f80fd5b5061031f6108643660046124dc565b6115c9565b348015610874575f80fd5b5061040360125481565b348015610889575f80fd5b5061040360095481565b34801561089e575f80fd5b50610403600f5481565b3480156108b3575f80fd5b506104036108c236600461252e565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156108f7575f80fd5b5061040360115481565b34801561090c575f80fd5b5061031f61091b36600461247a565b611651565b34801561092b575f80fd5b50610403600c5481565b348015610940575f80fd5b506008546103db906001600160a01b031681565b34801561095f575f80fd5b5061031f61096e3660046123f9565b61170b565b34801561097e575f80fd5b50610403600a5481565b6005546001600160a01b031633146109bb5760405162461bcd60e51b81526004016109b29061255a565b60405180910390fd5b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610a01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a25919061258f565b90505f8111610a6e5760405162461bcd60e51b8152602060048201526015602482015274139bc81d1bdad95b9cc81a5b8818dbdb9d1c9858dd605a1b60448201526064016109b2565b816001600160a01b031663a9059cbb610a8f6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610afd91906125a6565b50505050565b606060038054610b12906125c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906125c1565b8015610b895780601f10610b6057610100808354040283529160200191610b89565b820191905f5260205f20905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b5f610b9f3384846117f5565b5060015b92915050565b6005546001600160a01b03163314610bd35760405162461bcd60e51b81526004016109b29061255a565b6064610bde60025490565b610be990600161260d565b610bf39190612624565b811015610c4d5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b60648201526084016109b2565b600a8190556040518181527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace906020015b60405180910390a150565b6005546001600160a01b03163314610cb35760405162461bcd60e51b81526004016109b29061255a565b4780610cf65760405162461bcd60e51b8152602060048201526012602482015271139bc8115512081a5b8818dbdb9d1c9858dd60721b60448201526064016109b2565b6005546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610d2d573d5f803e3d5ffd5b5050565b5f610d3d848484611919565b6001600160a01b0384165f90815260016020908152604080832033808552925290912054610d77918691610d72908690612643565b6117f5565b5060019392505050565b6005546001600160a01b03163314610dab5760405162461bcd60e51b81526004016109b29061255a565b6008546040516001600160a01b03918216918316907fd5bab94e3f642caa9f25830fdd5537e2df93309890c3a49998c6d0eb0c8c053b905f90a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b9f918590610d72908690612656565b6005546001600160a01b03163314610e675760405162461bcd60e51b81526004016109b29061255a565b60018110158015610e7a57506108708111155b610ed85760405162461bcd60e51b815260206004820152602960248201527f4475726174696f6e206d757374206265206265747765656e203120616e64203260448201526831363020686f75727360b81b60648201526084016109b2565b600e8190556040518181527f64a8317ff01a351e27350b550c078035fcd4951e69c3b45135b2be48673a397d90602001610c7e565b6005546001600160a01b03163314610f375760405162461bcd60e51b81526004016109b29061255a565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610faa5760405162461bcd60e51b81526004016109b29061255a565b6007546040516001600160a01b036101009092048216918316907fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e7905f90a3600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b0316331461103b5760405162461bcd60e51b81526004016109b29061255a565b601e81111561108c5760405162461bcd60e51b815260206004820181905260248201527f546f74616c2062757920666565732063616e6e6f74206578636565642033302560448201526064016109b2565b600f8190556040518181527f491005465ab6f82fd10f4b13a1b1e5ca452bc4856b019f63775e33a6b1ad2feb90602001610c7e565b6005545f906001600160a01b031633146110ed5760405162461bcd60e51b81526004016109b29061255a565b600b805461ff00191690556040517f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef905f90a150600190565b6005546001600160a01b031633146111505760405162461bcd60e51b81526004016109b29061255a565b6001600160a01b0382165f81815260146020908152604091829020805460ff19168515159081179091558251938452908301527f388758d239a7790471b273e3760fe65d6424024ca3adb4582f843cec8e71ba5e910160405180910390a15050565b6005546001600160a01b031633146111dc5760405162461bcd60e51b81526004016109b29061255a565b600b805463ffff00001916630101000017905543600c81905542600d55601e600f5560286010556040519081527fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9239060200160405180910390a1565b6005546001600160a01b031633146112625760405162461bcd60e51b81526004016109b29061255a565b600b805482151563010000000263ff000000199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610c7e90831515815260200190565b6005546001600160a01b031633146112d95760405162461bcd60e51b81526004016109b29061255a565b600b80548215156401000000000264ff00000000199091161790556040517fcc6ba8b2cb05e1012c160fdd5a639e55fef8c9598383d1c8c625f4fa0cda5ccf90610c7e90831515815260200190565b606060048054610b12906125c1565b6005546001600160a01b031633146113615760405162461bcd60e51b81526004016109b29061255a565b7f000000000000000000000000d679c1df5993c4c84543676fc293285d99b02c296001600160a01b0316826001600160a01b0316036113d75760405162461bcd60e51b815260206004820152601260248201527121b0b73737ba103932b6b7bb32903830b4b960711b60448201526064016109b2565b610d2d8282611f5d565b335f8181526001602090815260408083206001600160a01b03871684529091528120549091610b9f918590610d72908690612643565b5f610b9f338484611919565b6005546001600160a01b0316331461144d5760405162461bcd60e51b81526004016109b29061255a565b606461145860025490565b61146390600161260d565b61146d9190612624565b8110156114d25760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b60648201526084016109b2565b60098190556040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac90602001610c7e565b600b545f90819062010000900460ff1661152357505f91829150565b5f600d54426115329190612643565b905061070881116115ba5761012c81116115525750601e92602892509050565b61025881116115675750601492601e92509050565b610384811161157c5750600f92601992509050565b6104b081116115915750600a92601492509050565b6105dc81116115a65750600792600f92509050565b61070881116115ba57506005928392509050565b600f5460105492509250509091565b6005546001600160a01b031633146115f35760405162461bcd60e51b81526004016109b29061255a565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461167b5760405162461bcd60e51b81526004016109b29061255a565b60288111156116d65760405162461bcd60e51b815260206004820152602160248201527f546f74616c2073656c6c20666565732063616e6e6f74206578636565642034306044820152602560f81b60648201526084016109b2565b60108190556040518181527f16df2c25b3392f376a685a3826b941b25140108d95899d6b1bd983feafbc1c5590602001610c7e565b6005546001600160a01b031633146117355760405162461bcd60e51b81526004016109b29061255a565b6001600160a01b03811661179a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b2565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109b2565b6001600160a01b0382166118b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109b2565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661193f5760405162461bcd60e51b81526004016109b290612669565b6001600160a01b0382166119655760405162461bcd60e51b81526004016109b2906126ae565b600b5462010000900460ff166119f7576001600160a01b0383165f9081526013602052604090205460ff16806119b257506001600160a01b0382165f9081526013602052604090205460ff165b6119f75760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109b2565b805f03611a0e57611a0983835f611fb0565b505050565b600b54610100900460ff1615611cea576005546001600160a01b03848116911614801590611a4a57506005546001600160a01b03838116911614155b8015611a5e57506001600160a01b03821615155b8015611a7557506001600160a01b03821661dead14155b8015611abb57506001600160a01b0383165f9081526013602052604090205460ff1680611ab957506001600160a01b0382165f9081526013602052604090205460ff165b155b8015611aca575060075460ff16155b15611cea576001600160a01b0383165f9081526015602052604090205460ff168015611b0e57506001600160a01b0382165f9081526014602052604090205460ff16155b15611bdf57600954811115611b715760405162461bcd60e51b815260206004820152602360248201527f4275792065786365656473206d6178207472616e73616374696f6e20616d6f75604482015262373a1760e91b60648201526084016109b2565b600a546001600160a01b0383165f90815260208190526040902054611b969083612656565b1115611bda5760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b2399036b0bc103bb0b63632ba1760691b60448201526064016109b2565b611cea565b6001600160a01b0382165f9081526015602052604090205460ff168015611c1e57506001600160a01b0383165f9081526014602052604090205460ff16155b15611c8157600954811115611bda5760405162461bcd60e51b8152602060048201526024808201527f53656c6c2065786365656473206d6178207472616e73616374696f6e20616d6f6044820152633ab73a1760e11b60648201526084016109b2565b600a546001600160a01b0383165f90815260208190526040902054611ca69083612656565b1115611cea5760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b2399036b0bc103bb0b63632ba1760691b60448201526064016109b2565b305f9081526020819052604090205480158015908190611d135750600b546301000000900460ff165b8015611d22575060075460ff16155b8015611d4657506001600160a01b0385165f9081526015602052604090205460ff16155b8015611d6a57506001600160a01b0385165f9081526013602052604090205460ff16155b8015611d8e57506001600160a01b0384165f9081526013602052604090205460ff16155b15611db3576007805460ff19166001179055611da861209b565b6007805460ff191690555b6007546001600160a01b0386165f9081526013602052604090205460ff91821615911680611df857506001600160a01b0385165f9081526013602052604090205460ff165b15611e0057505f5b5f8115611f49575f80611e11611507565b6001600160a01b038a165f90815260156020526040902054919350915060ff1615611e53576064611e42828961260d565b611e4c9190612624565b9250611e8c565b6001600160a01b0389165f9081526015602052604090205460ff1615611e8c576064611e7f838961260d565b611e899190612624565b92505b8215611f3a575f600d5442611ea19190612643565b9050600e54610e10611eb3919061260d565b8110611ed5578360115f828254611eca9190612656565b90915550611f2d9050565b5f6064611ee386601461260d565b611eed9190612624565b90505f611efa8287612643565b90508160125f828254611f0d9190612656565b925050819055508060115f828254611f259190612656565b909155505050505b611f388a3086611fb0565b505b611f448388612643565b965050505b611f54878787611fb0565b50505050505050565b6001600160a01b0382165f81815260156020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611fd65760405162461bcd60e51b81526004016109b290612669565b6001600160a01b038216611ffc5760405162461bcd60e51b81526004016109b2906126ae565b6001600160a01b0383165f9081526020819052604081208054839290612023908490612643565b90915550506001600160a01b0382165f908152602081905260408120805483929061204f908490612656565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161190c91815260200190565b6002600654036120ed5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109b2565b6002600655305f9081526020819052604081205490505f6012546011546121149190612656565b9050811580612121575080155b1561212d575050612225565b5f6103e861213a60025490565b61214590600561260d565b61214f9190612624565b90508083111561215d578092505b82476121688261222c565b5f6121738247612643565b90505f8560125483612185919061260d565b61218f9190612624565b90505f61219c8284612643565b5f601281905560118190556008546040519293506001600160a01b03169184156108fc0291859190818181858888f193505050501580156121df573d5f803e3d5ffd5b506007546040516101009091046001600160a01b0316906108fc8315029083905f818181858888f1935050505015801561221b573d5f803e3d5ffd5b5050505050505050505b6001600655565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061225f5761225f6126f1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ff9190612705565b81600181518110612312576123126126f1565b60200260200101906001600160a01b031690816001600160a01b03168152505061235d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117f5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123b19085905f90869030904290600401612720565b5f604051808303815f87803b1580156123c8575f80fd5b505af11580156123da573d5f803e3d5ffd5b505050505050565b6001600160a01b03811681146123f6575f80fd5b50565b5f60208284031215612409575f80fd5b8135612414816123e2565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215612461575f80fd5b823561246c816123e2565b946020939093013593505050565b5f6020828403121561248a575f80fd5b5035919050565b5f805f606084860312156124a3575f80fd5b83356124ae816123e2565b925060208401356124be816123e2565b929592945050506040919091013590565b80151581146123f6575f80fd5b5f80604083850312156124ed575f80fd5b82356124f8816123e2565b91506020830135612508816124cf565b809150509250929050565b5f60208284031215612523575f80fd5b8135612414816124cf565b5f806040838503121561253f575f80fd5b823561254a816123e2565b91506020830135612508816123e2565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f6020828403121561259f575f80fd5b5051919050565b5f602082840312156125b6575f80fd5b8151612414816124cf565b600181811c908216806125d557607f821691505b6020821081036125f357634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ba357610ba36125f9565b5f8261263e57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610ba357610ba36125f9565b80820180821115610ba357610ba36125f9565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612715575f80fd5b8151612414816123e2565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156127705784516001600160a01b03168352938301939183019160010161274b565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220ea2b08f0288b3144b314e7e76bd5e205bc44337b205d50c318a46912c30b851e64736f6c63430008190033

Deployed Bytecode Sourcemap

14716:15287:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29686:314;;;;;;;;;;-1:-1:-1;29686:314:0;;;;;:::i;:::-;;:::i;:::-;;10626:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11540:169;;;;;;;;;;-1:-1:-1;11540:169:0;;;;;:::i;:::-;;:::i;:::-;;;1310:14:1;;1303:22;1285:41;;1273:2;1258:18;11540:169:0;1145:187:1;15723:63:0;;;;;;;;;;-1:-1:-1;15723:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14773:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1527:32:1;;;1509:51;;1497:2;1482:18;14773:51:0;1337:229:1;10947:108:0;;;;;;;;;;-1:-1:-1;11035:12:0;;10947:108;;;1717:25:1;;;1705:2;1690:18;10947:108:0;1571:177:1;20616:230:0;;;;;;;;;;-1:-1:-1;20616:230:0;;;;;:::i;:::-;;:::i;29381:229::-;;;;;;;;;;;;;:::i;11717:274::-;;;;;;;;;;-1:-1:-1;11717:274:0;;;;;:::i;:::-;;:::i;14876:53::-;;;;;;;;;;;;14922:6;14876:53;;22241:181;;;;;;;;;;-1:-1:-1;22241:181:0;;;;;:::i;:::-;;:::i;10846:93::-;;;;;;;;;;-1:-1:-1;10846:93:0;;10929:2;2749:36:1;;2737:2;2722:18;10846:93:0;2607:184:1;11999:215:0;;;;;;;;;;-1:-1:-1;11999:215:0;;;;;:::i;:::-;;:::i;22430:305::-;;;;;;;;;;-1:-1:-1;22430:305:0;;;;;:::i;:::-;;:::i;14831:38::-;;;;;;;;;;;;;;;15147:33;;;;;;;;;;-1:-1:-1;15147:33:0;;;;;;;;;;;15265:30;;;;;;;;;;-1:-1:-1;15265:30:0;;;;;;;;;;;22745:128;;;;;;;;;;-1:-1:-1;22745:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;22837:28:0;22813:4;22837:28;;;:19;:28;;;;;;;;;22745:128;15491:28;;;;;;;;;;;;;;;;15227:31;;;;;;;;;;-1:-1:-1;15227:31:0;;;;;;;;;;;11063:127;;;;;;;;;;-1:-1:-1;11063:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;11164:18:0;11137:7;11164:18;;;;;;;;;;;;11063:127;15344:27;;;;;;;;;;;;;;;;14309:148;;;;;;;;;;;;;:::i;22060:173::-;;;;;;;;;;-1:-1:-1;22060:173:0;;;;;:::i;:::-;;:::i;23835:216::-;;;;;;;;;;-1:-1:-1;23835:216:0;;;;;:::i;:::-;;:::i;20103:152::-;;;;;;;;;;;;;:::i;20854:200::-;;;;;;;;;;-1:-1:-1;20854:200:0;;;;;:::i;:::-;;:::i;19714:336::-;;;;;;;;;;;;;:::i;14095:79::-;;;;;;;;;;-1:-1:-1;14160:6:0;;-1:-1:-1;;;;;14160:6:0;14095:79;;21121:143;;;;;;;;;;-1:-1:-1;21121:143:0;;;;;:::i;:::-;;:::i;21315:140::-;;;;;;;;;;-1:-1:-1;21315:140:0;;;;;:::i;:::-;;:::i;10734:104::-;;;;;;;;;;;;;:::i;21653:205::-;;;;;;;;;;-1:-1:-1;21653:205:0;;;;;:::i;:::-;;:::i;12222:225::-;;;;;;;;;;-1:-1:-1;12222:225:0;;;;;:::i;:::-;;:::i;11198:175::-;;;;;;;;;;-1:-1:-1;11198:175:0;;;;;:::i;:::-;;:::i;15378:38::-;;;;;;;;;;;;;;;;20301:274;;;;;;;;;;-1:-1:-1;20301:274:0;;;;;:::i;:::-;;:::i;15819:57::-;;;;;;;;;;-1:-1:-1;15819:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22912:915;;;;;;;;;;;;;:::i;:::-;;;;3726:25:1;;;3782:2;3767:18;;3760:34;;;;3699:18;22912:915:0;3552:248:1;15187:33:0;;;;;;;;;;-1:-1:-1;15187:33:0;;;;;;;;;;;14968:28;;;;;;;;;;-1:-1:-1;14968:28:0;;;;;;;-1:-1:-1;;;;;14968:28:0;;;21463:182;;;;;;;;;;-1:-1:-1;21463:182:0;;;;;:::i;:::-;;:::i;15566:33::-;;;;;;;;;;;;;;;;15042:35;;;;;;;;;;;;;;;;15457:27;;;;;;;;;;;;;;;;11381:151;;;;;;;;;;-1:-1:-1;11381:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11497:18:0;;;11470:7;11497:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11381:151;15528:31;;;;;;;;;;;;;;;;24059:224;;;;;;;;;;-1:-1:-1;24059:224:0;;;;;:::i;:::-;;:::i;15304:33::-;;;;;;;;;;;;;;;;15003:30;;;;;;;;;;-1:-1:-1;15003:30:0;;;;-1:-1:-1;;;;;15003:30:0;;;14465:244;;;;;;;;;;-1:-1:-1;14465:244:0;;;;;:::i;:::-;;:::i;15084:24::-;;;;;;;;;;;;;;;;29686:314;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;;;;;;;;;29837:30:::1;::::0;-1:-1:-1;;;29837:30:0;;29861:4:::1;29837:30;::::0;::::1;1509:51:1::0;29782:12:0;;29760::::1;::::0;-1:-1:-1;;;;;29837:15:0;::::1;::::0;::::1;::::0;1482:18:1;;29837:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29806:61;;29909:1;29886:20;:24;29878:58;;;::::0;-1:-1:-1;;;29878:58:0;;4950:2:1;29878:58:0::1;::::0;::::1;4932:21:1::0;4989:2;4969:18;;;4962:30;-1:-1:-1;;;5008:18:1;;;5001:51;5069:18;;29878:58:0::1;4748:345:1::0;29878:58:0::1;29947:5;-1:-1:-1::0;;;;;29947:14:0::1;;29962:7;14160:6:::0;;-1:-1:-1;;;;;14160:6:0;;14095:79;29962:7:::1;29947:45;::::0;-1:-1:-1;;;;;;29947:45:0::1;::::0;;;;;;-1:-1:-1;;;;;5290:32:1;;;29947:45:0::1;::::0;::::1;5272:51:1::0;5339:18;;;5332:34;;;5245:18;;29947:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29749:251;;29686:314:::0;:::o;10626:100::-;10680:13;10713:5;10706:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10626:100;:::o;11540:169::-;11623:4;11640:39;691:10;11663:7;11672:6;11640:8;:39::i;:::-;-1:-1:-1;11697:4:0;11540:169;;;;;:::o;20616:230::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;20726:3:::1;20706:13;11035:12:::0;;;10947:108;20706:13:::1;:17;::::0;20722:1:::1;20706:17;:::i;:::-;:23;;;;:::i;:::-;20695:6;:35;;20687:82;;;::::0;-1:-1:-1;;;20687:82:0;;6741:2:1;20687:82:0::1;::::0;::::1;6723:21:1::0;6780:2;6760:18;;;6753:30;6819:34;6799:18;;;6792:62;-1:-1:-1;;;6870:18:1;;;6863:32;6912:19;;20687:82:0::1;6539:398:1::0;20687:82:0::1;20780:9;:18:::0;;;20814:24:::1;::::0;1717:25:1;;;20814:24:0::1;::::0;1705:2:1;1690:18;20814:24:0::1;;;;;;;;20616:230:::0;:::o;29381:229::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;29461:21:::1;29501:22:::0;29493:53:::1;;;::::0;-1:-1:-1;;;29493:53:0;;7144:2:1;29493:53:0::1;::::0;::::1;7126:21:1::0;7183:2;7163:18;;;7156:30;-1:-1:-1;;;7202:18:1;;;7195:48;7260:18;;29493:53:0::1;6942:342:1::0;29493:53:0::1;14160:6:::0;;29557:45:::1;::::0;-1:-1:-1;;;;;14160:6:0;;;;29557:45;::::1;;;::::0;29583:18;;29557:45:::1;::::0;;;29583:18;14160:6;29557:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;29421:189;29381:229::o:0;11717:274::-;11823:4;11840:36;11850:6;11858:9;11869:6;11840:9;:36::i;:::-;-1:-1:-1;;;;;11918:19:0;;;;;;:11;:19;;;;;;;;691:10;11918:33;;;;;;;;;11887:74;;11896:6;;11918:42;;11954:6;;11918:42;:::i;:::-;11887:8;:74::i;:::-;-1:-1:-1;11979:4:0;11717:274;;;;;:::o;22241:181::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;22360:15:::1;::::0;22326:50:::1;::::0;-1:-1:-1;;;;;22360:15:0;;::::1;::::0;22326:50;::::1;::::0;::::1;::::0;22360:15:::1;::::0;22326:50:::1;22387:15;:27:::0;;-1:-1:-1;;;;;;22387:27:0::1;-1:-1:-1::0;;;;;22387:27:0;;;::::1;::::0;;;::::1;::::0;;22241:181::o;11999:215::-;691:10;12087:4;12136:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12136:34:0;;;;;;;;;;12087:4;;12104:80;;12127:7;;12136:47;;12173:10;;12136:47;:::i;22430:305::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;22548:1:::1;22525:19;:24;;:55;;;;;22576:4;22553:19;:27;;22525:55;22517:109;;;::::0;-1:-1:-1;;;22517:109:0;;7754:2:1;22517:109:0::1;::::0;::::1;7736:21:1::0;7793:2;7773:18;;;7766:30;7832:34;7812:18;;;7805:62;-1:-1:-1;;;7883:18:1;;;7876:39;7932:19;;22517:109:0::1;7552:405:1::0;22517:109:0::1;22633:16;:38:::0;;;22683:44:::1;::::0;1717:25:1;;;22683:44:0::1;::::0;1705:2:1;1690:18;22683:44:0::1;1571:177:1::0;14309:148:0;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;14400:6:::1;::::0;14379:40:::1;::::0;14416:1:::1;::::0;-1:-1:-1;;;;;14400:6:0::1;::::0;14379:40:::1;::::0;14416:1;;14379:40:::1;14430:6;:19:::0;;-1:-1:-1;;;;;;14430:19:0::1;::::0;;14309:148::o;22060:173::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;22175:13:::1;::::0;22143:46:::1;::::0;-1:-1:-1;;;;;22175:13:0::1;::::0;;::::1;::::0;::::1;::::0;22143:46;::::1;::::0;::::1;::::0;;;::::1;22200:13;:25:::0;;-1:-1:-1;;;;;22200:25:0;;::::1;;;-1:-1:-1::0;;;;;;22200:25:0;;::::1;::::0;;;::::1;::::0;;22060:173::o;23835:216::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;23928:2:::1;23915:9;:15;;23907:60;;;::::0;-1:-1:-1;;;23907:60:0;;8164:2:1;23907:60:0::1;::::0;::::1;8146:21:1::0;;;8183:18;;;8176:30;8242:34;8222:18;;;8215:62;8294:18;;23907:60:0::1;7962:356:1::0;23907:60:0::1;23978:12;:24:::0;;;24018:25:::1;::::0;1717::1;;;24018::0::1;::::0;1705:2:1;1690:18;24018:25:0::1;1571:177:1::0;20103:152:0;14222:6;;20155:4;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;20172:14:::1;:22:::0;;-1:-1:-1;;20172:22:0::1;::::0;;20210:15:::1;::::0;::::1;::::0;20189:5:::1;::::0;20210:15:::1;-1:-1:-1::0;20243:4:0::1;20103:152:::0;:::o;20854:200::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20944:39:0;::::1;;::::0;;;:31:::1;:39;::::0;;;;;;;;:46;;-1:-1:-1;;20944:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21006:40;;8491:51:1;;;8558:18;;;8551:50;21006:40:0::1;::::0;8464:18:1;21006:40:0::1;;;;;;;20854:200:::0;;:::o;19714:336::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;19769:13:::1;:20:::0;;-1:-1:-1;;19800:18:0;;;;;19850:12:::1;19829:18;:33:::0;;;19888:15:::1;19873:12;:30:::0;19965:2:::1;19950:12;:17:::0;19994:2:::1;19978:13;:18:::0;20014:28:::1;::::0;1717:25:1;;;20014:28:0::1;::::0;1705:2:1;1690:18;20014:28:0::1;;;;;;;19714:336::o:0;21121:143::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;21192:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;21192:21:0;;::::1;;::::0;;21229:27:::1;::::0;::::1;::::0;::::1;::::0;21206:7;1310:14:1;1303:22;1285:41;;1273:2;1258:18;;1145:187;21315:140:0;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;21385:10:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;21385:20:0;;::::1;;::::0;;21421:26:::1;::::0;::::1;::::0;::::1;::::0;21398:7;1310:14:1;1303:22;1285:41;;1273:2;1258:18;;1145:187;10734:104:0;10790:13;10823:7;10816:14;;;;;:::i;21653:205::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;21762:13:::1;-1:-1:-1::0;;;;;21754:21:0::1;:4;-1:-1:-1::0;;;;;21754:21:0::1;::::0;21746:52:::1;;;::::0;-1:-1:-1;;;21746:52:0;;8814:2:1;21746:52:0::1;::::0;::::1;8796:21:1::0;8853:2;8833:18;;;8826:30;-1:-1:-1;;;8872:18:1;;;8865:48;8930:18;;21746:52:0::1;8612:342:1::0;21746:52:0::1;21809:41;21838:4;21844:5;21809:28;:41::i;12222:225::-:0;691:10;12315:4;12364:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12364:34:0;;;;;;;;;;12315:4;;12332:85;;12355:7;;12364:52;;12401:15;;12364:52;:::i;11198:175::-;11284:4;11301:42;691:10;11325:9;11336:6;11301:9;:42::i;20301:274::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;20422:3:::1;20402:13;11035:12:::0;;;10947:108;20402:13:::1;:17;::::0;20418:1:::1;20402:17;:::i;:::-;:23;;;;:::i;:::-;20391:6;:35;;20383:93;;;::::0;-1:-1:-1;;;20383:93:0;;9161:2:1;20383:93:0::1;::::0;::::1;9143:21:1::0;9200:2;9180:18;;;9173:30;9239:34;9219:18;;;9212:62;-1:-1:-1;;;9290:18:1;;;9283:43;9343:19;;20383:93:0::1;8959:409:1::0;20383:93:0::1;20487:20;:29:::0;;;20532:35:::1;::::0;1717:25:1;;;20532:35:0::1;::::0;1705:2:1;1690:18;20532:35:0::1;1571:177:1::0;22912:915:0;23005:13;;22956:14;;;;23005:13;;;;;23000:60;;-1:-1:-1;23043:1:0;;;;-1:-1:-1;22912:915:0:o;23000:60::-;23072:19;23112:12;;23094:15;:30;;;;:::i;:::-;23072:52;;23156:10;23141:11;:25;23137:569;;23202:9;23187:11;:24;23183:512;;-1:-1:-1;23240:2:0;;23244;;-1:-1:-1;22912:915:0;-1:-1:-1;22912:915:0:o;23183:512::-;23288:10;23273:11;:25;23269:426;;-1:-1:-1;23327:2:0;;23331;;-1:-1:-1;22912:915:0;-1:-1:-1;22912:915:0:o;23269:426::-;23375:10;23360:11;:25;23356:339;;-1:-1:-1;23414:2:0;;23418;;-1:-1:-1;22912:915:0;-1:-1:-1;22912:915:0:o;23356:339::-;23462:10;23447:11;:25;23443:252;;-1:-1:-1;23501:2:0;;23505;;-1:-1:-1;22912:915:0;-1:-1:-1;22912:915:0:o;23443:252::-;23549:10;23534:11;:25;23530:165;;-1:-1:-1;23588:1:0;;23591:2;;-1:-1:-1;22912:915:0;-1:-1:-1;22912:915:0:o;23530:165::-;23635:10;23620:11;:25;23616:79;;-1:-1:-1;23674:1:0;;;;-1:-1:-1;22912:915:0;-1:-1:-1;22912:915:0:o;23616:79::-;23791:12;;23805:13;;23783:36;;;;;22912:915;;:::o;21463:182::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21548:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21548:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21603:34;;1285:41:1;;;21603:34:0::1;::::0;1258:18:1;21603:34:0::1;;;;;;;21463:182:::0;;:::o;24059:224::-;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;24155:2:::1;24141:10;:16;;24133:62;;;::::0;-1:-1:-1;;;24133:62:0;;9575:2:1;24133:62:0::1;::::0;::::1;9557:21:1::0;9614:2;9594:18;;;9587:30;9653:34;9633:18;;;9626:62;-1:-1:-1;;;9704:18:1;;;9697:31;9745:19;;24133:62:0::1;9373:397:1::0;24133:62:0::1;24206:13;:26:::0;;;24248:27:::1;::::0;1717:25:1;;;24248:27:0::1;::::0;1705:2:1;1690:18;24248:27:0::1;1571:177:1::0;14465:244:0;14222:6;;-1:-1:-1;;;;;14222:6:0;691:10;14222:22;14214:67;;;;-1:-1:-1;;;14214:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14554:22:0;::::1;14546:73;;;::::0;-1:-1:-1;;;14546:73:0;;9977:2:1;14546:73:0::1;::::0;::::1;9959:21:1::0;10016:2;9996:18;;;9989:30;10055:34;10035:18;;;10028:62;-1:-1:-1;;;10106:18:1;;;10099:36;10152:19;;14546:73:0::1;9775:402:1::0;14546:73:0::1;14656:6;::::0;14635:38:::1;::::0;-1:-1:-1;;;;;14635:38:0;;::::1;::::0;14656:6:::1;::::0;14635:38:::1;::::0;14656:6:::1;::::0;14635:38:::1;14684:6;:17:::0;;-1:-1:-1;;;;;;14684:17:0::1;-1:-1:-1::0;;;;;14684:17:0;;;::::1;::::0;;;::::1;::::0;;14465:244::o;13423:346::-;-1:-1:-1;;;;;13525:19:0;;13517:68;;;;-1:-1:-1;;;13517:68:0;;10384:2:1;13517:68:0;;;10366:21:1;10423:2;10403:18;;;10396:30;10462:34;10442:18;;;10435:62;-1:-1:-1;;;10513:18:1;;;10506:34;10557:19;;13517:68:0;10182:400:1;13517:68:0;-1:-1:-1;;;;;13604:21:0;;13596:68;;;;-1:-1:-1;;;13596:68:0;;10789:2:1;13596:68:0;;;10771:21:1;10828:2;10808:18;;;10801:30;10867:34;10847:18;;;10840:62;-1:-1:-1;;;10918:18:1;;;10911:32;10960:19;;13596:68:0;10587:398:1;13596:68:0;-1:-1:-1;;;;;13677:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13729:32;;1717:25:1;;;13729:32:0;;1690:18:1;13729:32:0;;;;;;;;13423:346;;;:::o;24291:3098::-;-1:-1:-1;;;;;24389:18:0;;24381:68;;;;-1:-1:-1;;;24381:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24468:16:0;;24460:64;;;;-1:-1:-1;;;24460:64:0;;;;;;;:::i;:::-;24542:13;;;;;;;24537:134;;-1:-1:-1;;;;;24580:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24609:23:0;;;;;;:19;:23;;;;;;;;24580:52;24572:87;;;;-1:-1:-1;;;24572:87:0;;12002:2:1;24572:87:0;;;11984:21:1;12041:2;12021:18;;;12014:30;-1:-1:-1;;;12060:18:1;;;12053:52;12122:18;;24572:87:0;11800:346:1;24572:87:0;24687:6;24697:1;24687:11;24683:93;;24715:28;24731:4;24737:2;24741:1;24715:15;:28::i;:::-;24291:3098;;;:::o;24683:93::-;24792:14;;;;;;;24788:912;;;14160:6;;-1:-1:-1;;;;;24827:15:0;;;14160:6;;24827:15;;;;:32;;-1:-1:-1;14160:6:0;;-1:-1:-1;;;;;24846:13:0;;;14160:6;;24846:13;;24827:32;:52;;;;-1:-1:-1;;;;;;24863:16:0;;;;24827:52;:73;;;;-1:-1:-1;;;;;;24883:17:0;;14922:6;24883:17;;24827:73;:132;;;;-1:-1:-1;;;;;;24906:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24935:23:0;;;;;;:19;:23;;;;;;;;24906:52;24904:55;24827:132;:145;;;;-1:-1:-1;24964:8:0;;;;24963:9;24827:145;24823:866;;;-1:-1:-1;;;;;25024:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;25060:35:0;;;;;;:31;:35;;;;;;;;25059:36;25024:71;25020:654;;;25138:20;;25128:6;:30;;25120:78;;;;-1:-1:-1;;;25120:78:0;;12353:2:1;25120:78:0;;;12335:21:1;12392:2;12372:18;;;12365:30;12431:34;12411:18;;;12404:62;-1:-1:-1;;;12482:18:1;;;12475:33;12525:19;;25120:78:0;12151:399:1;25120:78:0;25255:9;;-1:-1:-1;;;;;11164:18:0;;11137:7;11164:18;;;;;;;;;;;25229:22;;:6;:22;:::i;:::-;:35;;25221:67;;;;-1:-1:-1;;;25221:67:0;;12757:2:1;25221:67:0;;;12739:21:1;12796:2;12776:18;;;12769:30;-1:-1:-1;;;12815:18:1;;;12808:49;12874:18;;25221:67:0;12555:343:1;25221:67:0;25020:654;;;-1:-1:-1;;;;;25363:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;25397:37:0;;;;;;:31;:37;;;;;;;;25396:38;25363:71;25359:315;;;25477:20;;25467:6;:30;;25459:79;;;;-1:-1:-1;;;25459:79:0;;13105:2:1;25459:79:0;;;13087:21:1;13144:2;13124:18;;;13117:30;13183:34;13163:18;;;13156:62;-1:-1:-1;;;13234:18:1;;;13227:34;13278:19;;25459:79:0;12903:400:1;25359:315:0;25621:9;;-1:-1:-1;;;;;11164:18:0;;11137:7;11164:18;;;;;;;;;;;25595:22;;:6;:22;:::i;:::-;:35;;25587:67;;;;-1:-1:-1;;;25587:67:0;;12757:2:1;25587:67:0;;;12739:21:1;12796:2;12776:18;;;12769:30;-1:-1:-1;;;12815:18:1;;;12808:49;12874:18;;25587:67:0;12555:343:1;25587:67:0;25761:4;25712:28;11164:18;;;;;;;;;;;25793:24;;;;;;;25834:22;;-1:-1:-1;25845:11:0;;;;;;;25834:22;:35;;;;-1:-1:-1;25861:8:0;;;;25860:9;25834:35;:71;;;;-1:-1:-1;;;;;;25874:31:0;;;;;;:25;:31;;;;;;;;25873:32;25834:71;:101;;;;-1:-1:-1;;;;;;25910:25:0;;;;;;:19;:25;;;;;;;;25909:26;25834:101;:129;;;;-1:-1:-1;;;;;;25940:23:0;;;;;;:19;:23;;;;;;;;25939:24;25834:129;25830:233;;;25980:8;:15;;-1:-1:-1;;25980:15:0;25991:4;25980:15;;;26010:10;:8;:10::i;:::-;26035:8;:16;;-1:-1:-1;;26035:16:0;;;25830:233;26091:8;;-1:-1:-1;;;;;26177:25:0;;26075:12;26177:25;;;:19;:25;;;;;;26091:8;;;;26090:9;;26177:25;;:52;;-1:-1:-1;;;;;;26206:23:0;;;;;;:19;:23;;;;;;;;26177:52;26173:100;;;-1:-1:-1;26256:5:0;26173:100;26285:12;26316:7;26312:1024;;;26341:14;26357:15;26376:13;:11;:13::i;:::-;-1:-1:-1;;;;;26410:29:0;;;;;;:25;:29;;;;;;26340:49;;-1:-1:-1;26340:49:0;-1:-1:-1;26410:29:0;;26406:205;;;26486:3;26467:16;26476:7;26467:6;:16;:::i;:::-;:22;;;;:::i;:::-;26460:29;;26406:205;;;-1:-1:-1;;;;;26515:31:0;;;;;;:25;:31;;;;;;;;26511:100;;;26592:3;26574:15;26583:6;26574;:15;:::i;:::-;:21;;;;:::i;:::-;26567:28;;26511:100;26631:8;;26627:667;;26660:19;26700:12;;26682:15;:30;;;;:::i;:::-;26660:52;;26750:16;;26769:7;26750:26;;;;:::i;:::-;26735:11;:41;26731:485;;26920:4;26900:16;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;26731:485:0;;-1:-1:-1;26731:485:0;;26973:22;27010:3;26998:9;:4;27005:2;26998:9;:::i;:::-;:15;;;;:::i;:::-;26973:40;-1:-1:-1;27036:20:0;27059:21;26973:40;27059:4;:21;:::i;:::-;27036:44;;27127:14;27105:18;;:36;;;;;;;:::i;:::-;;;;;;;;27184:12;27164:16;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;26731:485:0;27236:42;27252:4;27266;27273;27236:15;:42::i;:::-;26641:653;26627:667;27310:14;27320:4;27310:14;;:::i;:::-;;;26325:1011;;26312:1024;27348:33;27364:4;27370:2;27374:6;27348:15;:33::i;:::-;24370:3019;;;;24291:3098;;;:::o;21866:186::-;-1:-1:-1;;;;;21949:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;21949:39:0;;;;;;;;;;22004:40;;21949:39;;:31;22004:40;;;21866:186;;:::o;12455:390::-;-1:-1:-1;;;;;12561:20:0;;12553:70;;;;-1:-1:-1;;;12553:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12642:23:0;;12634:71;;;;-1:-1:-1;;;12634:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12718:17:0;;:9;:17;;;;;;;;;;:27;;12739:6;;12718:9;:27;;12739:6;;12718:27;:::i;:::-;;;;-1:-1:-1;;;;;;;12756:20:0;;:9;:20;;;;;;;;;;:30;;12780:6;;12756:9;:30;;12780:6;;12756:30;:::i;:::-;;;;;;;;12819:9;-1:-1:-1;;;;;12802:35:0;12811:6;-1:-1:-1;;;;;12802:35:0;;12830:6;12802:35;;;;1717:25:1;;1705:2;1690:18;;1571:177;28256:1058:0;941:1;1089:7;;:19;1081:63;;;;-1:-1:-1;;;1081:63:0;;13510:2:1;1081:63:0;;;13492:21:1;13549:2;13529:18;;;13522:30;13588:33;13568:18;;;13561:61;13639:18;;1081:63:0;13308:355:1;1081:63:0;941:1;1157:7;:18;28352:4:::1;28308:23;11164:18:::0;;;;;;;;;;;28308:50:::1;;28369:25;28416:18;;28397:16;;:37;;;;:::i;:::-;28369:65:::0;-1:-1:-1;28451:20:0;;;:46:::1;;-1:-1:-1::0;28475:22:0;;28451:46:::1;28447:59;;;28499:7;;;;28447:59;28565:23;28611:4;28591:13;11035:12:::0;;;10947:108;28591:13:::1;:17;::::0;28607:1:::1;28591:17;:::i;:::-;:24;;;;:::i;:::-;28565:50;;28648:15;28630;:33;28626:99;;;28698:15;28680:33;;28626:99;28766:15:::0;28822:21:::1;28856:36;28766:15:::0;28856:16:::1;:36::i;:::-;28905:18;28926:41;28950:17:::0;28926:21:::1;:41;:::i;:::-;28905:62;;28980:23;29040:17;29019:18;;29006:10;:31;;;;:::i;:::-;:51;;;;:::i;:::-;28980:77:::0;-1:-1:-1;29068:21:0::1;29092:28;28980:77:::0;29092:10;:28:::1;:::i;:::-;29154:1;29133:18;:22:::0;;;29166:16:::1;:20:::0;;;29207:15:::1;::::0;29199:50:::1;::::0;29068:52;;-1:-1:-1;;;;;;29207:15:0::1;::::0;29199:50;::::1;;;::::0;29233:15;;29199:50;;29154:1;29199:50;29233:15;29207;29199:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;29268:13:0::1;::::0;29260:46:::1;::::0;29268:13:::1;::::0;;::::1;-1:-1:-1::0;;;;;29268:13:0::1;::::0;29260:46:::1;::::0;::::1;;::::0;;;::::1;::::0;;;;29268:13;29260:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28297:1017;;;;;;;;1188:1;897::::0;1202:7;:22;28256:1058::o;27397:475::-;27487:16;;;27501:1;27487:16;;;;;;;;27463:21;;27487:16;;;;;;;;;;-1:-1:-1;27487:16:0;27463:40;;27532:4;27514;27519:1;27514:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27514:23:0;;;-1:-1:-1;;;;;27514:23:0;;;;;27558:15;-1:-1:-1;;;;;27558:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27548:4;27553:1;27548:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;27548:32:0;;;-1:-1:-1;;;;;27548:32:0;;;;;27593:62;27610:4;27625:15;27643:11;27593:8;:62::i;:::-;27668:196;;-1:-1:-1;;;27668:196:0;;-1:-1:-1;;;;;27668:15:0;:66;;;;:196;;27749:11;;27775:1;;27791:4;;27818;;27838:15;;27668:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27452:420;27397:475;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;402:418::-;551:2;540:9;533:21;514:4;583:6;577:13;626:6;621:2;610:9;606:18;599:34;685:6;680:2;672:6;668:15;663:2;652:9;648:18;642:50;741:1;736:2;727:6;716:9;712:22;708:31;701:42;811:2;804;800:7;795:2;787:6;783:15;779:29;768:9;764:45;760:54;752:62;;;402:418;;;;:::o;825:315::-;893:6;901;954:2;942:9;933:7;929:23;925:32;922:52;;;970:1;967;960:12;922:52;1009:9;996:23;1028:31;1053:5;1028:31;:::i;:::-;1078:5;1130:2;1115:18;;;;1102:32;;-1:-1:-1;;;825:315:1:o;1753:180::-;1812:6;1865:2;1853:9;1844:7;1840:23;1836:32;1833:52;;;1881:1;1878;1871:12;1833:52;-1:-1:-1;1904:23:1;;1753:180;-1:-1:-1;1753:180:1:o;1938:456::-;2015:6;2023;2031;2084:2;2072:9;2063:7;2059:23;2055:32;2052:52;;;2100:1;2097;2090:12;2052:52;2139:9;2126:23;2158:31;2183:5;2158:31;:::i;:::-;2208:5;-1:-1:-1;2265:2:1;2250:18;;2237:32;2278:33;2237:32;2278:33;:::i;:::-;1938:456;;2330:7;;-1:-1:-1;;;2384:2:1;2369:18;;;;2356:32;;1938:456::o;2796:118::-;2882:5;2875:13;2868:21;2861:5;2858:32;2848:60;;2904:1;2901;2894:12;2919:382;2984:6;2992;3045:2;3033:9;3024:7;3020:23;3016:32;3013:52;;;3061:1;3058;3051:12;3013:52;3100:9;3087:23;3119:31;3144:5;3119:31;:::i;:::-;3169:5;-1:-1:-1;3226:2:1;3211:18;;3198:32;3239:30;3198:32;3239:30;:::i;:::-;3288:7;3278:17;;;2919:382;;;;;:::o;3306:241::-;3362:6;3415:2;3403:9;3394:7;3390:23;3386:32;3383:52;;;3431:1;3428;3421:12;3383:52;3470:9;3457:23;3489:28;3511:5;3489:28;:::i;3805:388::-;3873:6;3881;3934:2;3922:9;3913:7;3909:23;3905:32;3902:52;;;3950:1;3947;3940:12;3902:52;3989:9;3976:23;4008:31;4033:5;4008:31;:::i;:::-;4058:5;-1:-1:-1;4115:2:1;4100:18;;4087:32;4128:33;4087:32;4128:33;:::i;4198:356::-;4400:2;4382:21;;;4419:18;;;4412:30;4478:34;4473:2;4458:18;;4451:62;4545:2;4530:18;;4198:356::o;4559:184::-;4629:6;4682:2;4670:9;4661:7;4657:23;4653:32;4650:52;;;4698:1;4695;4688:12;4650:52;-1:-1:-1;4721:16:1;;4559:184;-1:-1:-1;4559:184:1:o;5377:245::-;5444:6;5497:2;5485:9;5476:7;5472:23;5468:32;5465:52;;;5513:1;5510;5503:12;5465:52;5545:9;5539:16;5564:28;5586:5;5564:28;:::i;5627:380::-;5706:1;5702:12;;;;5749;;;5770:61;;5824:4;5816:6;5812:17;5802:27;;5770:61;5877:2;5869:6;5866:14;5846:18;5843:38;5840:161;;5923:10;5918:3;5914:20;5911:1;5904:31;5958:4;5955:1;5948:15;5986:4;5983:1;5976:15;5840:161;;5627:380;;;:::o;6012:127::-;6073:10;6068:3;6064:20;6061:1;6054:31;6104:4;6101:1;6094:15;6128:4;6125:1;6118:15;6144:168;6217:9;;;6248;;6265:15;;;6259:22;;6245:37;6235:71;;6286:18;;:::i;6317:217::-;6357:1;6383;6373:132;;6427:10;6422:3;6418:20;6415:1;6408:31;6462:4;6459:1;6452:15;6490:4;6487:1;6480:15;6373:132;-1:-1:-1;6519:9:1;;6317:217::o;7289:128::-;7356:9;;;7377:11;;;7374:37;;;7391:18;;:::i;7422:125::-;7487:9;;;7508:10;;;7505:36;;;7521:18;;:::i;10990:401::-;11192:2;11174:21;;;11231:2;11211:18;;;11204:30;11270:34;11265:2;11250:18;;11243:62;-1:-1:-1;;;11336:2:1;11321:18;;11314:35;11381:3;11366:19;;10990:401::o;11396:399::-;11598:2;11580:21;;;11637:2;11617:18;;;11610:30;11676:34;11671:2;11656:18;;11649:62;-1:-1:-1;;;11742:2:1;11727:18;;11720:33;11785:3;11770:19;;11396:399::o;13800:127::-;13861:10;13856:3;13852:20;13849:1;13842:31;13892:4;13889:1;13882:15;13916:4;13913:1;13906:15;13932:251;14002:6;14055:2;14043:9;14034:7;14030:23;14026:32;14023:52;;;14071:1;14068;14061:12;14023:52;14103:9;14097:16;14122:31;14147:5;14122:31;:::i;14188:980::-;14450:4;14498:3;14487:9;14483:19;14529:6;14518:9;14511:25;14555:2;14593:6;14588:2;14577:9;14573:18;14566:34;14636:3;14631:2;14620:9;14616:18;14609:31;14660:6;14695;14689:13;14726:6;14718;14711:22;14764:3;14753:9;14749:19;14742:26;;14803:2;14795:6;14791:15;14777:29;;14824:1;14834:195;14848:6;14845:1;14842:13;14834:195;;;14913:13;;-1:-1:-1;;;;;14909:39:1;14897:52;;15004:15;;;;14969:12;;;;14945:1;14863:9;14834:195;;;-1:-1:-1;;;;;;;15085:32:1;;;;15080:2;15065:18;;15058:60;-1:-1:-1;;;15149:3:1;15134:19;15127:35;15046:3;14188:980;-1:-1:-1;;;14188:980:1:o

Swarm Source

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