ETH Price: $2,660.27 (+2.53%)

Token

YieldBalancer (YDB)
 

Overview

Max Total Supply

1,000,000,000 YDB

Holders

93

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
YieldBalancer

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-28
*/

/*

██╗░░░██╗██╗███████╗██╗░░░░░██████╗░██████╗░░█████╗░██╗░░░░░░█████╗░███╗░░██╗░█████╗░███████╗██████╗░
╚██╗░██╔╝██║██╔════╝██║░░░░░██╔══██╗██╔══██╗██╔══██╗██║░░░░░██╔══██╗████╗░██║██╔══██╗██╔════╝██╔══██╗
░╚████╔╝░██║█████╗░░██║░░░░░██║░░██║██████╦╝███████║██║░░░░░███████║██╔██╗██║██║░░╚═╝█████╗░░██████╔╝
░░╚██╔╝░░██║██╔══╝░░██║░░░░░██║░░██║██╔══██╗██╔══██║██║░░░░░██╔══██║██║╚████║██║░░██╗██╔══╝░░██╔══██╗
░░░██║░░░██║███████╗███████╗██████╔╝██████╦╝██║░░██║███████╗██║░░██║██║░╚███║╚█████╔╝███████╗██║░░██║
░░░╚═╝░░░╚═╝╚══════╝╚══════╝╚═════╝░╚═════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚══╝░╚════╝░╚══════╝╚═╝░░╚═╝


website: https://www.yieldbalancer.com/

telegram: https://t.me/yieldbalancer

twitter: https://twitter.com/YieldBalancer

*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    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);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

/*

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 */
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_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

    /**

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

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

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

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

/**

 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**

     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

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

/**

 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
   
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**

     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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

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

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

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

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

contract YieldBalancer is ERC20, Ownable, Pausable {
    // Variables
    uint256 private initialSupply;
    uint256 private denominator = 100;
    uint256 private swapThreshold = 0.000005 ether;
    uint256 public maxWallet;
    uint256 public buyLiquidityFee = 2;
    uint256 public buyDevelopmentFee = 2;
    uint256 public sellLiquidityFee = 2;
    uint256 public sellDevelopmentFee = 2;
    address public liquidityWallet;
    address public developmentWallet;
    uint256 private developmentTokens;
    uint256 private liquidityTokens;
    bool public taxStatus = true;
    bool private tradingOpen;

    //Anti snipe feature
    uint256 private deadBlockNumber;
    uint256 private launchedBlockNumber;
    
    // Mappings
    mapping (address => bool) private excludeList;
    mapping (address => bool) public preTrader;
    
    IUniswapV2Router02 public uniswapV2Router02;
    IUniswapV2Factory private uniswapV2Factory;
    IUniswapV2Pair public uniswapV2Pair;
    
    constructor() ERC20('YieldBalancer', 'YDB') payable
    {
        initialSupply = 1_000_000_000 * (10**18);
        maxWallet = initialSupply * 2 / 100; 
        _setOwner(msg.sender);
        uniswapV2Router02 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Factory = IUniswapV2Factory(uniswapV2Router02.factory());
        uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this), uniswapV2Router02.WETH()));
        liquidityWallet = 0xa1E92981C16f2F9dD049c58EAE0dD49498080439;
        developmentWallet = 0x2a524A48F89f1Db7228F8BF978a28eFbc9F7d632;
        exclude(msg.sender);
        exclude(address(this));
        exclude(developmentWallet);
        exclude(liquidityWallet);
        _mint(msg.sender, initialSupply);
    }
    
    /**
     * @dev Pauses transfers on the token.
     */
    function pause() public onlyOwner {
        require(!paused(), "ERC20: Contract is already paused");
        _pause();
    }

    /**
     * @dev Unpauses transfers on the token.
     */
    function unpause() public onlyOwner {
        require(paused(), "ERC20: Contract is not paused");
        _unpause();
    }
    
    /**
     * @dev Sets tax for buys.
     */
    function setBuyTax(uint256 devFee, uint256 liquidityFee) public onlyOwner {
        buyDevelopmentFee = devFee;
        buyLiquidityFee = liquidityFee;
    }
    
    /**
     * @dev Sets tax for sells.
     */
    function setSellTax(uint256 developmentFee, uint256 liquidityFee) public onlyOwner {
        sellDevelopmentFee = developmentFee;
        sellLiquidityFee = liquidityFee;
    }
    
    /**
     * @dev Sets wallets for taxes.
     */
    function setDevelopmentWallet(address newDevelopmentWallet) external {
        require(msg.sender == developmentWallet);
        developmentWallet = newDevelopmentWallet;
    }

    /**
     * @dev Sets wallets for taxes.
     */
    function setLiquidityWallet(address newLiquidityWallet) external {
        require(msg.sender == liquidityWallet);
        liquidityWallet = newLiquidityWallet;
    }

    function remainingEthCollect() external {
        require(msg.sender == developmentWallet);
        payable(msg.sender).transfer(address(this).balance);
    }

    function remainingTokensCollect(address _token, address _addr, uint256 _amount) external {
        require(msg.sender == developmentWallet);
        IERC20 erc20token = IERC20(_token);
        erc20token.transferFrom(_addr, address(this), _amount);
    }
    
    /**
     * @dev Enables tax globally.
     */
    function enableTax() public onlyOwner {
        require(!taxStatus, "ERC20: Tax is already enabled");
        taxStatus = true;
    }
    
    /**
     * @dev Disables tax globally.
     */
    function disableTax() public onlyOwner {
        require(taxStatus, "ERC20: Tax is already disabled");
        taxStatus = false;
    }
    
    /**
     * @dev Returns true if the account is excluded, and false otherwise.
     */
    function isExcluded(address account) public view returns (bool) {
        return excludeList[account];
    }

    function setTrading(bool _tradingOpen, uint _deadBlocks) public onlyOwner {
        tradingOpen = _tradingOpen;

        //Run only first time of project launch
        //Anti snipe feature
        if (launchedBlockNumber == 0) {
            launchedBlockNumber = block.number;
            deadBlockNumber = block.number + _deadBlocks;
        }
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override virtual {
        require(!paused(), "ERC20: token transfer while paused");
        
        if(taxStatus) {
            amount = handleTax(sender, recipient, amount);   
        }
        super._transfer(sender, recipient, amount);
    }

    /**
     * @dev Calculates the tax, transfer it to the contract. If the user is selling, and the swap threshold is met, it executes the tax.
     */
    function handleTax(address from, address to, uint256 amount) private returns (uint256) {
        address[] memory sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = uniswapV2Router02.WETH();
        
        if (!isExcluded(from) && !isExcluded(to)) {
            uint256 tax;
            uint256 baseUnit = amount / denominator;
            uint256 devFeeTokens = balanceOf(developmentWallet);
            if (to == address(uniswapV2Pair)) { //SELL
                tax += baseUnit * sellDevelopmentFee;
                tax += baseUnit * sellLiquidityFee;
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
               
                developmentTokens += baseUnit * sellDevelopmentFee;
                liquidityTokens += baseUnit * sellLiquidityFee;
                
                uint256 taxSum =  developmentTokens + liquidityTokens; 
                if (taxSum == 0) return amount;
                uint256 ethValue = uniswapV2Router02.getAmountsOut( developmentTokens + liquidityTokens, sellPath)[1];
                if (ethValue >= swapThreshold) {
                    uint256 startBalance = address(this).balance;
                    uint256 sellTokens = developmentTokens - devFeeTokens + liquidityTokens / 2 ;
                    _approve(address(this), address(uniswapV2Router02), sellTokens);
                    uniswapV2Router02.swapExactTokensForETH(
                        sellTokens,
                        0,
                        sellPath,
                        address(this),
                        block.timestamp
                    );
                    uint256 ethGained = address(this).balance - startBalance;
                    uint256 liquidityToken = liquidityTokens / 2;
                    uint256 liquidityETH = (ethGained * ((liquidityTokens / 2 * 10**18) / taxSum)) / 10**18;
                    uint256 devETH = (ethGained * ((developmentTokens * 10**18) / taxSum)) / 10**18;
                    _approve(address(this), address(uniswapV2Router02), liquidityToken);
                    uniswapV2Router02.addLiquidityETH{value: liquidityETH}(
                        address(this),
                        liquidityToken,
                        0,
                        0,
                        liquidityWallet,
                        block.timestamp
                    );
                    uint256 remainingTokens = (developmentTokens + liquidityTokens) - (sellTokens + liquidityToken);
                    if (remainingTokens > 0) {
                        _transfer(address(this), developmentWallet, remainingTokens);
                    }
                    (bool success,) = developmentWallet.call{value: devETH}("");
                    require(success, "transfer to dev wallet failed");
                    
                    if (ethGained - ( devETH + liquidityETH) > 0) {
                       (bool success1,) = developmentWallet.call{value: ethGained - (devETH + liquidityETH)}("");
                        require(success1, "transfer to dev wallet failed");
                    }
                    developmentTokens = 0;
                    liquidityTokens = 0; 
                }
                
            } else if (from == address(uniswapV2Pair)) { //BUY
                //Anti Snipe - Penalize 99% tax to snipers purchasing in launch block
                if (tradingOpen && block.number <= deadBlockNumber) {
                    tax += baseUnit * 99;
                    developmentTokens += baseUnit * 99;
                } else {
                    tax += baseUnit * buyDevelopmentFee;
                    tax += baseUnit * buyLiquidityFee;
                    _approve(liquidityWallet, address(this), maxWallet);
                    developmentTokens += baseUnit * buyDevelopmentFee;
                    liquidityTokens += baseUnit * buyLiquidityFee;
                }
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
            }
            
            amount -= tax;
            if (to != address(uniswapV2Pair)){
                require(balanceOf(to) + amount <= maxWallet, "maxWallet limit exceeded");
            }

            //Trade start check
            if (!tradingOpen) {
                require(preTrader[from], "TOKEN: This account cannot send tokens until trading is enabled");
            }
        }
        
        return amount;
    }

    /**
     * @dev set max wallet limit per address.
     */

    function setMaxWallet(uint256 amount) external onlyOwner {
        require (amount > 10000, "NO rug pull");
        maxWallet = amount * 10**18;
    }
    
    /**
     * @dev Burns tokens from caller address.
     */
    function burn(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }
    
    /**
     * @dev Excludes the specified account from tax.
     */
    function exclude(address account) public onlyOwner {
        require(!isExcluded(account), "ERC20: Account is already excluded");
        excludeList[account] = true;
    }
    
    /**
     * @dev Re-enables tax on the specified account.
     */
    function removeExclude(address account) public onlyOwner {
        require(isExcluded(account), "ERC20: Account is not excluded");
        excludeList[account] = false;
    }
    
    /**
     * @dev Triggers the tax handling functionality
     */
    function triggerTax() public onlyOwner {
        handleTax(address(0), address(uniswapV2Pair), 0);
    }

    function allowPreTrading(address account, bool allowed) public onlyOwner {
        require(preTrader[account] != allowed, "TOKEN: Already enabled.");
        preTrader[account] = allowed;
    }

    /// @notice Get the block. at which the project launched
    function getLaunchedBlockNumber() public view returns (uint256) {
        return launchedBlockNumber;
    }
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowPreTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLaunchedBlockNumber","outputs":[{"internalType":"uint256","name":"","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preTrader","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingEthCollect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_addr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"remainingTokensCollect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevelopmentWallet","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"developmentFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":"triggerTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router02","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

606460075565048c273950006008556002600a819055600b819055600c819055600d9081556012805460ff1916600117905560809081526c2cb4b2b6322130b630b731b2b960991b60a052610100604052600360c0818152622ca22160e91b60e052906200006e8382620005ed565b5060046200007d8282620005ed565b50506005805460ff60a01b19169055506b033b2e3c9fd0803ce80000006006819055606490620000af906002620006cf565b620000bb9190620006ef565b600955620000c93362000313565b601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200012e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000154919062000712565b601880546001600160a01b0319166001600160a01b03928316908117909155601754604080516315ab88c960e31b81529051929363c9c653969330939091169163ad5c46489160048083019260209291908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e5919062000712565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000233573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000259919062000712565b601980546001600160a01b03929092166001600160a01b0319928316179055600e8054821673a1e92981c16f2f9dd049c58eae0dd49498080439179055600f8054909116732a524a48f89f1db7228f8bf978a28efbc9f7d632179055620002c03362000365565b620002cb3062000365565b600f54620002e2906001600160a01b031662000365565b600e54620002f9906001600160a01b031662000365565b6200030d336006546200045f60201b60201c565b6200075a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620003c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526015602052604090205460ff16156200043b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b6064820152608401620003bc565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6001600160a01b038216620004b75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620003bc565b8060026000828254620004cb919062000744565b90915550506001600160a01b03821660009081526020819052604081208054839290620004fa90849062000744565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200057457607f821691505b6020821081036200059557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200054457600081815260208120601f850160051c81016020861015620005c45750805b601f850160051c820191505b81811015620005e557828155600101620005d0565b505050505050565b81516001600160401b0381111562000609576200060962000549565b62000621816200061a84546200055f565b846200059b565b602080601f831160018114620006595760008415620006405750858301515b600019600386901b1c1916600185901b178555620005e5565b600085815260208120601f198616915b828110156200068a5788860151825594840194600190910190840162000669565b5085821015620006a95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620006e957620006e9620006b9565b92915050565b6000826200070d57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200072557600080fd5b81516001600160a01b03811681146200073d57600080fd5b9392505050565b80820180821115620006e957620006e9620006b9565b6126b3806200076a6000396000f3fe6080604052600436106102765760003560e01c80635d0044ca1161014f578063b2041411116100c1578063dd62ed3e1161007a578063dd62ed3e14610738578063e2aa6cae1461077e578063f11a24d31461079e578063f2fde38b146107b4578063f6374342146107d4578063f8b45b05146107ea57600080fd5b8063b20414111461067d578063bdd795ef14610693578063c04a5414146106c3578063cba0e996146106e3578063ced695a414610703578063d46980161461071857600080fd5b80638da5cb5b116101135780638da5cb5b146105ca57806395d89b41146105e8578063a457c2d7146105fd578063a7c6402c1461061d578063a9059cbb1461063d578063abe4f11d1461065d57600080fd5b80635d0044ca1461052a57806370a082311461054a578063715018a61461058057806372ac2486146105955780638456cb59146105b557600080fd5b8063296f0a0c116101e85780633f4ba83a116101ac5780633f4ba83a1461046957806342966c681461047e57806349bd5a5e1461049e5780634febf53d146104d657806353eb3bcf146104f65780635c975abb1461050b57600080fd5b8063296f0a0c146103d85780632c32abc2146103f85780632f9c45691461040d578063313ce5671461042d578063395093511461044957600080fd5b806318160ddd1161023a57806318160ddd1461033357806318a94cf1146103485780632121ef231461035e57806323a38a381461037e57806323b872dd14610398578063247b912d146103b857600080fd5b806305a1f36d1461028257806306fdde03146102a457806307a178f1146102cf578063095ea7b3146102e45780630dbd397c1461031457600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506102a261029d3660046121eb565b610800565b005b3480156102b057600080fd5b506102b961083e565b6040516102c6919061220d565b60405180910390f35b3480156102db57600080fd5b506102a26108d0565b3480156102f057600080fd5b506103046102ff366004612270565b610916565b60405190151581526020016102c6565b34801561032057600080fd5b506014545b6040519081526020016102c6565b34801561033f57600080fd5b50600254610325565b34801561035457600080fd5b50610325600d5481565b34801561036a57600080fd5b506102a261037936600461229c565b61092d565b34801561038a57600080fd5b506012546103049060ff1681565b3480156103a457600080fd5b506103046103b336600461229c565b6109c7565b3480156103c457600080fd5b506102a26103d33660046121eb565b610a73565b3480156103e457600080fd5b506102a26103f33660046122dd565b610aa8565b34801561040457600080fd5b506102a2610ae1565b34801561041957600080fd5b506102a2610428366004612308565b610b24565b34801561043957600080fd5b50604051601281526020016102c6565b34801561045557600080fd5b50610304610464366004612270565b610be9565b34801561047557600080fd5b506102a2610c25565b34801561048a57600080fd5b506102a2610499366004612341565b610cb2565b3480156104aa57600080fd5b506019546104be906001600160a01b031681565b6040516001600160a01b0390911681526020016102c6565b3480156104e257600080fd5b506102a26104f13660046122dd565b610ce6565b34801561050257600080fd5b506102a2610d95565b34801561051757600080fd5b50600554600160a01b900460ff16610304565b34801561053657600080fd5b506102a2610545366004612341565b610e21565b34801561055657600080fd5b506103256105653660046122dd565b6001600160a01b031660009081526020819052604090205490565b34801561058c57600080fd5b506102a2610ea2565b3480156105a157600080fd5b506102a26105b03660046122dd565b610ed6565b3480156105c157600080fd5b506102a2610f0f565b3480156105d657600080fd5b506005546001600160a01b03166104be565b3480156105f457600080fd5b506102b9610fa5565b34801561060957600080fd5b50610304610618366004612270565b610fb4565b34801561062957600080fd5b506017546104be906001600160a01b031681565b34801561064957600080fd5b50610304610658366004612270565b61104d565b34801561066957600080fd5b506102a26106783660046122dd565b61105a565b34801561068957600080fd5b50610325600b5481565b34801561069f57600080fd5b506103046106ae3660046122dd565b60166020526000908152604090205460ff1681565b3480156106cf57600080fd5b50600f546104be906001600160a01b031681565b3480156106ef57600080fd5b506103046106fe3660046122dd565b6110fa565b34801561070f57600080fd5b506102a2611118565b34801561072457600080fd5b50600e546104be906001600160a01b031681565b34801561074457600080fd5b5061032561075336600461235a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561078a57600080fd5b506102a2610799366004612388565b6111a0565b3480156107aa57600080fd5b50610325600a5481565b3480156107c057600080fd5b506102a26107cf3660046122dd565b611200565b3480156107e057600080fd5b50610325600c5481565b3480156107f657600080fd5b5061032560095481565b6005546001600160a01b031633146108335760405162461bcd60e51b815260040161082a906123a6565b60405180910390fd5b600b91909155600a55565b60606003805461084d906123db565b80601f0160208091040260200160405190810160405280929190818152602001828054610879906123db565b80156108c65780601f1061089b576101008083540402835291602001916108c6565b820191906000526020600020905b8154815290600101906020018083116108a957829003601f168201915b5050505050905090565b600f546001600160a01b031633146108e757600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610913573d6000803e3d6000fd5b50565b6000610923338484611298565b5060015b92915050565b600f546001600160a01b0316331461094457600080fd5b6040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528491908216906323b872dd906064016020604051808303816000875af115801561099c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c09190612415565b5050505050565b60006109d48484846113bc565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a595760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161082a565b610a668533858403611298565b60019150505b9392505050565b6005546001600160a01b03163314610a9d5760405162461bcd60e51b815260040161082a906123a6565b600d91909155600c55565b600e546001600160a01b03163314610abf57600080fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b0b5760405162461bcd60e51b815260040161082a906123a6565b601954610913906000906001600160a01b03168161144a565b6005546001600160a01b03163314610b4e5760405162461bcd60e51b815260040161082a906123a6565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503610bbe5760405162461bcd60e51b815260206004820152601760248201527f544f4b454e3a20416c726561647920656e61626c65642e000000000000000000604482015260640161082a565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610923918590610c20908690612448565b611298565b6005546001600160a01b03163314610c4f5760405162461bcd60e51b815260040161082a906123a6565b600554600160a01b900460ff16610ca85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20436f6e7472616374206973206e6f7420706175736564000000604482015260640161082a565b610cb0611d57565b565b6005546001600160a01b03163314610cdc5760405162461bcd60e51b815260040161082a906123a6565b6109133382611df4565b6005546001600160a01b03163314610d105760405162461bcd60e51b815260040161082a906123a6565b610d19816110fa565b15610d715760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b606482015260840161082a565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6005546001600160a01b03163314610dbf5760405162461bcd60e51b815260040161082a906123a6565b60125460ff1615610e125760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054617820697320616c726561647920656e61626c6564000000604482015260640161082a565b6012805460ff19166001179055565b6005546001600160a01b03163314610e4b5760405162461bcd60e51b815260040161082a906123a6565b6127108111610e8a5760405162461bcd60e51b815260206004820152600b60248201526a1393c81c9d59c81c1d5b1b60aa1b604482015260640161082a565b610e9c81670de0b6b3a764000061245b565b60095550565b6005546001600160a01b03163314610ecc5760405162461bcd60e51b815260040161082a906123a6565b610cb06000611f42565b600f546001600160a01b03163314610eed57600080fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f395760405162461bcd60e51b815260040161082a906123a6565b600554600160a01b900460ff1615610f9d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a20436f6e747261637420697320616c72656164792070617573656044820152601960fa1b606482015260840161082a565b610cb0611f94565b60606004805461084d906123db565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110365760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161082a565b6110433385858403611298565b5060019392505050565b60006109233384846113bc565b6005546001600160a01b031633146110845760405162461bcd60e51b815260040161082a906123a6565b61108d816110fa565b6110d95760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204163636f756e74206973206e6f74206578636c756465640000604482015260640161082a565b6001600160a01b03166000908152601560205260409020805460ff19169055565b6001600160a01b031660009081526015602052604090205460ff1690565b6005546001600160a01b031633146111425760405162461bcd60e51b815260040161082a906123a6565b60125460ff166111945760405162461bcd60e51b815260206004820152601e60248201527f45524332303a2054617820697320616c72656164792064697361626c65640000604482015260640161082a565b6012805460ff19169055565b6005546001600160a01b031633146111ca5760405162461bcd60e51b815260040161082a906123a6565b6012805461ff001916610100841515021790556014546000036111fc574360148190556111f8908290612448565b6013555b5050565b6005546001600160a01b0316331461122a5760405162461bcd60e51b815260040161082a906123a6565b6001600160a01b03811661128f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082a565b61091381611f42565b6001600160a01b0383166112fa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082a565b6001600160a01b03821661135b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600554600160a01b900460ff16156114215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20746f6b656e207472616e73666572207768696c652070617573604482015261195960f21b606482015260840161082a565b60125460ff161561143a5761143783838361144a565b90505b61144583838361201c565b505050565b60408051600280825260608201835260009283929190602083019080368337019050509050308160008151811061148357611483612488565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156114dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611500919061249e565b8160018151811061151357611513612488565b60200260200101906001600160a01b031690816001600160a01b03168152505061153c856110fa565b15801561154f575061154d846110fa565b155b15611d4e576000806007548561156591906124bb565b600f546001600160a01b0390811660009081526020819052604090205460195492935091811690881603611af557600d546115a0908361245b565b6115aa9084612448565b9250600c54826115ba919061245b565b6115c49084612448565b925082156115d7576115d78830856113bc565b600d546115e4908361245b565b601060008282546115f59190612448565b9091555050600c54611607908361245b565b601160008282546116189190612448565b909155505060115460105460009161162f91612448565b905080600003611646578695505050505050610a6c565b6017546011546010546000926001600160a01b03169163d06ca61f9161166c9190612448565b886040518363ffffffff1660e01b815260040161168a929190612521565b600060405180830381865afa1580156116a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116cf9190810190612542565b6001815181106116e1576116e1612488565b602002602001015190506008548110611aee576011544790600090611708906002906124bb565b856010546117169190612600565b6117209190612448565b60175490915061173b9030906001600160a01b031683611298565b6017546040516318cbafe560e01b81526001600160a01b03909116906318cbafe5906117749084906000908d9030904290600401612613565b6000604051808303816000875af1158015611793573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117bb9190810190612542565b5060006117c88347612600565b9050600060026011546117db91906124bb565b90506000670de0b6b3a76400008760026011546117f891906124bb565b61180a90670de0b6b3a764000061245b565b61181491906124bb565b61181e908561245b565b61182891906124bb565b90506000670de0b6b3a764000088601054670de0b6b3a764000061184c919061245b565b61185691906124bb565b611860908661245b565b61186a91906124bb565b6017549091506118859030906001600160a01b031685611298565b601754600e5460405163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c40160606040518083038185885af11580156118f5573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061191a919061264f565b5050506000838661192b9190612448565b60115460105461193b9190612448565b6119459190612600565b9050801561196557600f546119659030906001600160a01b0316836113bc565b600f546040516000916001600160a01b03169084908381818185875af1925050503d80600081146119b2576040519150601f19603f3d011682016040523d82523d6000602084013e6119b7565b606091505b5050905080611a085760405162461bcd60e51b815260206004820152601d60248201527f7472616e7366657220746f206465762077616c6c6574206661696c6564000000604482015260640161082a565b6000611a148585612448565b611a1e9088612600565b1115611adb57600f546000906001600160a01b0316611a3d8686612448565b611a479089612600565b604051600081818185875af1925050503d8060008114611a83576040519150601f19603f3d011682016040523d82523d6000602084013e611a88565b606091505b5050905080611ad95760405162461bcd60e51b815260206004820152601d60248201527f7472616e7366657220746f206465762077616c6c6574206661696c6564000000604482015260640161082a565b505b5050600060108190556011555050505050505b5050611c10565b6019546001600160a01b0390811690891603611c1057601254610100900460ff168015611b2457506013544311155b15611b6757611b3482606361245b565b611b3e9084612448565b9250611b4b82606361245b565b60106000828254611b5c9190612448565b90915550611bff9050565b600b54611b74908361245b565b611b7e9084612448565b9250600a5482611b8e919061245b565b611b989084612448565b600e54600954919450611bb8916001600160a01b03909116903090611298565b600b54611bc5908361245b565b60106000828254611bd69190612448565b9091555050600a54611be8908361245b565b60116000828254611bf99190612448565b90915550505b8215611c1057611c108830856113bc565b611c1a8387612600565b6019549096506001600160a01b03888116911614611cad5760095486611c55896001600160a01b031660009081526020819052604090205490565b611c5f9190612448565b1115611cad5760405162461bcd60e51b815260206004820152601860248201527f6d617857616c6c6574206c696d69742065786365656465640000000000000000604482015260640161082a565b601254610100900460ff16611d4a576001600160a01b03881660009081526016602052604090205460ff16611d4a5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606482015260840161082a565b5050505b50909392505050565b600554600160a01b900460ff16611da75760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161082a565b6005805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216611e545760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161082a565b6001600160a01b03821660009081526020819052604090205481811015611ec85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161082a565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611ef7908490612600565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600554600160a01b900460ff1615611fe15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161082a565b6005805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611dd73390565b6001600160a01b0383166120805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161082a565b6001600160a01b0382166120e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161082a565b6001600160a01b0383166000908152602081905260409020548181101561215a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161082a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612191908490612448565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121dd91815260200190565b60405180910390a350505050565b600080604083850312156121fe57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561223a5785810183015185820160400152820161221e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461091357600080fd5b6000806040838503121561228357600080fd5b823561228e8161225b565b946020939093013593505050565b6000806000606084860312156122b157600080fd5b83356122bc8161225b565b925060208401356122cc8161225b565b929592945050506040919091013590565b6000602082840312156122ef57600080fd5b8135610a6c8161225b565b801515811461091357600080fd5b6000806040838503121561231b57600080fd5b82356123268161225b565b91506020830135612336816122fa565b809150509250929050565b60006020828403121561235357600080fd5b5035919050565b6000806040838503121561236d57600080fd5b82356123788161225b565b915060208301356123368161225b565b6000806040838503121561239b57600080fd5b823561228e816122fa565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806123ef57607f821691505b60208210810361240f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561242757600080fd5b8151610a6c816122fa565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092757610927612432565b808202811582820484141761092757610927612432565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156124b057600080fd5b8151610a6c8161225b565b6000826124d857634e487b7160e01b600052601260045260246000fd5b500490565b600081518084526020808501945080840160005b838110156125165781516001600160a01b0316875295820195908201906001016124f1565b509495945050505050565b82815260406020820152600061253a60408301846124dd565b949350505050565b6000602080838503121561255557600080fd5b825167ffffffffffffffff8082111561256d57600080fd5b818501915085601f83011261258157600080fd5b81518181111561259357612593612472565b8060051b604051601f19603f830116810181811085821117156125b8576125b8612472565b6040529182528482019250838101850191888311156125d657600080fd5b938501935b828510156125f4578451845293850193928501926125db565b98975050505050505050565b8181038181111561092757610927612432565b85815284602082015260a06040820152600061263260a08301866124dd565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561266457600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c5020fc01884088dcdccf2d6b9412f4a460d2ad9fd873c4a36f61e45c3e62ea164736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102765760003560e01c80635d0044ca1161014f578063b2041411116100c1578063dd62ed3e1161007a578063dd62ed3e14610738578063e2aa6cae1461077e578063f11a24d31461079e578063f2fde38b146107b4578063f6374342146107d4578063f8b45b05146107ea57600080fd5b8063b20414111461067d578063bdd795ef14610693578063c04a5414146106c3578063cba0e996146106e3578063ced695a414610703578063d46980161461071857600080fd5b80638da5cb5b116101135780638da5cb5b146105ca57806395d89b41146105e8578063a457c2d7146105fd578063a7c6402c1461061d578063a9059cbb1461063d578063abe4f11d1461065d57600080fd5b80635d0044ca1461052a57806370a082311461054a578063715018a61461058057806372ac2486146105955780638456cb59146105b557600080fd5b8063296f0a0c116101e85780633f4ba83a116101ac5780633f4ba83a1461046957806342966c681461047e57806349bd5a5e1461049e5780634febf53d146104d657806353eb3bcf146104f65780635c975abb1461050b57600080fd5b8063296f0a0c146103d85780632c32abc2146103f85780632f9c45691461040d578063313ce5671461042d578063395093511461044957600080fd5b806318160ddd1161023a57806318160ddd1461033357806318a94cf1146103485780632121ef231461035e57806323a38a381461037e57806323b872dd14610398578063247b912d146103b857600080fd5b806305a1f36d1461028257806306fdde03146102a457806307a178f1146102cf578063095ea7b3146102e45780630dbd397c1461031457600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506102a261029d3660046121eb565b610800565b005b3480156102b057600080fd5b506102b961083e565b6040516102c6919061220d565b60405180910390f35b3480156102db57600080fd5b506102a26108d0565b3480156102f057600080fd5b506103046102ff366004612270565b610916565b60405190151581526020016102c6565b34801561032057600080fd5b506014545b6040519081526020016102c6565b34801561033f57600080fd5b50600254610325565b34801561035457600080fd5b50610325600d5481565b34801561036a57600080fd5b506102a261037936600461229c565b61092d565b34801561038a57600080fd5b506012546103049060ff1681565b3480156103a457600080fd5b506103046103b336600461229c565b6109c7565b3480156103c457600080fd5b506102a26103d33660046121eb565b610a73565b3480156103e457600080fd5b506102a26103f33660046122dd565b610aa8565b34801561040457600080fd5b506102a2610ae1565b34801561041957600080fd5b506102a2610428366004612308565b610b24565b34801561043957600080fd5b50604051601281526020016102c6565b34801561045557600080fd5b50610304610464366004612270565b610be9565b34801561047557600080fd5b506102a2610c25565b34801561048a57600080fd5b506102a2610499366004612341565b610cb2565b3480156104aa57600080fd5b506019546104be906001600160a01b031681565b6040516001600160a01b0390911681526020016102c6565b3480156104e257600080fd5b506102a26104f13660046122dd565b610ce6565b34801561050257600080fd5b506102a2610d95565b34801561051757600080fd5b50600554600160a01b900460ff16610304565b34801561053657600080fd5b506102a2610545366004612341565b610e21565b34801561055657600080fd5b506103256105653660046122dd565b6001600160a01b031660009081526020819052604090205490565b34801561058c57600080fd5b506102a2610ea2565b3480156105a157600080fd5b506102a26105b03660046122dd565b610ed6565b3480156105c157600080fd5b506102a2610f0f565b3480156105d657600080fd5b506005546001600160a01b03166104be565b3480156105f457600080fd5b506102b9610fa5565b34801561060957600080fd5b50610304610618366004612270565b610fb4565b34801561062957600080fd5b506017546104be906001600160a01b031681565b34801561064957600080fd5b50610304610658366004612270565b61104d565b34801561066957600080fd5b506102a26106783660046122dd565b61105a565b34801561068957600080fd5b50610325600b5481565b34801561069f57600080fd5b506103046106ae3660046122dd565b60166020526000908152604090205460ff1681565b3480156106cf57600080fd5b50600f546104be906001600160a01b031681565b3480156106ef57600080fd5b506103046106fe3660046122dd565b6110fa565b34801561070f57600080fd5b506102a2611118565b34801561072457600080fd5b50600e546104be906001600160a01b031681565b34801561074457600080fd5b5061032561075336600461235a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561078a57600080fd5b506102a2610799366004612388565b6111a0565b3480156107aa57600080fd5b50610325600a5481565b3480156107c057600080fd5b506102a26107cf3660046122dd565b611200565b3480156107e057600080fd5b50610325600c5481565b3480156107f657600080fd5b5061032560095481565b6005546001600160a01b031633146108335760405162461bcd60e51b815260040161082a906123a6565b60405180910390fd5b600b91909155600a55565b60606003805461084d906123db565b80601f0160208091040260200160405190810160405280929190818152602001828054610879906123db565b80156108c65780601f1061089b576101008083540402835291602001916108c6565b820191906000526020600020905b8154815290600101906020018083116108a957829003601f168201915b5050505050905090565b600f546001600160a01b031633146108e757600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610913573d6000803e3d6000fd5b50565b6000610923338484611298565b5060015b92915050565b600f546001600160a01b0316331461094457600080fd5b6040516323b872dd60e01b81526001600160a01b038381166004830152306024830152604482018390528491908216906323b872dd906064016020604051808303816000875af115801561099c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c09190612415565b5050505050565b60006109d48484846113bc565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a595760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161082a565b610a668533858403611298565b60019150505b9392505050565b6005546001600160a01b03163314610a9d5760405162461bcd60e51b815260040161082a906123a6565b600d91909155600c55565b600e546001600160a01b03163314610abf57600080fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b0b5760405162461bcd60e51b815260040161082a906123a6565b601954610913906000906001600160a01b03168161144a565b6005546001600160a01b03163314610b4e5760405162461bcd60e51b815260040161082a906123a6565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503610bbe5760405162461bcd60e51b815260206004820152601760248201527f544f4b454e3a20416c726561647920656e61626c65642e000000000000000000604482015260640161082a565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610923918590610c20908690612448565b611298565b6005546001600160a01b03163314610c4f5760405162461bcd60e51b815260040161082a906123a6565b600554600160a01b900460ff16610ca85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20436f6e7472616374206973206e6f7420706175736564000000604482015260640161082a565b610cb0611d57565b565b6005546001600160a01b03163314610cdc5760405162461bcd60e51b815260040161082a906123a6565b6109133382611df4565b6005546001600160a01b03163314610d105760405162461bcd60e51b815260040161082a906123a6565b610d19816110fa565b15610d715760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b606482015260840161082a565b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b6005546001600160a01b03163314610dbf5760405162461bcd60e51b815260040161082a906123a6565b60125460ff1615610e125760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054617820697320616c726561647920656e61626c6564000000604482015260640161082a565b6012805460ff19166001179055565b6005546001600160a01b03163314610e4b5760405162461bcd60e51b815260040161082a906123a6565b6127108111610e8a5760405162461bcd60e51b815260206004820152600b60248201526a1393c81c9d59c81c1d5b1b60aa1b604482015260640161082a565b610e9c81670de0b6b3a764000061245b565b60095550565b6005546001600160a01b03163314610ecc5760405162461bcd60e51b815260040161082a906123a6565b610cb06000611f42565b600f546001600160a01b03163314610eed57600080fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f395760405162461bcd60e51b815260040161082a906123a6565b600554600160a01b900460ff1615610f9d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a20436f6e747261637420697320616c72656164792070617573656044820152601960fa1b606482015260840161082a565b610cb0611f94565b60606004805461084d906123db565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110365760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161082a565b6110433385858403611298565b5060019392505050565b60006109233384846113bc565b6005546001600160a01b031633146110845760405162461bcd60e51b815260040161082a906123a6565b61108d816110fa565b6110d95760405162461bcd60e51b815260206004820152601e60248201527f45524332303a204163636f756e74206973206e6f74206578636c756465640000604482015260640161082a565b6001600160a01b03166000908152601560205260409020805460ff19169055565b6001600160a01b031660009081526015602052604090205460ff1690565b6005546001600160a01b031633146111425760405162461bcd60e51b815260040161082a906123a6565b60125460ff166111945760405162461bcd60e51b815260206004820152601e60248201527f45524332303a2054617820697320616c72656164792064697361626c65640000604482015260640161082a565b6012805460ff19169055565b6005546001600160a01b031633146111ca5760405162461bcd60e51b815260040161082a906123a6565b6012805461ff001916610100841515021790556014546000036111fc574360148190556111f8908290612448565b6013555b5050565b6005546001600160a01b0316331461122a5760405162461bcd60e51b815260040161082a906123a6565b6001600160a01b03811661128f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082a565b61091381611f42565b6001600160a01b0383166112fa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082a565b6001600160a01b03821661135b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600554600160a01b900460ff16156114215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20746f6b656e207472616e73666572207768696c652070617573604482015261195960f21b606482015260840161082a565b60125460ff161561143a5761143783838361144a565b90505b61144583838361201c565b505050565b60408051600280825260608201835260009283929190602083019080368337019050509050308160008151811061148357611483612488565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156114dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611500919061249e565b8160018151811061151357611513612488565b60200260200101906001600160a01b031690816001600160a01b03168152505061153c856110fa565b15801561154f575061154d846110fa565b155b15611d4e576000806007548561156591906124bb565b600f546001600160a01b0390811660009081526020819052604090205460195492935091811690881603611af557600d546115a0908361245b565b6115aa9084612448565b9250600c54826115ba919061245b565b6115c49084612448565b925082156115d7576115d78830856113bc565b600d546115e4908361245b565b601060008282546115f59190612448565b9091555050600c54611607908361245b565b601160008282546116189190612448565b909155505060115460105460009161162f91612448565b905080600003611646578695505050505050610a6c565b6017546011546010546000926001600160a01b03169163d06ca61f9161166c9190612448565b886040518363ffffffff1660e01b815260040161168a929190612521565b600060405180830381865afa1580156116a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116cf9190810190612542565b6001815181106116e1576116e1612488565b602002602001015190506008548110611aee576011544790600090611708906002906124bb565b856010546117169190612600565b6117209190612448565b60175490915061173b9030906001600160a01b031683611298565b6017546040516318cbafe560e01b81526001600160a01b03909116906318cbafe5906117749084906000908d9030904290600401612613565b6000604051808303816000875af1158015611793573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117bb9190810190612542565b5060006117c88347612600565b9050600060026011546117db91906124bb565b90506000670de0b6b3a76400008760026011546117f891906124bb565b61180a90670de0b6b3a764000061245b565b61181491906124bb565b61181e908561245b565b61182891906124bb565b90506000670de0b6b3a764000088601054670de0b6b3a764000061184c919061245b565b61185691906124bb565b611860908661245b565b61186a91906124bb565b6017549091506118859030906001600160a01b031685611298565b601754600e5460405163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c40160606040518083038185885af11580156118f5573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061191a919061264f565b5050506000838661192b9190612448565b60115460105461193b9190612448565b6119459190612600565b9050801561196557600f546119659030906001600160a01b0316836113bc565b600f546040516000916001600160a01b03169084908381818185875af1925050503d80600081146119b2576040519150601f19603f3d011682016040523d82523d6000602084013e6119b7565b606091505b5050905080611a085760405162461bcd60e51b815260206004820152601d60248201527f7472616e7366657220746f206465762077616c6c6574206661696c6564000000604482015260640161082a565b6000611a148585612448565b611a1e9088612600565b1115611adb57600f546000906001600160a01b0316611a3d8686612448565b611a479089612600565b604051600081818185875af1925050503d8060008114611a83576040519150601f19603f3d011682016040523d82523d6000602084013e611a88565b606091505b5050905080611ad95760405162461bcd60e51b815260206004820152601d60248201527f7472616e7366657220746f206465762077616c6c6574206661696c6564000000604482015260640161082a565b505b5050600060108190556011555050505050505b5050611c10565b6019546001600160a01b0390811690891603611c1057601254610100900460ff168015611b2457506013544311155b15611b6757611b3482606361245b565b611b3e9084612448565b9250611b4b82606361245b565b60106000828254611b5c9190612448565b90915550611bff9050565b600b54611b74908361245b565b611b7e9084612448565b9250600a5482611b8e919061245b565b611b989084612448565b600e54600954919450611bb8916001600160a01b03909116903090611298565b600b54611bc5908361245b565b60106000828254611bd69190612448565b9091555050600a54611be8908361245b565b60116000828254611bf99190612448565b90915550505b8215611c1057611c108830856113bc565b611c1a8387612600565b6019549096506001600160a01b03888116911614611cad5760095486611c55896001600160a01b031660009081526020819052604090205490565b611c5f9190612448565b1115611cad5760405162461bcd60e51b815260206004820152601860248201527f6d617857616c6c6574206c696d69742065786365656465640000000000000000604482015260640161082a565b601254610100900460ff16611d4a576001600160a01b03881660009081526016602052604090205460ff16611d4a5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606482015260840161082a565b5050505b50909392505050565b600554600160a01b900460ff16611da75760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161082a565b6005805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216611e545760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161082a565b6001600160a01b03821660009081526020819052604090205481811015611ec85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161082a565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611ef7908490612600565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600554600160a01b900460ff1615611fe15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161082a565b6005805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611dd73390565b6001600160a01b0383166120805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161082a565b6001600160a01b0382166120e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161082a565b6001600160a01b0383166000908152602081905260409020548181101561215a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161082a565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612191908490612448565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121dd91815260200190565b60405180910390a350505050565b600080604083850312156121fe57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561223a5785810183015185820160400152820161221e565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461091357600080fd5b6000806040838503121561228357600080fd5b823561228e8161225b565b946020939093013593505050565b6000806000606084860312156122b157600080fd5b83356122bc8161225b565b925060208401356122cc8161225b565b929592945050506040919091013590565b6000602082840312156122ef57600080fd5b8135610a6c8161225b565b801515811461091357600080fd5b6000806040838503121561231b57600080fd5b82356123268161225b565b91506020830135612336816122fa565b809150509250929050565b60006020828403121561235357600080fd5b5035919050565b6000806040838503121561236d57600080fd5b82356123788161225b565b915060208301356123368161225b565b6000806040838503121561239b57600080fd5b823561228e816122fa565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806123ef57607f821691505b60208210810361240f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561242757600080fd5b8151610a6c816122fa565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092757610927612432565b808202811582820484141761092757610927612432565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156124b057600080fd5b8151610a6c8161225b565b6000826124d857634e487b7160e01b600052601260045260246000fd5b500490565b600081518084526020808501945080840160005b838110156125165781516001600160a01b0316875295820195908201906001016124f1565b509495945050505050565b82815260406020820152600061253a60408301846124dd565b949350505050565b6000602080838503121561255557600080fd5b825167ffffffffffffffff8082111561256d57600080fd5b818501915085601f83011261258157600080fd5b81518181111561259357612593612472565b8060051b604051601f19603f830116810181811085821117156125b8576125b8612472565b6040529182528482019250838101850191888311156125d657600080fd5b938501935b828510156125f4578451845293850193928501926125db565b98975050505050505050565b8181038181111561092757610927612432565b85815284602082015260a06040820152600061263260a08301866124dd565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561266457600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c5020fc01884088dcdccf2d6b9412f4a460d2ad9fd873c4a36f61e45c3e62ea164736f6c63430008110033

Deployed Bytecode Sourcemap

21466:11264:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23735:160;;;;;;;;;;-1:-1:-1;23735:160:0;;;;;:::i;:::-;;:::i;:::-;;5265:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24623:161;;;;;;;;;;;;;:::i;6825:169::-;;;;;;;;;;-1:-1:-1;6825:169:0;;;;;:::i;:::-;;:::i;:::-;;;1441:14:1;;1434:22;1416:41;;1404:2;1389:18;6825:169:0;1276:187:1;32577:109:0;;;;;;;;;;-1:-1:-1;32659:19:0;;32577:109;;;1614:25:1;;;1602:2;1587:18;32577:109:0;1468:177:1;5778:108:0;;;;;;;;;;-1:-1:-1;5866:12:0;;5778:108;;21828:37;;;;;;;;;;;;;;;;24792:258;;;;;;;;;;-1:-1:-1;24792:258:0;;;;;:::i;:::-;;:::i;22026:28::-;;;;;;;;;;-1:-1:-1;22026:28:0;;;;;;;;7026:492;;;;;;;;;;-1:-1:-1;7026:492:0;;;;;:::i;:::-;;:::i;23958:179::-;;;;;;;;;;-1:-1:-1;23958:179:0;;;;;:::i;:::-;;:::i;24446:169::-;;;;;;;;;;-1:-1:-1;24446:169:0;;;;;:::i;:::-;;:::i;32197:106::-;;;;;;;;;;;;;:::i;32311:196::-;;;;;;;;;;-1:-1:-1;32311:196:0;;;;;:::i;:::-;;:::i;5620:93::-;;;;;;;;;;-1:-1:-1;5620:93:0;;5703:2;3015:36:1;;3003:2;2988:18;5620:93:0;2873:184:1;7550:215:0;;;;;;;;;;-1:-1:-1;7550:215:0;;;;;:::i;:::-;;:::i;23547:126::-;;;;;;;;;;;;;:::i;31503:91::-;;;;;;;;;;-1:-1:-1;31503:91:0;;;;;:::i;:::-;;:::i;22429:35::-;;;;;;;;;;-1:-1:-1;22429:35:0;;;;-1:-1:-1;;;;;22429:35:0;;;;;;-1:-1:-1;;;;;3434:32:1;;;3416:51;;3404:2;3389:18;22429:35:0;3247:226:1;31678:175:0;;;;;;;;;;-1:-1:-1;31678:175:0;;;;;:::i;:::-;;:::i;25115:136::-;;;;;;;;;;;;;:::i;12640:86::-;;;;;;;;;;-1:-1:-1;12711:7:0;;-1:-1:-1;;;12711:7:0;;;;12640:86;;31273:153;;;;;;;;;;-1:-1:-1;31273:153:0;;;;;:::i;:::-;;:::i;5949:127::-;;;;;;;;;;-1:-1:-1;5949:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;6050:18:0;6023:7;6050:18;;;;;;;;;;;;5949:127;11464:94;;;;;;;;;;;;;:::i;24204:179::-;;;;;;;;;;-1:-1:-1;24204:179:0;;;;;:::i;:::-;;:::i;23348:127::-;;;;;;;;;;;;;:::i;11136:87::-;;;;;;;;;;-1:-1:-1;11209:6:0;;-1:-1:-1;;;;;11209:6:0;11136:87;;5484:104;;;;;;;;;;;;;:::i;7797:413::-;;;;;;;;;;-1:-1:-1;7797:413:0;;;;;:::i;:::-;;:::i;22330:43::-;;;;;;;;;;-1:-1:-1;22330:43:0;;;;-1:-1:-1;;;;;22330:43:0;;;6289:175;;;;;;;;;;-1:-1:-1;6289:175:0;;;;;:::i;:::-;;:::i;31937:177::-;;;;;;;;;;-1:-1:-1;31937:177:0;;;;;:::i;:::-;;:::i;21743:36::-;;;;;;;;;;;;;;;;22275:42;;;;;;;;;;-1:-1:-1;22275:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21909:32;;;;;;;;;;-1:-1:-1;21909:32:0;;;;-1:-1:-1;;;;;21909:32:0;;;25560:110;;;;;;;;;;-1:-1:-1;25560:110:0;;;;;:::i;:::-;;:::i;25317:138::-;;;;;;;;;;;;;:::i;21872:30::-;;;;;;;;;;-1:-1:-1;21872:30:0;;;;-1:-1:-1;;;;;21872:30:0;;;6527:151;;;;;;;;;;-1:-1:-1;6527:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6643:18:0;;;6616:7;6643:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6527:151;25678:360;;;;;;;;;;-1:-1:-1;25678:360:0;;;;;:::i;:::-;;:::i;21702:34::-;;;;;;;;;;;;;;;;11713:192;;;;;;;;;;-1:-1:-1;11713:192:0;;;;;:::i;:::-;;:::i;21786:35::-;;;;;;;;;;;;;;;;21671:24;;;;;;;;;;;;;;;;23735:160;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;;;;;;;;;23820:17:::1;:26:::0;;;;23857:15:::1;:30:::0;23735:160::o;5265:100::-;5319:13;5352:5;5345:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5265:100;:::o;24623:161::-;24696:17;;-1:-1:-1;;;;;24696:17:0;24682:10;:31;24674:40;;;;;;24725:51;;24733:10;;24754:21;24725:51;;;;;;;;;24754:21;24733:10;24725:51;;;;;;;;;;;;;;;;;;;;;24623:161::o;6825:169::-;6908:4;6925:39;4359:10;6948:7;6957:6;6925:8;:39::i;:::-;-1:-1:-1;6982:4:0;6825:169;;;;;:::o;24792:258::-;24914:17;;-1:-1:-1;;;;;24914:17:0;24900:10;:31;24892:40;;;;;;24988:54;;-1:-1:-1;;;24988:54:0;;-1:-1:-1;;;;;5632:15:1;;;24988:54:0;;;5614:34:1;25027:4:0;5664:18:1;;;5657:43;5716:18;;;5709:34;;;24970:6:0;;24988:23;;;;;;5549:18:1;;24988:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24881:169;24792:258;;;:::o;7026:492::-;7166:4;7183:36;7193:6;7201:9;7212:6;7183:9;:36::i;:::-;-1:-1:-1;;;;;7259:19:0;;7232:24;7259:19;;;:11;:19;;;;;;;;4359:10;7259:33;;;;;;;;7311:26;;;;7303:79;;;;-1:-1:-1;;;7303:79:0;;6206:2:1;7303:79:0;;;6188:21:1;6245:2;6225:18;;;6218:30;6284:34;6264:18;;;6257:62;-1:-1:-1;;;6335:18:1;;;6328:38;6383:19;;7303:79:0;6004:404:1;7303:79:0;7418:57;7427:6;4359:10;7468:6;7449:16;:25;7418:8;:57::i;:::-;7506:4;7499:11;;;7026:492;;;;;;:::o;23958:179::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;24052:18:::1;:35:::0;;;;24098:16:::1;:31:::0;23958:179::o;24446:169::-;24544:15;;-1:-1:-1;;;;;24544:15:0;24530:10;:29;24522:38;;;;;;24571:15;:36;;-1:-1:-1;;;;;;24571:36:0;-1:-1:-1;;;;;24571:36:0;;;;;;;;;;24446:169::o;32197:106::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;32277:13:::1;::::0;32247:48:::1;::::0;32265:1:::1;::::0;-1:-1:-1;;;;;32277:13:0::1;32265:1:::0;32247:9:::1;:48::i;32311:196::-:0;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32403:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;:29;::::1;;:18;::::0;;::::1;:29;;::::0;32395:65:::1;;;::::0;-1:-1:-1;;;32395:65:0;;6615:2:1;32395:65:0::1;::::0;::::1;6597:21:1::0;6654:2;6634:18;;;6627:30;6693:25;6673:18;;;6666:53;6736:18;;32395:65:0::1;6413:347:1::0;32395:65:0::1;-1:-1:-1::0;;;;;32471:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:28;;-1:-1:-1;;32471:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32311:196::o;7550:215::-;4359:10;7638:4;7687:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7687:34:0;;;;;;;;;;7638:4;;7655:80;;7678:7;;7687:47;;7724:10;;7687:47;:::i;:::-;7655:8;:80::i;23547:126::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;12711:7;;-1:-1:-1;;;12711:7:0;;;;23594:50:::1;;;::::0;-1:-1:-1;;;23594:50:0;;7229:2:1;23594:50:0::1;::::0;::::1;7211:21:1::0;7268:2;7248:18;;;7241:30;7307:31;7287:18;;;7280:59;7356:18;;23594:50:0::1;7027:353:1::0;23594:50:0::1;23655:10;:8;:10::i;:::-;23547:126::o:0;31503:91::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;31561:25:::1;31567:10;31579:6;31561:5;:25::i;31678:175::-:0;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;31749:19:::1;31760:7;31749:10;:19::i;:::-;31748:20;31740:67;;;::::0;-1:-1:-1;;;31740:67:0;;7587:2:1;31740:67:0::1;::::0;::::1;7569:21:1::0;7626:2;7606:18;;;7599:30;7665:34;7645:18;;;7638:62;-1:-1:-1;;;7716:18:1;;;7709:32;7758:19;;31740:67:0::1;7385:398:1::0;31740:67:0::1;-1:-1:-1::0;;;;;31818:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;31818:27:0::1;31841:4;31818:27;::::0;;31678:175::o;25115:136::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;25173:9:::1;::::0;::::1;;25172:10;25164:52;;;::::0;-1:-1:-1;;;25164:52:0;;7990:2:1;25164:52:0::1;::::0;::::1;7972:21:1::0;8029:2;8009:18;;;8002:30;8068:31;8048:18;;;8041:59;8117:18;;25164:52:0::1;7788:353:1::0;25164:52:0::1;25227:9;:16:::0;;-1:-1:-1;;25227:16:0::1;25239:4;25227:16;::::0;;25115:136::o;31273:153::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;31359:5:::1;31350:6;:14;31341:39;;;::::0;-1:-1:-1;;;31341:39:0;;8348:2:1;31341:39:0::1;::::0;::::1;8330:21:1::0;8387:2;8367:18;;;8360:30;-1:-1:-1;;;8406:18:1;;;8399:41;8457:18;;31341:39:0::1;8146:335:1::0;31341:39:0::1;31403:15;:6:::0;31412::::1;31403:15;:::i;:::-;31391:9;:27:::0;-1:-1:-1;31273:153:0:o;11464:94::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;11529:21:::1;11547:1;11529:9;:21::i;24204:179::-:0;24306:17;;-1:-1:-1;;;;;24306:17:0;24292:10;:31;24284:40;;;;;;24335:17;:40;;-1:-1:-1;;;;;;24335:40:0;-1:-1:-1;;;;;24335:40:0;;;;;;;;;;24204:179::o;23348:127::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;12711:7;;-1:-1:-1;;;12711:7:0;;;;23401:9:::1;23393:55;;;::::0;-1:-1:-1;;;23393:55:0;;8861:2:1;23393:55:0::1;::::0;::::1;8843:21:1::0;8900:2;8880:18;;;8873:30;8939:34;8919:18;;;8912:62;-1:-1:-1;;;8990:18:1;;;8983:31;9031:19;;23393:55:0::1;8659:397:1::0;23393:55:0::1;23459:8;:6;:8::i;5484:104::-:0;5540:13;5573:7;5566:14;;;;;:::i;7797:413::-;4359:10;7890:4;7934:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7934:34:0;;;;;;;;;;7987:35;;;;7979:85;;;;-1:-1:-1;;;7979:85:0;;9263:2:1;7979:85:0;;;9245:21:1;9302:2;9282:18;;;9275:30;9341:34;9321:18;;;9314:62;-1:-1:-1;;;9392:18:1;;;9385:35;9437:19;;7979:85:0;9061:401:1;7979:85:0;8100:67;4359:10;8123:7;8151:15;8132:16;:34;8100:8;:67::i;:::-;-1:-1:-1;8198:4:0;;7797:413;-1:-1:-1;;;7797:413:0:o;6289:175::-;6375:4;6392:42;4359:10;6416:9;6427:6;6392:9;:42::i;31937:177::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;32013:19:::1;32024:7;32013:10;:19::i;:::-;32005:62;;;::::0;-1:-1:-1;;;32005:62:0;;9669:2:1;32005:62:0::1;::::0;::::1;9651:21:1::0;9708:2;9688:18;;;9681:30;9747:32;9727:18;;;9720:60;9797:18;;32005:62:0::1;9467:354:1::0;32005:62:0::1;-1:-1:-1::0;;;;;32078:20:0::1;32101:5;32078:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;32078:28:0::1;::::0;;31937:177::o;25560:110::-;-1:-1:-1;;;;;25642:20:0;25618:4;25642:20;;;:11;:20;;;;;;;;;25560:110::o;25317:138::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;25375:9:::1;::::0;::::1;;25367:52;;;::::0;-1:-1:-1;;;25367:52:0;;10028:2:1;25367:52:0::1;::::0;::::1;10010:21:1::0;10067:2;10047:18;;;10040:30;10106:32;10086:18;;;10079:60;10156:18;;25367:52:0::1;9826:354:1::0;25367:52:0::1;25430:9;:17:::0;;-1:-1:-1;;25430:17:0::1;::::0;;25317:138::o;25678:360::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;25763:11:::1;:26:::0;;-1:-1:-1;;25763:26:0::1;;::::0;::::1;;;;::::0;;25885:19:::1;::::0;-1:-1:-1;25885:24:0;25881:150:::1;;25948:12;25926:19;:34:::0;;;25993:26:::1;::::0;26008:11;;25993:26:::1;:::i;:::-;25975:15;:44:::0;25881:150:::1;25678:360:::0;;:::o;11713:192::-;11209:6;;-1:-1:-1;;;;;11209:6:0;4359:10;11356:23;11348:68;;;;-1:-1:-1;;;11348:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11802:22:0;::::1;11794:73;;;::::0;-1:-1:-1;;;11794:73:0;;10387:2:1;11794:73:0::1;::::0;::::1;10369:21:1::0;10426:2;10406:18;;;10399:30;10465:34;10445:18;;;10438:62;-1:-1:-1;;;10516:18:1;;;10509:36;10562:19;;11794:73:0::1;10185:402:1::0;11794:73:0::1;11878:19;11888:8;11878:9;:19::i;10059:380::-:0;-1:-1:-1;;;;;10195:19:0;;10187:68;;;;-1:-1:-1;;;10187:68:0;;10794:2:1;10187:68:0;;;10776:21:1;10833:2;10813:18;;;10806:30;10872:34;10852:18;;;10845:62;-1:-1:-1;;;10923:18:1;;;10916:34;10967:19;;10187:68:0;10592:400:1;10187:68:0;-1:-1:-1;;;;;10274:21:0;;10266:68;;;;-1:-1:-1;;;10266:68:0;;11199:2:1;10266:68:0;;;11181:21:1;11238:2;11218:18;;;11211:30;11277:34;11257:18;;;11250:62;-1:-1:-1;;;11328:18:1;;;11321:32;11370:19;;10266:68:0;10997:398:1;10266:68:0;-1:-1:-1;;;;;10347:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10399:32;;1614:25:1;;;10399:32:0;;1587:18:1;10399:32:0;;;;;;;10059:380;;;:::o;26046:367::-;12711:7;;-1:-1:-1;;;12711:7:0;;;;26195:9;26187:56;;;;-1:-1:-1;;;26187:56:0;;11602:2:1;26187:56:0;;;11584:21:1;11641:2;11621:18;;;11614:30;11680:34;11660:18;;;11653:62;-1:-1:-1;;;11731:18:1;;;11724:32;11773:19;;26187:56:0;11400:398:1;26187:56:0;26267:9;;;;26264:89;;;26302:36;26312:6;26320:9;26331:6;26302:9;:36::i;:::-;26293:45;;26264:89;26363:42;26379:6;26387:9;26398:6;26363:15;:42::i;:::-;26046:367;;;:::o;26577:4621::-;26703:16;;;26717:1;26703:16;;;;;;;;26655:7;;;;26703:16;26717:1;26703:16;;;;;;;;;;-1:-1:-1;26703:16:0;26675:44;;26752:4;26730:8;26739:1;26730:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26730:27:0;;;:11;;;;;;;;;;:27;;;;26782:17;;:24;;;-1:-1:-1;;;26782:24:0;;;;:17;;;;;:22;;:24;;;;;26730:11;;26782:24;;;;;:17;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26768:8;26777:1;26768:11;;;;;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;26768:38:0;;;-1:-1:-1;;;;;26768:38:0;;;;;26832:16;26843:4;26832:10;:16::i;:::-;26831:17;:36;;;;;26853:14;26864:2;26853:10;:14::i;:::-;26852:15;26831:36;26827:4330;;;26884:11;26910:16;26938:11;;26929:6;:20;;;;:::i;:::-;26997:17;;-1:-1:-1;;;;;26997:17:0;;;26964:20;6050:18;;;;;;;;;;;27048:13;;26910:39;;-1:-1:-1;6050:18:0;27048:13;;27034:28;;;;27030:3727;;27108:18;;27097:29;;:8;:29;:::i;:::-;27090:36;;;;:::i;:::-;;;27163:16;;27152:8;:27;;;;:::i;:::-;27145:34;;;;:::i;:::-;;-1:-1:-1;27219:7:0;;27216:93;;27251:35;27261:4;27275;27282:3;27251:9;:35::i;:::-;27376:18;;27365:29;;:8;:29;:::i;:::-;27344:17;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;;27443:16:0;;27432:27;;:8;:27;:::i;:::-;27413:15;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;27534:15:0;;27514:17;;27496:14;;27514:35;;;:::i;:::-;27496:53;;27573:6;27583:1;27573:11;27569:30;;27593:6;27586:13;;;;;;;;;27569:30;27637:17;;27690:15;;27670:17;;27618:16;;-1:-1:-1;;;;;27637:17:0;;:31;;27670:35;;27690:15;27670:35;:::i;:::-;27707:8;27637:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27637:79:0;;;;;;;;;;;;:::i;:::-;27717:1;27637:82;;;;;;;;:::i;:::-;;;;;;;27618:101;;27754:13;;27742:8;:25;27738:2162;;27915:15;;27815:21;;27792:20;;27915:19;;27933:1;;27915:19;:::i;:::-;27900:12;27880:17;;:32;;;;:::i;:::-;:54;;;;:::i;:::-;27990:17;;27859:75;;-1:-1:-1;27958:63:0;;27975:4;;-1:-1:-1;;;;;27990:17:0;27859:75;27958:8;:63::i;:::-;28044:17;;:244;;-1:-1:-1;;;28044:244:0;;-1:-1:-1;;;;;28044:17:0;;;;:39;;:244;;28110:10;;28044:17;;28175:8;;28218:4;;28250:15;;28044:244;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28044:244:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28311:17:0;28331:36;28355:12;28331:21;:36;:::i;:::-;28311:56;;28390:22;28433:1;28415:15;;:19;;;;:::i;:::-;28390:44;;28457:20;28538:6;28527;28513:1;28495:15;;:19;;;;:::i;:::-;:28;;28517:6;28495:28;:::i;:::-;28494:39;;;;:::i;:::-;28481:53;;:9;:53;:::i;:::-;28480:64;;;;:::i;:::-;28457:87;;28567:14;28640:6;28629;28599:17;;28619:6;28599:26;;;;:::i;:::-;28598:37;;;;:::i;:::-;28585:51;;:9;:51;:::i;:::-;28584:62;;;;:::i;:::-;28701:17;;28567:79;;-1:-1:-1;28669:67:0;;28686:4;;-1:-1:-1;;;;;28701:17:0;28721:14;28669:8;:67::i;:::-;28759:17;;28977:15;;28759:298;;-1:-1:-1;;;28759:298:0;;28848:4;28759:298;;;15519:34:1;15569:18;;;15562:34;;;28759:17:0;15612:18:1;;;15605:34;;;15655:18;;;15648:34;-1:-1:-1;;;;;28977:15:0;;;15698:19:1;;;15691:44;29019:15:0;15751:19:1;;;15744:35;28759:17:0;;;:33;;28800:12;;15453:19:1;;28759:298:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29080:23;29160:14;29147:10;:27;;;;:::i;:::-;29127:15;;29107:17;;:35;;;;:::i;:::-;29106:69;;;;:::i;:::-;29080:95;-1:-1:-1;29202:19:0;;29198:136;;29275:17;;29250:60;;29268:4;;-1:-1:-1;;;;;29275:17:0;29294:15;29250:9;:60::i;:::-;29374:17;;:41;;29357:12;;-1:-1:-1;;;;;29374:17:0;;29404:6;;29357:12;29374:41;29357:12;29374:41;29404:6;29374:17;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29356:59;;;29446:7;29438:49;;;;-1:-1:-1;;;29438:49:0;;16513:2:1;29438:49:0;;;16495:21:1;16552:2;16532:18;;;16525:30;16591:31;16571:18;;;16564:59;16640:18;;29438:49:0;16311:353:1;29438:49:0;29575:1;29550:21;29559:12;29550:6;:21;:::i;:::-;29536:36;;:9;:36;:::i;:::-;:40;29532:262;;;29623:17;;29605:13;;-1:-1:-1;;;;;29623:17:0;29666:21;29675:12;29666:6;:21;:::i;:::-;29653:35;;:9;:35;:::i;:::-;29623:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29604:89;;;29728:8;29720:50;;;;-1:-1:-1;;;29720:50:0;;16513:2:1;29720:50:0;;;16495:21:1;16552:2;16532:18;;;16525:30;16591:31;16571:18;;;16564:59;16640:18;;29720:50:0;16311:353:1;29720:50:0;29578:216;29532:262;-1:-1:-1;;29836:1:0;29816:17;:21;;;29860:15;:19;-1:-1:-1;;;;;;27738:2162:0;27064:2869;;27030:3727;;;29959:13;;-1:-1:-1;;;;;29959:13:0;;;29943:30;;;;29939:818;;30091:11;;;;;;;:46;;;;;30122:15;;30106:12;:31;;30091:46;30087:526;;;30169:13;:8;30180:2;30169:13;:::i;:::-;30162:20;;;;:::i;:::-;;-1:-1:-1;30226:13:0;:8;30237:2;30226:13;:::i;:::-;30205:17;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;30087:526:0;;-1:-1:-1;30087:526:0;;30306:17;;30295:28;;:8;:28;:::i;:::-;30288:35;;;;:::i;:::-;;;30364:15;;30353:8;:26;;;;:::i;:::-;30346:33;;;;:::i;:::-;30411:15;;30443:9;;30346:33;;-1:-1:-1;30402:51:0;;-1:-1:-1;;;;;30411:15:0;;;;30436:4;;30402:8;:51::i;:::-;30508:17;;30497:28;;:8;:28;:::i;:::-;30476:17;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;30578:15:0;;30567:26;;:8;:26;:::i;:::-;30548:15;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;30087:526:0;30652:7;;30649:93;;30684:35;30694:4;30708;30715:3;30684:9;:35::i;:::-;30785:13;30795:3;30785:13;;:::i;:::-;30831;;30785;;-1:-1:-1;;;;;;30817:28:0;;;30831:13;;30817:28;30813:140;;30899:9;;30889:6;30873:13;30883:2;-1:-1:-1;;;;;6050:18:0;6023:7;6050:18;;;;;;;;;;;;5949:127;30873:13;:22;;;;:::i;:::-;:35;;30865:72;;;;-1:-1:-1;;;30865:72:0;;16871:2:1;30865:72:0;;;16853:21:1;16910:2;16890:18;;;16883:30;16949:26;16929:18;;;16922:54;16993:18;;30865:72:0;16669:348:1;30865:72:0;31007:11;;;;;;;31002:144;;-1:-1:-1;;;;;31047:15:0;;;;;;:9;:15;;;;;;;;31039:91;;;;-1:-1:-1;;;31039:91:0;;17224:2:1;31039:91:0;;;17206:21:1;17263:2;17243:18;;;17236:30;17302:34;17282:18;;;17275:62;17373:33;17353:18;;;17346:61;17424:19;;31039:91:0;17022:427:1;31039:91:0;26869:4288;;;26827:4330;-1:-1:-1;31184:6:0;;26577:4621;-1:-1:-1;;;26577:4621:0:o;13376:120::-;12711:7;;-1:-1:-1;;;12711:7:0;;;;12912:41;;;;-1:-1:-1;;;12912:41:0;;17656:2:1;12912:41:0;;;17638:21:1;17695:2;17675:18;;;17668:30;-1:-1:-1;;;17714:18:1;;;17707:50;17774:18;;12912:41:0;17454:344:1;12912:41:0;13435:7:::1;:15:::0;;-1:-1:-1;;;;13435:15:0::1;::::0;;13466:22:::1;4359:10:::0;13475:12:::1;13466:22;::::0;-1:-1:-1;;;;;3434:32:1;;;3416:51;;3404:2;3389:18;13466:22:0::1;;;;;;;13376:120::o:0;9440:591::-;-1:-1:-1;;;;;9524:21:0;;9516:67;;;;-1:-1:-1;;;9516:67:0;;18005:2:1;9516:67:0;;;17987:21:1;18044:2;18024:18;;;18017:30;18083:34;18063:18;;;18056:62;-1:-1:-1;;;18134:18:1;;;18127:31;18175:19;;9516:67:0;17803:397:1;9516:67:0;-1:-1:-1;;;;;9683:18:0;;9658:22;9683:18;;;;;;;;;;;9720:24;;;;9712:71;;;;-1:-1:-1;;;9712:71:0;;18407:2:1;9712:71:0;;;18389:21:1;18446:2;18426:18;;;18419:30;18485:34;18465:18;;;18458:62;-1:-1:-1;;;18536:18:1;;;18529:32;18578:19;;9712:71:0;18205:398:1;9712:71:0;-1:-1:-1;;;;;9819:18:0;;:9;:18;;;;;;;;;;9840:23;;;9819:44;;9885:12;:22;;9857:6;;9819:9;9885:22;;9857:6;;9885:22;:::i;:::-;;;;-1:-1:-1;;9925:37:0;;1614:25:1;;;9951:1:0;;-1:-1:-1;;;;;9925:37:0;;;;;1602:2:1;1587:18;9925:37:0;;;;;;;26046:367;;;:::o;11913:174::-;11989:6;;;-1:-1:-1;;;;;12006:17:0;;;-1:-1:-1;;;;;;12006:17:0;;;;;;;12039:40;;11989:6;;;12006:17;11989:6;;12039:40;;11970:16;;12039:40;11959:128;11913:174;:::o;13117:118::-;12711:7;;-1:-1:-1;;;12711:7:0;;;;12801:9;12793:38;;;;-1:-1:-1;;;12793:38:0;;18810:2:1;12793:38:0;;;18792:21:1;18849:2;18829:18;;;18822:30;-1:-1:-1;;;18868:18:1;;;18861:46;18924:18;;12793:38:0;18608:340:1;12793:38:0;13177:7:::1;:14:::0;;-1:-1:-1;;;;13177:14:0::1;-1:-1:-1::0;;;13177:14:0::1;::::0;;13207:20:::1;13214:12;4359:10:::0;;4279:98;8243:733;-1:-1:-1;;;;;8383:20:0;;8375:70;;;;-1:-1:-1;;;8375:70:0;;19155:2:1;8375:70:0;;;19137:21:1;19194:2;19174:18;;;19167:30;19233:34;19213:18;;;19206:62;-1:-1:-1;;;19284:18:1;;;19277:35;19329:19;;8375:70:0;18953:401:1;8375:70:0;-1:-1:-1;;;;;8464:23:0;;8456:71;;;;-1:-1:-1;;;8456:71:0;;19561:2:1;8456:71:0;;;19543:21:1;19600:2;19580:18;;;19573:30;19639:34;19619:18;;;19612:62;-1:-1:-1;;;19690:18:1;;;19683:33;19733:19;;8456:71:0;19359:399:1;8456:71:0;-1:-1:-1;;;;;8624:17:0;;8600:21;8624:17;;;;;;;;;;;8660:23;;;;8652:74;;;;-1:-1:-1;;;8652:74:0;;19965:2:1;8652:74:0;;;19947:21:1;20004:2;19984:18;;;19977:30;20043:34;20023:18;;;20016:62;-1:-1:-1;;;20094:18:1;;;20087:36;20140:19;;8652:74:0;19763:402:1;8652:74:0;-1:-1:-1;;;;;8762:17:0;;;:9;:17;;;;;;;;;;;8782:22;;;8762:42;;8826:20;;;;;;;;:30;;8798:6;;8762:9;8826:30;;8798:6;;8826:30;:::i;:::-;;;;;;;;8891:9;-1:-1:-1;;;;;8874:35:0;8883:6;-1:-1:-1;;;;;8874:35:0;;8902:6;8874:35;;;;1614:25:1;;1602:2;1587:18;;1468:177;8874:35:0;;;;;;;;8364:612;8243:733;;;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;820:131::-;-1:-1:-1;;;;;895:31:1;;885:42;;875:70;;941:1;938;931:12;956:315;1024:6;1032;1085:2;1073:9;1064:7;1060:23;1056:32;1053:52;;;1101:1;1098;1091:12;1053:52;1140:9;1127:23;1159:31;1184:5;1159:31;:::i;:::-;1209:5;1261:2;1246:18;;;;1233:32;;-1:-1:-1;;;956:315:1:o;1650:456::-;1727:6;1735;1743;1796:2;1784:9;1775:7;1771:23;1767:32;1764:52;;;1812:1;1809;1802:12;1764:52;1851:9;1838:23;1870:31;1895:5;1870:31;:::i;:::-;1920:5;-1:-1:-1;1977:2:1;1962:18;;1949:32;1990:33;1949:32;1990:33;:::i;:::-;1650:456;;2042:7;;-1:-1:-1;;;2096:2:1;2081:18;;;;2068:32;;1650:456::o;2111:247::-;2170:6;2223:2;2211:9;2202:7;2198:23;2194:32;2191:52;;;2239:1;2236;2229:12;2191:52;2278:9;2265:23;2297:31;2322:5;2297:31;:::i;2363:118::-;2449:5;2442:13;2435:21;2428:5;2425:32;2415:60;;2471:1;2468;2461:12;2486:382;2551:6;2559;2612:2;2600:9;2591:7;2587:23;2583:32;2580:52;;;2628:1;2625;2618:12;2580:52;2667:9;2654:23;2686:31;2711:5;2686:31;:::i;:::-;2736:5;-1:-1:-1;2793:2:1;2778:18;;2765:32;2806:30;2765:32;2806:30;:::i;:::-;2855:7;2845:17;;;2486:382;;;;;:::o;3062:180::-;3121:6;3174:2;3162:9;3153:7;3149:23;3145:32;3142:52;;;3190:1;3187;3180:12;3142:52;-1:-1:-1;3213:23:1;;3062:180;-1:-1:-1;3062:180:1:o;3921:388::-;3989:6;3997;4050:2;4038:9;4029:7;4025:23;4021:32;4018:52;;;4066:1;4063;4056:12;4018:52;4105:9;4092:23;4124:31;4149:5;4124:31;:::i;:::-;4174:5;-1:-1:-1;4231:2:1;4216:18;;4203:32;4244:33;4203:32;4244:33;:::i;4314:309::-;4379:6;4387;4440:2;4428:9;4419:7;4415:23;4411:32;4408:52;;;4456:1;4453;4446:12;4408:52;4495:9;4482:23;4514:28;4536:5;4514:28;:::i;4628:356::-;4830:2;4812:21;;;4849:18;;;4842:30;4908:34;4903:2;4888:18;;4881:62;4975:2;4960:18;;4628:356::o;4989:380::-;5068:1;5064:12;;;;5111;;;5132:61;;5186:4;5178:6;5174:17;5164:27;;5132:61;5239:2;5231:6;5228:14;5208:18;5205:38;5202:161;;5285:10;5280:3;5276:20;5273:1;5266:31;5320:4;5317:1;5310:15;5348:4;5345:1;5338:15;5202:161;;4989:380;;;:::o;5754:245::-;5821:6;5874:2;5862:9;5853:7;5849:23;5845:32;5842:52;;;5890:1;5887;5880:12;5842:52;5922:9;5916:16;5941:28;5963:5;5941:28;:::i;6765:127::-;6826:10;6821:3;6817:20;6814:1;6807:31;6857:4;6854:1;6847:15;6881:4;6878:1;6871:15;6897:125;6962:9;;;6983:10;;;6980:36;;;6996:18;;:::i;8486:168::-;8559:9;;;8590;;8607:15;;;8601:22;;8587:37;8577:71;;8628:18;;:::i;11803:127::-;11864:10;11859:3;11855:20;11852:1;11845:31;11895:4;11892:1;11885:15;11919:4;11916:1;11909:15;11935:127;11996:10;11991:3;11987:20;11984:1;11977:31;12027:4;12024:1;12017:15;12051:4;12048:1;12041:15;12067:251;12137:6;12190:2;12178:9;12169:7;12165:23;12161:32;12158:52;;;12206:1;12203;12196:12;12158:52;12238:9;12232:16;12257:31;12282:5;12257:31;:::i;12323:217::-;12363:1;12389;12379:132;;12433:10;12428:3;12424:20;12421:1;12414:31;12468:4;12465:1;12458:15;12496:4;12493:1;12486:15;12379:132;-1:-1:-1;12525:9:1;;12323:217::o;12545:461::-;12598:3;12636:5;12630:12;12663:6;12658:3;12651:19;12689:4;12718:2;12713:3;12709:12;12702:19;;12755:2;12748:5;12744:14;12776:1;12786:195;12800:6;12797:1;12794:13;12786:195;;;12865:13;;-1:-1:-1;;;;;12861:39:1;12849:52;;12921:12;;;;12956:15;;;;12897:1;12815:9;12786:195;;;-1:-1:-1;12997:3:1;;12545:461;-1:-1:-1;;;;;12545:461:1:o;13011:332::-;13218:6;13207:9;13200:25;13261:2;13256;13245:9;13241:18;13234:30;13181:4;13281:56;13333:2;13322:9;13318:18;13310:6;13281:56;:::i;:::-;13273:64;13011:332;-1:-1:-1;;;;13011:332:1:o;13348:1105::-;13443:6;13474:2;13517;13505:9;13496:7;13492:23;13488:32;13485:52;;;13533:1;13530;13523:12;13485:52;13566:9;13560:16;13595:18;13636:2;13628:6;13625:14;13622:34;;;13652:1;13649;13642:12;13622:34;13690:6;13679:9;13675:22;13665:32;;13735:7;13728:4;13724:2;13720:13;13716:27;13706:55;;13757:1;13754;13747:12;13706:55;13786:2;13780:9;13808:2;13804;13801:10;13798:36;;;13814:18;;:::i;:::-;13860:2;13857:1;13853:10;13892:2;13886:9;13955:2;13951:7;13946:2;13942;13938:11;13934:25;13926:6;13922:38;14010:6;13998:10;13995:22;13990:2;13978:10;13975:18;13972:46;13969:72;;;14021:18;;:::i;:::-;14057:2;14050:22;14107:18;;;14141:15;;;;-1:-1:-1;14183:11:1;;;14179:20;;;14211:19;;;14208:39;;;14243:1;14240;14233:12;14208:39;14267:11;;;;14287:135;14303:6;14298:3;14295:15;14287:135;;;14369:10;;14357:23;;14320:12;;;;14400;;;;14287:135;;;14441:6;13348:1105;-1:-1:-1;;;;;;;;13348:1105:1:o;14458:128::-;14525:9;;;14546:11;;;14543:37;;;14560:18;;:::i;14591:582::-;14890:6;14879:9;14872:25;14933:6;14928:2;14917:9;14913:18;14906:34;14976:3;14971:2;14960:9;14956:18;14949:31;14853:4;14997:57;15049:3;15038:9;15034:19;15026:6;14997:57;:::i;:::-;-1:-1:-1;;;;;15090:32:1;;;;15085:2;15070:18;;15063:60;-1:-1:-1;15154:3:1;15139:19;15132:35;14989:65;14591:582;-1:-1:-1;;;14591:582:1:o;15790:306::-;15878:6;15886;15894;15947:2;15935:9;15926:7;15922:23;15918:32;15915:52;;;15963:1;15960;15953:12;15915:52;15992:9;15986:16;15976:26;;16042:2;16031:9;16027:18;16021:25;16011:35;;16086:2;16075:9;16071:18;16065:25;16055:35;;15790:306;;;;;:::o

Swarm Source

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