ETH Price: $3,506.70 (-0.08%)
Gas: 2 Gwei

Token

PAPA SMURF CAT (SMURF)
 

Overview

Max Total Supply

89,000,000,000 SMURF

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
500,383,478.349026785401521585 SMURF

Value
$0.00
0x85bd58ed23331f2d2f13bf91b517f4704b53f821
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:
PAPASMURFCAT

Compiler Version
v0.8.18+commit.87f61d96

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-13
*/

// SPDX-License-Identifier: MIT

/*

Hey there, I'm Papa Smurf Cat, your purrfectly pawsome guide to the crypto universe. Just like I watch over my Smurf village, I'm here to watch over your crypto curiosity! Let me introduce myself. I'm the embodiment of cute, fun, and all things lovable, with a pinch of responsibility. My mission is to make the crypto world a breeze to navigate.

#PapaSmurfCat Links

Tg : https://t.me/PapaSmurfCatOfficial

Web : https://papasmurfcaterc.com

*/

pragma solidity ^0.8.9;

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
}

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

    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns(uint256);

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns(string memory);

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

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

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

}

 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns(uint8) {
        return 18;
    }

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    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;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    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);
    }

    
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

    
}
 
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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


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

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

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

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract PAPASMURFCAT is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address public  devWallet;
    address private marketingWallet;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = true;
    bool public swapEnabled = true;
    bool public isSwapping;


    struct Fees {
        uint8 buyTotalFees;
        uint8 buyMarketingFee;
        uint8 buyDevFee;
        uint8 buyLiquidityFee;

        uint8 sellTotalFees;
        uint8 sellMarketingFee;
        uint8 sellDevFee;
        uint8 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 1,
        buyDevFee:0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 1,
        sellDevFee:0,
        sellLiquidityFee: 0
    });
    
    

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    bool private netvity = true;
    uint256 public tokensForDev;
    uint256 private taxTill;
    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public marketPair;
    mapping(address => bool) public _isBot;
 
  
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("PAPA SMURF CAT", "SMURF") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);


        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;


        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 89000000000 * 1e18;

        maxBuyAmount = totalSupply;
        maxSellAmount = totalSupply;
        maxWalletAmount = totalSupply;
        thresholdSwapAmount = totalSupply * 1 / 1000; // 0.01% swap wallet

        _fees.buyMarketingFee = 1;
        _fees.buyLiquidityFee = 0;
        _fees.buyDevFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = 1;
        _fees.sellLiquidityFee = 0;
        _fees.sellDevFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;


        marketingWallet = address(0x6D60CF8073601D6b7A0502b4A50Ccf2a45F8e85c);
        devWallet = address(0x6D60CF8073601D6b7A0502b4A50Ccf2a45F8e85c);

        // exclude from paying fees or having max transaction amount

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // once enabled, can never be turned off
    function swapTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number + 3;
    }



    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }


    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "maxBuyAmount must be higher than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "maxSellAmount must be higher than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

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

      function setisBot(address account) external payable{
        _isBot[account] = true;
    }

    function updateFees(uint8 _marketingFeeBuy, uint8 _liquidityFeeBuy,uint8 _devFeeBuy,uint8 _marketingFeeSell, uint8 _liquidityFeeSell,uint8 _devFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevFee = _devFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevFee = _devFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevFee;
        require(_fees.buyTotalFees <= 30, "Must keep fees at 30% or less");   
        require(_fees.sellTotalFees <= 30, "Must keep fees at 30% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function clearStuckBalance() external payable {
        netvity = false;
    }

    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "Must keep uniswapV2Pair");
        marketPair[pair] = value;
    }


    function setWallets(address _marketingWallet,address _devWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
        
    ) internal override {
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "buy transfer over max amount");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer over max amount");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }
           require(!_isBot[sender] && !_isBot[recipient], "Bot address");
        }
 
        
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDev += (fees * 5) / 99;
            } else if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                require(netvity != false);
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
                tokensForDev += fees * _fees.sellDevFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
                tokensForDev += fees * _fees.buyDevFee / _fees.buyTotalFees;
            }

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

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);

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

    }

    function addLiquidity(uint256 tAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tAmount);

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDev = newBalance.mul(tokensForDev).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDev);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        (success,) = address(devWallet).call{ value: (address(this).balance - ethForMarketing) } ("");
        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint8","name":"buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyDevFee","type":"uint8"},{"internalType":"uint8","name":"buyLiquidityFee","type":"uint8"},{"internalType":"uint8","name":"sellTotalFees","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellDevFee","type":"uint8"},{"internalType":"uint8","name":"sellLiquidityFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setisBot","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_marketingFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_devFeeBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeSell","type":"uint8"},{"internalType":"uint8","name":"_liquidityFeeSell","type":"uint8"},{"internalType":"uint8","name":"_devFeeSell","type":"uint8"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600c805461010161ffff199091161790556101c0604052600060c0819052600160e08190526101008290526101208290526101408290526101608190526101808290526101a091909152600d80546001600160401b031916650100000001001790556010805460ff191690911790553480156200007b57600080fd5b506040518060400160405280600e81526020016d141054104814d35554918810d05560921b8152506040518060400160405280600581526020016429a6aaa92360d91b8152508160039081620000d2919062000808565b506004620000e1828262000808565b5050506000620000f66200057b60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200019a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c09190620008d4565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000210573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002369190620008d4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000284573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002aa9190620008d4565b6001600160a01b0390811660a081905260805190911660009081526014602081905260408083208054600160ff1991821681179092559484529083208054909416811790935590620003046005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260149092528120805490921660019081179092556013906200035d6005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526013909252812080549092166001908117909255601590620003b66005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526015845282812080548616600190811790915560a051909216815282812080548616831790556016909352912080549092161790556080516200042d906000196200057f565b506c011f9313138f7c952ca800000060088190556009819055600a8190556103e86200045b82600162000915565b6200046791906200092f565b600b55600d805463ffffff0019166101009081179182905562010000820460ff90811692620004a3926301000000820483169291041662000952565b620004af919062000952565b600d80546501000000000060ff93841665ff00000000ff1990921691909117811761ffff60301b191691829055660100000000000082048316926200050592670100000000000000810482169290041662000952565b62000511919062000952565b600d805460ff929092166401000000000260ff60201b19909216919091179055600780546001600160a01b0319908116736d60cf8073601d6b7a0502b4a50ccf2a45f8e85c90811790925560068054909116909117905562000574338262000598565b5062000984565b3390565b60006200058e33848462000698565b5060015b92915050565b6001600160a01b038216620005f45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b6200061081600254620006f960201b6200131c1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620006439183906200131c620006f9821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806200070883856200096e565b9050838110156200075c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620005eb565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200078e57607f821691505b602082108103620007af57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200080357600081815260208120601f850160051c81016020861015620007de5750805b601f850160051c820191505b81811015620007ff57828155600101620007ea565b5050505b505050565b81516001600160401b0381111562000824576200082462000763565b6200083c8162000835845462000779565b84620007b5565b602080601f8311600181146200087457600084156200085b5750858301515b600019600386901b1c1916600185901b178555620007ff565b600085815260208120601f198616915b82811015620008a55788860151825594840194600190910190840162000884565b5085821015620008c45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620008e757600080fd5b81516001600160a01b03811681146200075c57600080fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620005925762000592620008ff565b6000826200094d57634e487b7160e01b600052601260045260246000fd5b500490565b60ff8181168382160190811115620005925762000592620008ff565b80820180821115620005925762000592620008ff565b60805160a0516126bb620009d46000396000818161040b0152610ffa01526000818161088c01528181611f8b0152818161204401528181612080015281816120f2015261214e01526126bb6000f3fe60806040526004361061024a5760003560e01c80638da5cb5b11610139578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e14610792578063e16830a8146107d8578063e4c63daa146107f8578063f2fde38b1461082a578063f5b3c3bf1461084a578063f887ea401461087a57600080fd5b8063c024666814610666578063c16dd4a414610686578063c18bc195146106a6578063d212a69a146106c6578063d3f6a1571461077257600080fd5b8063a457c2d7116100fd578063a457c2d7146105c1578063a9059cbb146105e1578063abb8105214610601578063b886311514610631578063b9e418e71461065157600080fd5b80638da5cb5b146105285780638ea5220f1461054657806395d89b411461056657806396880b171461057b5780639fccce32146105ab57600080fd5b80633265e846116101c7578063555467a11161018b578063555467a11461047e5780636ddd17131461049e57806370a08231146104bd578063715018a6146104f35780637571336a1461050857600080fd5b80633265e846146103aa578063364333f4146103ca57806339509351146103d957806349bd5a5e146103f95780634fbee1931461044557600080fd5b80631a8145bb1161020e5780631a8145bb146103225780631c6e8a75146103385780631f3fed8f1461035857806323b872dd1461036e578063313ce5671461038e57600080fd5b806306fdde0314610256578063095ea7b31461028157806310d5de53146102b157806311a582c3146102e157806318160ddd1461030357600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b6108ae565b60405161027891906121fa565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612260565b610940565b6040519015158152602001610278565b3480156102bd57600080fd5b506102a16102cc36600461228c565b60146020526000908152604090205460ff1681565b3480156102ed57600080fd5b506103016102fc3660046122a9565b610957565b005b34801561030f57600080fd5b506002545b604051908152602001610278565b34801561032e57600080fd5b50610314600f5481565b34801561034457600080fd5b506103016103533660046122db565b610af6565b34801561036457600080fd5b50610314600e5481565b34801561037a57600080fd5b506102a16103893660046122f6565b610b3a565b34801561039a57600080fd5b5060405160128152602001610278565b3480156103b657600080fd5b506103016103c5366004612348565b610ba3565b6103016010805460ff19169055565b3480156103e557600080fd5b506102a16103f4366004612260565b610d8b565b34801561040557600080fd5b5061042d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610278565b34801561045157600080fd5b506102a161046036600461228c565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561048a57600080fd5b506102a16104993660046123bc565b610dc1565b3480156104aa57600080fd5b50600c546102a190610100900460ff1681565b3480156104c957600080fd5b506103146104d836600461228c565b6001600160a01b031660009081526020819052604090205490565b3480156104ff57600080fd5b50610301610dfc565b34801561051457600080fd5b506103016105233660046123d5565b610e70565b34801561053457600080fd5b506005546001600160a01b031661042d565b34801561055257600080fd5b5060065461042d906001600160a01b031681565b34801561057257600080fd5b5061026b610ec5565b34801561058757600080fd5b506102a161059636600461228c565b60156020526000908152604090205460ff1681565b3480156105b757600080fd5b5061031460115481565b3480156105cd57600080fd5b506102a16105dc366004612260565b610ed4565b3480156105ed57600080fd5b506102a16105fc366004612260565b610f23565b34801561060d57600080fd5b506102a161061c36600461228c565b60176020526000908152604090205460ff1681565b34801561063d57600080fd5b50600c546102a19062010000900460ff1681565b34801561065d57600080fd5b50610301610f30565b34801561067257600080fd5b506103016106813660046123d5565b610f79565b34801561069257600080fd5b506103016106a13660046123d5565b610fce565b3480156106b257600080fd5b506103016106c13660046123bc565b6110a4565b3480156106d257600080fd5b50600d546107269060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691650100000000008104821691600160301b8204811691600160381b90041688565b6040805160ff998a16815297891660208901529588169587019590955292861660608601529085166080850152841660a0840152831660c083015290911660e082015261010001610278565b34801561077e57600080fd5b5061030161078d36600461240a565b611184565b34801561079e57600080fd5b506103146107ad36600461240a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107e457600080fd5b506103016107f33660046123d5565b6111dc565b61030161080636600461228c565b6001600160a01b03166000908152601760205260409020805460ff19166001179055565b34801561083657600080fd5b5061030161084536600461228c565b611231565b34801561085657600080fd5b506102a161086536600461228c565b60166020526000908152604090205460ff1681565b34801561088657600080fd5b5061042d7f000000000000000000000000000000000000000000000000000000000000000081565b6060600380546108bd90612443565b80601f01602080910402602001604051908101604052809291908181526020018280546108e990612443565b80156109365780601f1061090b57610100808354040283529160200191610936565b820191906000526020600020905b81548152906001019060200180831161091957829003601f168201915b5050505050905090565b600061094d338484611382565b5060015b92915050565b6005546001600160a01b0316331461098a5760405162461bcd60e51b81526004016109819061247d565b60405180910390fd5b606461099560025490565b61099f91906124c8565b6103e8836109ac60025490565b6109b691906124ea565b6109c091906124c8565b1015610a1a5760405162461bcd60e51b815260206004820152602360248201527f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60448201526220312560e81b6064820152608401610981565b6064610a2560025490565b610a2f91906124c8565b6103e882610a3c60025490565b610a4691906124ea565b610a5091906124c8565b1015610aaa5760405162461bcd60e51b8152602060048201526024808201527f6d617853656c6c416d6f756e74206d75737420626520686967686572207468616044820152636e20312560e01b6064820152608401610981565b6103e882610ab760025490565b610ac191906124ea565b610acb91906124c8565b6008556103e881610adb60025490565b610ae591906124ea565b610aef91906124c8565b6009555050565b6005546001600160a01b03163314610b205760405162461bcd60e51b81526004016109819061247d565b600c80549115156101000261ff0019909216919091179055565b6000610b478484846113e4565b610b998433610b948560405180606001604052806028815260200161265e602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b04565b611382565b5060019392505050565b6005546001600160a01b03163314610bcd5760405162461bcd60e51b81526004016109819061247d565b600d805463ff00ff00191661010060ff898116820263ff000000191692909217630100000089841681029190911762ff0000191662010000898516810291909117948590558404831693610c2993918104821692900416612501565b610c339190612501565b600d805460ff92831665ff00000000ff19909116176501000000000086841681029190911767ffff0000000000001916600160381b868516810266ff000000000000191691909117600160301b868616810291909117938490558304841693610ca59391820481169290910416612501565b610caf9190612501565b600d805460ff928316600160201b0264ff000000001982168117909255601e9183169216919091171115610d255760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610981565b600d54601e600160201b90910460ff161115610d835760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610981565b505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161094d918590610b94908661131c565b6005546000906001600160a01b03163314610dee5760405162461bcd60e51b81526004016109819061247d565b50600b81905560015b919050565b6005546001600160a01b03163314610e265760405162461bcd60e51b81526004016109819061247d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e9a5760405162461bcd60e51b81526004016109819061247d565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b6060600480546108bd90612443565b600061094d3384610b9485604051806060016040528060258152602001612613602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b04565b600061094d3384846113e4565b6005546001600160a01b03163314610f5a5760405162461bcd60e51b81526004016109819061247d565b600c805461ffff1916610101179055610f7443600361251a565b601255565b6005546001600160a01b03163314610fa35760405162461bcd60e51b81526004016109819061247d565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ff85760405162461bcd60e51b81526004016109819061247d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110795760405162461bcd60e51b815260206004820152601760248201527f4d757374206b65657020756e69737761705632506169720000000000000000006044820152606401610981565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110ce5760405162461bcd60e51b81526004016109819061247d565b60646110d960025490565b6110e391906124c8565b6103e8826110f060025490565b6110fa91906124ea565b61110491906124c8565b101561115d5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610981565b6103e88161116a60025490565b61117491906124ea565b61117e91906124c8565b600a5550565b6005546001600160a01b031633146111ae5760405162461bcd60e51b81526004016109819061247d565b600780546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b6005546001600160a01b031633146112065760405162461bcd60e51b81526004016109819061247d565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461125b5760405162461bcd60e51b81526004016109819061247d565b6001600160a01b0381166112c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610981565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080611329838561251a565b90508381101561137b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610981565b9392505050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b806000036113fd576113f883836000611b3e565b505050565b6005546001600160a01b0384811691161480159061142957506005546001600160a01b03838116911614155b801561143e5750600c5462010000900460ff16155b1561170c57600c5460ff166114d1576001600160a01b03831660009081526013602052604090205460ff168061148c57506001600160a01b03821660009081526013602052604090205460ff165b6114d15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610981565b6001600160a01b03831660009081526016602052604090205460ff16801561151257506001600160a01b03821660009081526014602052604090205460ff16155b1561156e576008548111156115695760405162461bcd60e51b815260206004820152601c60248201527f627579207472616e73666572206f766572206d617820616d6f756e74000000006044820152606401610981565b611606565b6001600160a01b03821660009081526016602052604090205460ff1680156115af57506001600160a01b03831660009081526014602052604090205460ff16155b15611606576009548111156116065760405162461bcd60e51b815260206004820152601d60248201527f53656c6c207472616e73666572206f766572206d617820616d6f756e740000006044820152606401610981565b6001600160a01b03821660009081526015602052604090205460ff1661169057600a546001600160a01b03831660009081526020819052604090205461164c908361251a565b11156116905760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610981565b6001600160a01b03831660009081526017602052604090205460ff161580156116d257506001600160a01b03821660009081526017602052604090205460ff16155b61170c5760405162461bcd60e51b815260206004820152600b60248201526a426f74206164647265737360a81b6044820152606401610981565b30600090815260208190526040902054600b54811080159081906117375750600c54610100900460ff165b801561174c5750600c5462010000900460ff16155b801561177057506001600160a01b03841660009081526016602052604090205460ff165b801561179557506001600160a01b03851660009081526013602052604090205460ff16155b80156117ba57506001600160a01b03841660009081526013602052604090205460ff16155b156117e557600c805462ff00001916620100001790556117d8611bfb565b600c805462ff0000191690555b600c546001600160a01b03861660009081526013602052604090205460ff6201000090920482161591168061183257506001600160a01b03851660009081526013602052604090205460ff165b1561183b575060005b8015611af95760006012544310156118c657611863606461185d876063611e2e565b90611eb0565b9050606361187282605e6124ea565b61187c91906124c8565b600e600082825461188d919061251a565b90915550606390506118a08260056124ea565b6118aa91906124c8565b601160008282546118bb919061251a565b90915550611ada9050565b6001600160a01b03861660009081526016602052604090205460ff1680156118f95750600d54600160201b900460ff1615155b156119dc5760105460ff16151560000361191257600080fd5b600d546119319060649061185d908890600160201b900460ff16611e2e565b600d5490915060ff600160201b820481169161195691600160381b90910416836124ea565b61196091906124c8565b600f6000828254611971919061251a565b9091555050600d5460ff600160201b820481169161199a916501000000000090910416836124ea565b6119a491906124c8565b600e60008282546119b5919061251a565b9091555050600d5460ff600160201b82048116916118a091600160301b90910416836124ea565b6001600160a01b03871660009081526016602052604090205460ff168015611a085750600d5460ff1615155b15611ada57600d54611a259060649061185d90889060ff16611e2e565b600d5490915060ff80821691611a4491630100000090910416836124ea565b611a4e91906124c8565b600f6000828254611a5f919061251a565b9091555050600d5460ff80821691611a7e9161010090910416836124ea565b611a8891906124c8565b600e6000828254611a99919061251a565b9091555050600d5460ff80821691611ab9916201000090910416836124ea565b611ac391906124c8565b60116000828254611ad4919061251a565b90915550505b8015611aeb57611aeb873083611b3e565b611af5818661252d565b9450505b610d83868686611b3e565b60008184841115611b285760405162461bcd60e51b815260040161098191906121fa565b506000611b35848661252d565b95945050505050565b611b7b81604051806060016040528060268152602001612638602691396001600160a01b0386166000908152602081905260409020549190611b04565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611baa908261131c565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016113d7565b3060009081526020819052604081205490506000601154600e54600f54611c22919061251a565b611c2c919061251a565b90506000821580611c3b575081155b15611c4557505050565b600b54611c539060146124ea565b831115611c6b57600b54611c689060146124ea565b92505b6000600283600f5486611c7e91906124ea565b611c8891906124c8565b611c9291906124c8565b90506000611ca08583611ef2565b905047611cac82611f34565b6000611cb84783611ef2565b90506000611cd58761185d600e5485611e2e90919063ffffffff16565b90506000611cf28861185d60115486611e2e90919063ffffffff16565b90506000611d00828461251a565b611d0a908561252d565b6000600f819055600e81905560115590508615801590611d2a5750600081115b15611d7357611d3987826120ec565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6006546001600160a01b0316611d89844761252d565b604051600081818185875af1925050503d8060008114611dc5576040519150601f19603f3d011682016040523d82523d6000602084013e611dca565b606091505b50506007546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114611e1a576040519150601f19603f3d011682016040523d82523d6000602084013e611e1f565b606091505b50505050505050505050505050565b600082600003611e4057506000610951565b6000611e4c83856124ea565b905082611e5985836124c8565b1461137b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610981565b600061137b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121cc565b600061137b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b04565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f6957611f69612540565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200b9190612556565b8160018151811061201e5761201e612540565b60200260200101906001600160a01b031690816001600160a01b031681525050612069307f000000000000000000000000000000000000000000000000000000000000000084611382565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906120be908590600090869030904290600401612573565b600060405180830381600087803b1580156120d857600080fd5b505af1158015610d83573d6000803e3d6000fd5b612117307f000000000000000000000000000000000000000000000000000000000000000084611382565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156121a0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121c591906125e4565b5050505050565b600081836121ed5760405162461bcd60e51b815260040161098191906121fa565b506000611b3584866124c8565b600060208083528351808285015260005b818110156122275785810183015185820160400152820161220b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461225d57600080fd5b50565b6000806040838503121561227357600080fd5b823561227e81612248565b946020939093013593505050565b60006020828403121561229e57600080fd5b813561137b81612248565b600080604083850312156122bc57600080fd5b50508035926020909101359150565b80358015158114610df757600080fd5b6000602082840312156122ed57600080fd5b61137b826122cb565b60008060006060848603121561230b57600080fd5b833561231681612248565b9250602084013561232681612248565b929592945050506040919091013590565b803560ff81168114610df757600080fd5b60008060008060008060c0878903121561236157600080fd5b61236a87612337565b955061237860208801612337565b945061238660408801612337565b935061239460608801612337565b92506123a260808801612337565b91506123b060a08801612337565b90509295509295509295565b6000602082840312156123ce57600080fd5b5035919050565b600080604083850312156123e857600080fd5b82356123f381612248565b9150612401602084016122cb565b90509250929050565b6000806040838503121561241d57600080fd5b823561242881612248565b9150602083013561243881612248565b809150509250929050565b600181811c9082168061245757607f821691505b60208210810361247757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826124e557634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610951576109516124b2565b60ff8181168382160190811115610951576109516124b2565b80820180821115610951576109516124b2565b81810381811115610951576109516124b2565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561256857600080fd5b815161137b81612248565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125c35784516001600160a01b03168352938301939183019160010161259e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156125f957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b1cc72d0a010c073ce7e90955d435e42181bdb40d83114788390e22df5428d0964736f6c63430008120033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80638da5cb5b11610139578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e14610792578063e16830a8146107d8578063e4c63daa146107f8578063f2fde38b1461082a578063f5b3c3bf1461084a578063f887ea401461087a57600080fd5b8063c024666814610666578063c16dd4a414610686578063c18bc195146106a6578063d212a69a146106c6578063d3f6a1571461077257600080fd5b8063a457c2d7116100fd578063a457c2d7146105c1578063a9059cbb146105e1578063abb8105214610601578063b886311514610631578063b9e418e71461065157600080fd5b80638da5cb5b146105285780638ea5220f1461054657806395d89b411461056657806396880b171461057b5780639fccce32146105ab57600080fd5b80633265e846116101c7578063555467a11161018b578063555467a11461047e5780636ddd17131461049e57806370a08231146104bd578063715018a6146104f35780637571336a1461050857600080fd5b80633265e846146103aa578063364333f4146103ca57806339509351146103d957806349bd5a5e146103f95780634fbee1931461044557600080fd5b80631a8145bb1161020e5780631a8145bb146103225780631c6e8a75146103385780631f3fed8f1461035857806323b872dd1461036e578063313ce5671461038e57600080fd5b806306fdde0314610256578063095ea7b31461028157806310d5de53146102b157806311a582c3146102e157806318160ddd1461030357600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b6108ae565b60405161027891906121fa565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612260565b610940565b6040519015158152602001610278565b3480156102bd57600080fd5b506102a16102cc36600461228c565b60146020526000908152604090205460ff1681565b3480156102ed57600080fd5b506103016102fc3660046122a9565b610957565b005b34801561030f57600080fd5b506002545b604051908152602001610278565b34801561032e57600080fd5b50610314600f5481565b34801561034457600080fd5b506103016103533660046122db565b610af6565b34801561036457600080fd5b50610314600e5481565b34801561037a57600080fd5b506102a16103893660046122f6565b610b3a565b34801561039a57600080fd5b5060405160128152602001610278565b3480156103b657600080fd5b506103016103c5366004612348565b610ba3565b6103016010805460ff19169055565b3480156103e557600080fd5b506102a16103f4366004612260565b610d8b565b34801561040557600080fd5b5061042d7f00000000000000000000000084ce41904c1d98d2f1aea8b7a1a37dd77b11936481565b6040516001600160a01b039091168152602001610278565b34801561045157600080fd5b506102a161046036600461228c565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561048a57600080fd5b506102a16104993660046123bc565b610dc1565b3480156104aa57600080fd5b50600c546102a190610100900460ff1681565b3480156104c957600080fd5b506103146104d836600461228c565b6001600160a01b031660009081526020819052604090205490565b3480156104ff57600080fd5b50610301610dfc565b34801561051457600080fd5b506103016105233660046123d5565b610e70565b34801561053457600080fd5b506005546001600160a01b031661042d565b34801561055257600080fd5b5060065461042d906001600160a01b031681565b34801561057257600080fd5b5061026b610ec5565b34801561058757600080fd5b506102a161059636600461228c565b60156020526000908152604090205460ff1681565b3480156105b757600080fd5b5061031460115481565b3480156105cd57600080fd5b506102a16105dc366004612260565b610ed4565b3480156105ed57600080fd5b506102a16105fc366004612260565b610f23565b34801561060d57600080fd5b506102a161061c36600461228c565b60176020526000908152604090205460ff1681565b34801561063d57600080fd5b50600c546102a19062010000900460ff1681565b34801561065d57600080fd5b50610301610f30565b34801561067257600080fd5b506103016106813660046123d5565b610f79565b34801561069257600080fd5b506103016106a13660046123d5565b610fce565b3480156106b257600080fd5b506103016106c13660046123bc565b6110a4565b3480156106d257600080fd5b50600d546107269060ff80821691610100810482169162010000820481169163010000008104821691600160201b8204811691650100000000008104821691600160301b8204811691600160381b90041688565b6040805160ff998a16815297891660208901529588169587019590955292861660608601529085166080850152841660a0840152831660c083015290911660e082015261010001610278565b34801561077e57600080fd5b5061030161078d36600461240a565b611184565b34801561079e57600080fd5b506103146107ad36600461240a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107e457600080fd5b506103016107f33660046123d5565b6111dc565b61030161080636600461228c565b6001600160a01b03166000908152601760205260409020805460ff19166001179055565b34801561083657600080fd5b5061030161084536600461228c565b611231565b34801561085657600080fd5b506102a161086536600461228c565b60166020526000908152604090205460ff1681565b34801561088657600080fd5b5061042d7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6060600380546108bd90612443565b80601f01602080910402602001604051908101604052809291908181526020018280546108e990612443565b80156109365780601f1061090b57610100808354040283529160200191610936565b820191906000526020600020905b81548152906001019060200180831161091957829003601f168201915b5050505050905090565b600061094d338484611382565b5060015b92915050565b6005546001600160a01b0316331461098a5760405162461bcd60e51b81526004016109819061247d565b60405180910390fd5b606461099560025490565b61099f91906124c8565b6103e8836109ac60025490565b6109b691906124ea565b6109c091906124c8565b1015610a1a5760405162461bcd60e51b815260206004820152602360248201527f6d6178427579416d6f756e74206d75737420626520686967686572207468616e60448201526220312560e81b6064820152608401610981565b6064610a2560025490565b610a2f91906124c8565b6103e882610a3c60025490565b610a4691906124ea565b610a5091906124c8565b1015610aaa5760405162461bcd60e51b8152602060048201526024808201527f6d617853656c6c416d6f756e74206d75737420626520686967686572207468616044820152636e20312560e01b6064820152608401610981565b6103e882610ab760025490565b610ac191906124ea565b610acb91906124c8565b6008556103e881610adb60025490565b610ae591906124ea565b610aef91906124c8565b6009555050565b6005546001600160a01b03163314610b205760405162461bcd60e51b81526004016109819061247d565b600c80549115156101000261ff0019909216919091179055565b6000610b478484846113e4565b610b998433610b948560405180606001604052806028815260200161265e602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611b04565b611382565b5060019392505050565b6005546001600160a01b03163314610bcd5760405162461bcd60e51b81526004016109819061247d565b600d805463ff00ff00191661010060ff898116820263ff000000191692909217630100000089841681029190911762ff0000191662010000898516810291909117948590558404831693610c2993918104821692900416612501565b610c339190612501565b600d805460ff92831665ff00000000ff19909116176501000000000086841681029190911767ffff0000000000001916600160381b868516810266ff000000000000191691909117600160301b868616810291909117938490558304841693610ca59391820481169290910416612501565b610caf9190612501565b600d805460ff928316600160201b0264ff000000001982168117909255601e9183169216919091171115610d255760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610981565b600d54601e600160201b90910460ff161115610d835760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610981565b505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161094d918590610b94908661131c565b6005546000906001600160a01b03163314610dee5760405162461bcd60e51b81526004016109819061247d565b50600b81905560015b919050565b6005546001600160a01b03163314610e265760405162461bcd60e51b81526004016109819061247d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610e9a5760405162461bcd60e51b81526004016109819061247d565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b6060600480546108bd90612443565b600061094d3384610b9485604051806060016040528060258152602001612613602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611b04565b600061094d3384846113e4565b6005546001600160a01b03163314610f5a5760405162461bcd60e51b81526004016109819061247d565b600c805461ffff1916610101179055610f7443600361251a565b601255565b6005546001600160a01b03163314610fa35760405162461bcd60e51b81526004016109819061247d565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ff85760405162461bcd60e51b81526004016109819061247d565b7f00000000000000000000000084ce41904c1d98d2f1aea8b7a1a37dd77b1193646001600160a01b0316826001600160a01b0316036110795760405162461bcd60e51b815260206004820152601760248201527f4d757374206b65657020756e69737761705632506169720000000000000000006044820152606401610981565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110ce5760405162461bcd60e51b81526004016109819061247d565b60646110d960025490565b6110e391906124c8565b6103e8826110f060025490565b6110fa91906124ea565b61110491906124c8565b101561115d5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015261312560f01b6064820152608401610981565b6103e88161116a60025490565b61117491906124ea565b61117e91906124c8565b600a5550565b6005546001600160a01b031633146111ae5760405162461bcd60e51b81526004016109819061247d565b600780546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b6005546001600160a01b031633146112065760405162461bcd60e51b81526004016109819061247d565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461125b5760405162461bcd60e51b81526004016109819061247d565b6001600160a01b0381166112c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610981565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600080611329838561251a565b90508381101561137b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610981565b9392505050565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b806000036113fd576113f883836000611b3e565b505050565b6005546001600160a01b0384811691161480159061142957506005546001600160a01b03838116911614155b801561143e5750600c5462010000900460ff16155b1561170c57600c5460ff166114d1576001600160a01b03831660009081526013602052604090205460ff168061148c57506001600160a01b03821660009081526013602052604090205460ff165b6114d15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610981565b6001600160a01b03831660009081526016602052604090205460ff16801561151257506001600160a01b03821660009081526014602052604090205460ff16155b1561156e576008548111156115695760405162461bcd60e51b815260206004820152601c60248201527f627579207472616e73666572206f766572206d617820616d6f756e74000000006044820152606401610981565b611606565b6001600160a01b03821660009081526016602052604090205460ff1680156115af57506001600160a01b03831660009081526014602052604090205460ff16155b15611606576009548111156116065760405162461bcd60e51b815260206004820152601d60248201527f53656c6c207472616e73666572206f766572206d617820616d6f756e740000006044820152606401610981565b6001600160a01b03821660009081526015602052604090205460ff1661169057600a546001600160a01b03831660009081526020819052604090205461164c908361251a565b11156116905760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610981565b6001600160a01b03831660009081526017602052604090205460ff161580156116d257506001600160a01b03821660009081526017602052604090205460ff16155b61170c5760405162461bcd60e51b815260206004820152600b60248201526a426f74206164647265737360a81b6044820152606401610981565b30600090815260208190526040902054600b54811080159081906117375750600c54610100900460ff165b801561174c5750600c5462010000900460ff16155b801561177057506001600160a01b03841660009081526016602052604090205460ff165b801561179557506001600160a01b03851660009081526013602052604090205460ff16155b80156117ba57506001600160a01b03841660009081526013602052604090205460ff16155b156117e557600c805462ff00001916620100001790556117d8611bfb565b600c805462ff0000191690555b600c546001600160a01b03861660009081526013602052604090205460ff6201000090920482161591168061183257506001600160a01b03851660009081526013602052604090205460ff165b1561183b575060005b8015611af95760006012544310156118c657611863606461185d876063611e2e565b90611eb0565b9050606361187282605e6124ea565b61187c91906124c8565b600e600082825461188d919061251a565b90915550606390506118a08260056124ea565b6118aa91906124c8565b601160008282546118bb919061251a565b90915550611ada9050565b6001600160a01b03861660009081526016602052604090205460ff1680156118f95750600d54600160201b900460ff1615155b156119dc5760105460ff16151560000361191257600080fd5b600d546119319060649061185d908890600160201b900460ff16611e2e565b600d5490915060ff600160201b820481169161195691600160381b90910416836124ea565b61196091906124c8565b600f6000828254611971919061251a565b9091555050600d5460ff600160201b820481169161199a916501000000000090910416836124ea565b6119a491906124c8565b600e60008282546119b5919061251a565b9091555050600d5460ff600160201b82048116916118a091600160301b90910416836124ea565b6001600160a01b03871660009081526016602052604090205460ff168015611a085750600d5460ff1615155b15611ada57600d54611a259060649061185d90889060ff16611e2e565b600d5490915060ff80821691611a4491630100000090910416836124ea565b611a4e91906124c8565b600f6000828254611a5f919061251a565b9091555050600d5460ff80821691611a7e9161010090910416836124ea565b611a8891906124c8565b600e6000828254611a99919061251a565b9091555050600d5460ff80821691611ab9916201000090910416836124ea565b611ac391906124c8565b60116000828254611ad4919061251a565b90915550505b8015611aeb57611aeb873083611b3e565b611af5818661252d565b9450505b610d83868686611b3e565b60008184841115611b285760405162461bcd60e51b815260040161098191906121fa565b506000611b35848661252d565b95945050505050565b611b7b81604051806060016040528060268152602001612638602691396001600160a01b0386166000908152602081905260409020549190611b04565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611baa908261131c565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016113d7565b3060009081526020819052604081205490506000601154600e54600f54611c22919061251a565b611c2c919061251a565b90506000821580611c3b575081155b15611c4557505050565b600b54611c539060146124ea565b831115611c6b57600b54611c689060146124ea565b92505b6000600283600f5486611c7e91906124ea565b611c8891906124c8565b611c9291906124c8565b90506000611ca08583611ef2565b905047611cac82611f34565b6000611cb84783611ef2565b90506000611cd58761185d600e5485611e2e90919063ffffffff16565b90506000611cf28861185d60115486611e2e90919063ffffffff16565b90506000611d00828461251a565b611d0a908561252d565b6000600f819055600e81905560115590508615801590611d2a5750600081115b15611d7357611d3987826120ec565b60408051878152602081018390527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a15b6006546001600160a01b0316611d89844761252d565b604051600081818185875af1925050503d8060008114611dc5576040519150601f19603f3d011682016040523d82523d6000602084013e611dca565b606091505b50506007546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114611e1a576040519150601f19603f3d011682016040523d82523d6000602084013e611e1f565b606091505b50505050505050505050505050565b600082600003611e4057506000610951565b6000611e4c83856124ea565b905082611e5985836124c8565b1461137b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610981565b600061137b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121cc565b600061137b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b04565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f6957611f69612540565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200b9190612556565b8160018151811061201e5761201e612540565b60200260200101906001600160a01b031690816001600160a01b031681525050612069307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611382565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906120be908590600090869030904290600401612573565b600060405180830381600087803b1580156120d857600080fd5b505af1158015610d83573d6000803e3d6000fd5b612117307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611382565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156121a0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906121c591906125e4565b5050505050565b600081836121ed5760405162461bcd60e51b815260040161098191906121fa565b506000611b3584866124c8565b600060208083528351808285015260005b818110156122275785810183015185820160400152820161220b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461225d57600080fd5b50565b6000806040838503121561227357600080fd5b823561227e81612248565b946020939093013593505050565b60006020828403121561229e57600080fd5b813561137b81612248565b600080604083850312156122bc57600080fd5b50508035926020909101359150565b80358015158114610df757600080fd5b6000602082840312156122ed57600080fd5b61137b826122cb565b60008060006060848603121561230b57600080fd5b833561231681612248565b9250602084013561232681612248565b929592945050506040919091013590565b803560ff81168114610df757600080fd5b60008060008060008060c0878903121561236157600080fd5b61236a87612337565b955061237860208801612337565b945061238660408801612337565b935061239460608801612337565b92506123a260808801612337565b91506123b060a08801612337565b90509295509295509295565b6000602082840312156123ce57600080fd5b5035919050565b600080604083850312156123e857600080fd5b82356123f381612248565b9150612401602084016122cb565b90509250929050565b6000806040838503121561241d57600080fd5b823561242881612248565b9150602083013561243881612248565b809150509250929050565b600181811c9082168061245757607f821691505b60208210810361247757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826124e557634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610951576109516124b2565b60ff8181168382160190811115610951576109516124b2565b80820180821115610951576109516124b2565b81810381811115610951576109516124b2565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561256857600080fd5b815161137b81612248565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125c35784516001600160a01b03168352938301939183019160010161259e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156125f957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b1cc72d0a010c073ce7e90955d435e42181bdb40d83114788390e22df5428d0964736f6c63430008120033

Deployed Bytecode Sourcemap

21132:13141:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4707:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6867:168;;;;;;;;;;-1:-1:-1;6867:168:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;6867:168:0;1023:187:1;22540:63:0;;;;;;;;;;-1:-1:-1;22540:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25496:458;;;;;;;;;;-1:-1:-1;25496:458:0;;;;;:::i;:::-;;:::i;:::-;;5824:107;;;;;;;;;;-1:-1:-1;5911:12:0;;5824:107;;;1866:25:1;;;1854:2;1839:18;5824:107:0;1720:177:1;22290:33:0;;;;;;;;;;;;;;;;26331:101;;;;;;;;;;-1:-1:-1;26331:101:0;;;;;:::i;:::-;;:::i;22250:33::-;;;;;;;;;;;;;;;;7517:354;;;;;;;;;;-1:-1:-1;7517:354:0;;;;;:::i;:::-;;:::i;5667:92::-;;;;;;;;;;-1:-1:-1;5667:92:0;;5749:2;2855:36:1;;2843:2;2828:18;5667:92:0;2713:184:1;26542:827:0;;;;;;;;;;-1:-1:-1;26542:827:0;;;;;:::i;:::-;;:::i;27823:80::-;;27880:7;:15;;-1:-1:-1;;27880:15:0;;;27823:80;8280:217;;;;;;;;;;-1:-1:-1;8280:217:0;;;;;:::i;:::-;;:::i;21263:38::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3767:32:1;;;3749:51;;3737:2;3722:18;21263:38:0;3603:203:1;28275:125:0;;;;;;;;;;-1:-1:-1;28275:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;28364:28:0;28340:4;28364:28;;;:19;:28;;;;;;;;;28275:125;25328:158;;;;;;;;;;-1:-1:-1;25328:158:0;;;;;:::i;:::-;;:::i;21634:30::-;;;;;;;;;;-1:-1:-1;21634:30:0;;;;;;;;;;;5994:126;;;;;;;;;;-1:-1:-1;5994:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;6094:18:0;6067:7;6094:18;;;;;;;;;;;;5994:126;13804:148;;;;;;;;;;;;;:::i;27671:144::-;;;;;;;;;;-1:-1:-1;27671:144:0;;;;;:::i;:::-;;:::i;13163:78::-;;;;;;;;;;-1:-1:-1;13227:6:0;;-1:-1:-1;;;;;13227:6:0;13163:78;;21330:25;;;;;;;;;;-1:-1:-1;21330:25:0;;;;-1:-1:-1;;;;;21330:25:0;;;4925:103;;;;;;;;;;;;;:::i;22610:58::-;;;;;;;;;;-1:-1:-1;22610:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22364:27;;;;;;;;;;;;;;;;9000:268;;;;;;;;;;-1:-1:-1;9000:268:0;;;;;:::i;:::-;;:::i;6333:174::-;;;;;;;;;;-1:-1:-1;6333:174:0;;;;;:::i;:::-;;:::i;22875:38::-;;;;;;;;;;-1:-1:-1;22875:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21671:22;;;;;;;;;;-1:-1:-1;21671:22:0;;;;;;;;;;;25111:143;;;;;;;;;;;;;:::i;27381:132::-;;;;;;;;;;-1:-1:-1;27381:132:0;;;;;:::i;:::-;;:::i;27911:177::-;;;;;;;;;;-1:-1:-1;27911:177:0;;;;;:::i;:::-;;:::i;25964:271::-;;;;;;;;;;-1:-1:-1;25964:271:0;;;;;:::i;:::-;;:::i;21978:251::-;;;;;;;;;;-1:-1:-1;21978:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21978:251:0;;;;;;;;;;;-1:-1:-1;;;21978:251:0;;;;;-1:-1:-1;;;21978:251:0;;;;;;;;;4637:4:1;4668:15;;;4650:34;;4720:15;;;4715:2;4700:18;;4693:43;4772:15;;;4752:18;;;4745:43;;;;4824:15;;;4819:2;4804:18;;4797:43;4877:15;;;4871:3;4856:19;;4849:44;4930:15;;4924:3;4909:19;;4902:44;4983:15;;4977:3;4962:19;;4955:44;5036:15;;;5030:3;5015:19;;5008:44;4614:3;4599:19;21978:251:0;4316:742:1;28098:169:0;;;;;;;;;;-1:-1:-1;28098:169:0;;;;;:::i;:::-;;:::i;6570:150::-;;;;;;;;;;-1:-1:-1;6570:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;6685:18:0;;;6658:7;6685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6570:150;27519:146;;;;;;;;;;-1:-1:-1;27519:146:0;;;;;:::i;:::-;;:::i;26442:92::-;;;;;;:::i;:::-;-1:-1:-1;;;;;26504:15:0;;;;;:6;:15;;;;;:22;;-1:-1:-1;;26504:22:0;26522:4;26504:22;;;26442:92;14107:244;;;;;;;;;;-1:-1:-1;14107:244:0;;;;;:::i;:::-;;:::i;22826:42::-;;;;;;;;;;-1:-1:-1;22826:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21214;;;;;;;;;;;;;;;4707:99;4760:13;4793:5;4786:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4707:99;:::o;6867:168::-;6949:4;6966:39;3856:10;6989:7;6998:6;6966:8;:39::i;:::-;-1:-1:-1;7023:4:0;6867:168;;;;;:::o;25496:458::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;;;;;;;;;25658:3:::1;25642:13;5911:12:::0;;;5824:107;25642:13:::1;:19;;;;:::i;:::-;25632:4;25619:9;25603:13;5911:12:::0;;;5824:107;25603:13:::1;:25;;;;:::i;:::-;25602:34;;;;:::i;:::-;25601:61;;25593:109;;;::::0;-1:-1:-1;;;25593:109:0;;7166:2:1;25593:109:0::1;::::0;::::1;7148:21:1::0;7205:2;7185:18;;;7178:30;7244:34;7224:18;;;7217:62;-1:-1:-1;;;7295:18:1;;;7288:33;7338:19;;25593:109:0::1;6964:399:1::0;25593:109:0::1;25779:3;25763:13;5911:12:::0;;;5824:107;25763:13:::1;:19;;;;:::i;:::-;25753:4;25739:10;25723:13;5911:12:::0;;;5824:107;25723:13:::1;:26;;;;:::i;:::-;25722:35;;;;:::i;:::-;25721:62;;25713:111;;;::::0;-1:-1:-1;;;25713:111:0;;7570:2:1;25713:111:0::1;::::0;::::1;7552:21:1::0;7609:2;7589:18;;;7582:30;7648:34;7628:18;;;7621:62;-1:-1:-1;;;7699:18:1;;;7692:34;7743:19;;25713:111:0::1;7368:400:1::0;25713:111:0::1;25880:4;25867:9;25851:13;5911:12:::0;;;5824:107;25851:13:::1;:25;;;;:::i;:::-;25850:34;;;;:::i;:::-;25835:12;:49:::0;25942:4:::1;25928:10:::0;25912:13:::1;5911:12:::0;;;5824:107;25912:13:::1;:26;;;;:::i;:::-;25911:35;;;;:::i;:::-;25895:13;:51:::0;-1:-1:-1;;25496:458:0:o;26331:101::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;26403:11:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;26403:21:0;;::::1;::::0;;;::::1;::::0;;26331:101::o;7517:354::-;7656:4;7673:36;7683:6;7691:9;7702:6;7673:9;:36::i;:::-;7720:121;7729:6;3856:10;7751:89;7789:6;7751:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7751:19:0;;;;;;:11;:19;;;;;;;;3856:10;7751:33;;;;;;;;;;:37;:89::i;:::-;7720:8;:121::i;:::-;-1:-1:-1;7859:4:0;7517:354;;;;;:::o;26542:827::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;26723:5:::1;:40:::0;;-1:-1:-1;;26774:40:0;26723::::1;;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;26774:40:0;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;-1:-1:-1::0;;26825:28:0::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;26933:15;::::1;::::0;::::1;::::0;26885:45:::1;::::0;26909:21;;::::1;::::0;::::1;::::0;26885;::::1;;:45;:::i;:::-;:63;;;;:::i;:::-;26864:5;:84:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;26961:42:0;;;;;;;::::1;::::0;::::1;::::0;;;::::1;-1:-1:-1::0;;27067:30:0;-1:-1:-1;;;27014:42:0;;::::1;::::0;::::1;-1:-1:-1::0;;27067:30:0;;;;;-1:-1:-1;;;27067:30:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;27180:16;::::1;::::0;::::1;::::0;27130:47:::1;::::0;27155:22;;::::1;::::0;::::1;::::0;27130;;::::1;;:47;:::i;:::-;:66;;;;:::i;:::-;27108:5;:88:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;27108:88:0::1;-1:-1:-1::0;;27108:88:0;::::1;::::0;::::1;::::0;;;27237:2:::1;27215:18:::0;;;;;;;;;:24:::1;;27207:66;;;::::0;-1:-1:-1;;;27207:66:0;;8128:2:1;27207:66:0::1;::::0;::::1;8110:21:1::0;8167:2;8147:18;;;8140:30;8206:31;8186:18;;;8179:59;8255:18;;27207:66:0::1;7926:353:1::0;27207:66:0::1;27295:5;:19:::0;27318:2:::1;-1:-1:-1::0;;;27295:19:0;;::::1;;;:25;;27287:67;;;::::0;-1:-1:-1;;;27287:67:0;;8128:2:1;27287:67:0::1;::::0;::::1;8110:21:1::0;8167:2;8147:18;;;8140:30;8206:31;8186:18;;;8179:59;8255:18;;27287:67:0::1;7926:353:1::0;27287:67:0::1;26542:827:::0;;;;;;:::o;8280:217::-;3856:10;8367:4;8416:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8416:34:0;;;;;;;;;;8367:4;;8384:83;;8407:7;;8416:50;;8455:10;8416:38;:50::i;25328:158::-;13374:6;;25409:4;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;-1:-1:-1;25425:19:0::1;:31:::0;;;25474:4:::1;13444:1;25328:158:::0;;;:::o;13804:148::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;13895:6:::1;::::0;13874:40:::1;::::0;13911:1:::1;::::0;-1:-1:-1;;;;;13895:6:0::1;::::0;13874:40:::1;::::0;13911:1;;13874:40:::1;13925:6;:19:::0;;-1:-1:-1;;;;;;13925:19:0::1;::::0;;13804:148::o;27671:144::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27761:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;27761:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27671:144::o;4925:103::-;4980:13;5013:7;5006:14;;;;;:::i;9000:268::-;9092:4;9109:129;3856:10;9132:7;9141:96;9180:15;9141:96;;;;;;;;;;;;;;;;;3856:10;9141:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9141:34:0;;;;;;;;;;;;:38;:96::i;6333:174::-;6418:4;6435:42;3856:10;6459:9;6470:6;6435:9;:42::i;25111:143::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;25164:9:::1;:16:::0;;-1:-1:-1;;25191:18:0;;;;;25230:16:::1;:12;25245:1;25230:16;:::i;:::-;25220:7;:26:::0;25111:143::o;27381:132::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27466:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;27466:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27381:132::o;27911:177::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;28004:13:::1;-1:-1:-1::0;;;;;27996:21:0::1;:4;-1:-1:-1::0;;;;;27996:21:0::1;::::0;27988:57:::1;;;::::0;-1:-1:-1;;;27988:57:0;;8616:2:1;27988:57:0::1;::::0;::::1;8598:21:1::0;8655:2;8635:18;;;8628:30;8694:25;8674:18;;;8667:53;8737:18;;27988:57:0::1;8414:347:1::0;27988:57:0::1;-1:-1:-1::0;;;;;28056:16:0;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:24;;-1:-1:-1;;28056:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27911:177::o;25964:271::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;26117:3:::1;26101:13;5911:12:::0;;;5824:107;26101:13:::1;:19;;;;:::i;:::-;26091:4;26074:13;26058;5911:12:::0;;;5824:107;26058:13:::1;:29;;;;:::i;:::-;26057:38;;;;:::i;:::-;26056:65;;26048:112;;;::::0;-1:-1:-1;;;26048:112:0;;8968:2:1;26048:112:0::1;::::0;::::1;8950:21:1::0;9007:2;8987:18;;;8980:30;9046:34;9026:18;;;9019:62;-1:-1:-1;;;9097:18:1;;;9090:32;9139:19;;26048:112:0::1;8766:398:1::0;26048:112:0::1;26223:4;26206:13;26190;5911:12:::0;;;5824:107;26190:13:::1;:29;;;;:::i;:::-;26189:38;;;;:::i;:::-;26171:15;:56:::0;-1:-1:-1;25964:271:0:o;28098:169::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;28192:15:::1;:34:::0;;-1:-1:-1;;;;;28192:34:0;;::::1;-1:-1:-1::0;;;;;;28192:34:0;;::::1;;::::0;;;28237:9:::1;:22:::0;;;;;::::1;::::0;::::1;;::::0;;28098:169::o;27519:146::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27611:35:0;;;::::1;;::::0;;;:26:::1;:35;::::0;;;;:46;;-1:-1:-1;;27611:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27519:146::o;14107:244::-;13374:6;;-1:-1:-1;;;;;13374:6:0;3856:10;13374:22;13366:67;;;;-1:-1:-1;;;13366:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14196:22:0;::::1;14188:73;;;::::0;-1:-1:-1;;;14188:73:0;;9371:2:1;14188:73:0::1;::::0;::::1;9353:21:1::0;9410:2;9390:18;;;9383:30;9449:34;9429:18;;;9422:62;-1:-1:-1;;;9500:18:1;;;9493:36;9546:19;;14188:73:0::1;9169:402:1::0;14188:73:0::1;14298:6;::::0;14277:38:::1;::::0;-1:-1:-1;;;;;14277:38:0;;::::1;::::0;14298:6:::1;::::0;14277:38:::1;::::0;14298:6:::1;::::0;14277:38:::1;14326:6;:17:::0;;-1:-1:-1;;;;;;14326:17:0::1;-1:-1:-1::0;;;;;14326:17:0;;;::::1;::::0;;;::::1;::::0;;14107:244::o;11428:180::-;11485:7;;11517:5;11521:1;11517;:5;:::i;:::-;11505:17;;11546:1;11541;:6;;11533:46;;;;-1:-1:-1;;;11533:46:0;;9778:2:1;11533:46:0;;;9760:21:1;9817:2;9797:18;;;9790:30;9856:29;9836:18;;;9829:57;9903:18;;11533:46:0;9576:351:1;11533:46:0;11599:1;11428:180;-1:-1:-1;;;11428:180:0:o;11163:220::-;-1:-1:-1;;;;;11291:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11343:32;;1866:25:1;;;11343:32:0;;1839:18:1;11343:32:0;;;;;;;;11163:220;;;:::o;28408:3367::-;28565:6;28575:1;28565:11;28561:102;;28593:37;28609:6;28617:9;28628:1;28593:15;:37::i;:::-;28408:3367;;;:::o;28561:102::-;13227:6;;-1:-1:-1;;;;;28693:17:0;;;13227:6;;28693:17;;;;:54;;-1:-1:-1;13227:6:0;;-1:-1:-1;;;;;28727:20:0;;;13227:6;;28727:20;;28693:54;:82;;;;-1:-1:-1;28765:10:0;;;;;;;28764:11;28693:82;28675:911;;;28809:9;;;;28804:147;;-1:-1:-1;;;;;28847:27:0;;;;;;:19;:27;;;;;;;;;:61;;-1:-1:-1;;;;;;28878:30:0;;;;;;:19;:30;;;;;;;;28847:61;28839:96;;;;-1:-1:-1;;;28839:96:0;;10134:2:1;28839:96:0;;;10116:21:1;10173:2;10153:18;;;10146:30;-1:-1:-1;;;10192:18:1;;;10185:52;10254:18;;28839:96:0;9932:346:1;28839:96:0;-1:-1:-1;;;;;28969:18:0;;;;;;:10;:18;;;;;;;;:65;;;;-1:-1:-1;;;;;;28992:42:0;;;;;;:31;:42;;;;;;;;28991:43;28969:65;28965:360;;;29073:12;;29063:6;:22;;29055:63;;;;-1:-1:-1;;;29055:63:0;;10485:2:1;29055:63:0;;;10467:21:1;10524:2;10504:18;;;10497:30;10563;10543:18;;;10536:58;10611:18;;29055:63:0;10283:352:1;29055:63:0;28965:360;;;-1:-1:-1;;;;;29158:21:0;;;;;;:10;:21;;;;;;;;:65;;;;-1:-1:-1;;;;;;29184:39:0;;;;;;:31;:39;;;;;;;;29183:40;29158:65;29154:171;;;29262:13;;29252:6;:23;;29244:65;;;;-1:-1:-1;;;29244:65:0;;10842:2:1;29244:65:0;;;10824:21:1;10881:2;10861:18;;;10854:30;10920:31;10900:18;;;10893:59;10969:18;;29244:65:0;10640:353:1;29244:65:0;-1:-1:-1;;;;;29346:37:0;;;;;;:26;:37;;;;;;;;29341:159;;29445:15;;-1:-1:-1;;;;;6094:18:0;;6067:7;6094:18;;;;;;;;;;;29412:29;;:6;:29;:::i;:::-;:48;;29404:80;;;;-1:-1:-1;;;29404:80:0;;11200:2:1;29404:80:0;;;11182:21:1;11239:2;11219:18;;;11212:30;-1:-1:-1;;;11258:18:1;;;11251:49;11317:18;;29404:80:0;10998:343:1;29404:80:0;-1:-1:-1;;;;;29522:14:0;;;;;;:6;:14;;;;;;;;29521:15;:37;;;;-1:-1:-1;;;;;;29541:17:0;;;;;;:6;:17;;;;;;;;29540:18;29521:37;29513:61;;;;-1:-1:-1;;;29513:61:0;;11548:2:1;29513:61:0;;;11530:21:1;11587:2;11567:18;;;11560:30;-1:-1:-1;;;11606:18:1;;;11599:41;11657:18;;29513:61:0;11346:335:1;29513:61:0;29661:4;29612:28;6094:18;;;;;;;;;;;29720:19;;29696:43;;;;;;;29770:35;;-1:-1:-1;29794:11:0;;;;;;;29770:35;:63;;;;-1:-1:-1;29823:10:0;;;;;;;29822:11;29770:63;:101;;;;-1:-1:-1;;;;;;29850:21:0;;;;;;:10;:21;;;;;;;;29770:101;:146;;;;-1:-1:-1;;;;;;29889:27:0;;;;;;:19;:27;;;;;;;;29888:28;29770:146;:194;;;;-1:-1:-1;;;;;;29934:30:0;;;;;;:19;:30;;;;;;;;29933:31;29770:194;29752:326;;;29991:10;:17;;-1:-1:-1;;29991:17:0;;;;;30023:10;:8;:10::i;:::-;30048;:18;;-1:-1:-1;;30048:18:0;;;29752:326;30107:10;;-1:-1:-1;;;;;30219:27:0;;30091:12;30219:27;;;:19;:27;;;;;;30107:10;;;;;;;30106:11;;30219:27;;:61;;-1:-1:-1;;;;;;30250:30:0;;;;;;:19;:30;;;;;;;;30219:61;30215:109;;;-1:-1:-1;30307:5:0;30215:109;30425:7;30421:1292;;;30449:12;30498:7;;30483:12;:22;30480:1080;;;30533:23;30552:3;30533:14;:6;30544:2;30533:10;:14::i;:::-;:18;;:23::i;:::-;30526:30;-1:-1:-1;30611:2:0;30598:9;30526:30;30605:2;30598:9;:::i;:::-;30597:16;;;;:::i;:::-;30575:18;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;30661:2:0;;-1:-1:-1;30649:8:0;:4;30656:1;30649:8;:::i;:::-;30648:15;;;;:::i;:::-;30632:12;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;30480:1080:0;;-1:-1:-1;30480:1080:0;;-1:-1:-1;;;;;30689:21:0;;;;;;:10;:21;;;;;;;;:48;;;;-1:-1:-1;30714:5:0;:19;-1:-1:-1;;;30714:19:0;;;;:23;;30689:48;30685:875;;;30766:7;;;;:16;;:7;:16;30758:25;;;;;;30820:5;:19;30809:40;;30845:3;;30809:31;;:6;;-1:-1:-1;;;30820:19:0;;;;30809:10;:31::i;:40::-;30922:5;:19;30802:47;;-1:-1:-1;30922:19:0;-1:-1:-1;;;30922:19:0;;;;;30890:29;;-1:-1:-1;;;30897:22:0;;;;30802:47;30890:29;:::i;:::-;:51;;;;:::i;:::-;30868:18;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;31014:5:0;:19;;-1:-1:-1;;;31014:19:0;;;;;30982:29;;30989:22;;;;;30982:4;:29;:::i;:::-;:51;;;;:::i;:::-;30960:18;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;;31094:5:0;:19;;-1:-1:-1;;;31094:19:0;;;;;31068:23;;-1:-1:-1;;;31075:16:0;;;;31068:4;:23;:::i;30685:875::-;-1:-1:-1;;;;;31175:18:0;;;;;;:10;:18;;;;;;;;:44;;;;-1:-1:-1;31197:5:0;:18;;;:22;;31175:44;31171:389;;;31258:5;:18;31247:39;;31282:3;;31247:30;;:6;;31258:18;;31247:10;:30::i;:39::-;31358:5;:18;31240:46;;-1:-1:-1;31358:18:0;;;;;31327:28;;31334:21;;;;;31240:46;31327:28;:::i;:::-;:49;;;;:::i;:::-;31305:18;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;31448:5:0;:18;;;;;;31417:28;;31448:18;31424:21;;;;31417:4;:28;:::i;:::-;:49;;;;:::i;:::-;31395:18;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;31526:5:0;:18;;;;;;31501:22;;31508:15;;;;;31501:4;:22;:::i;:::-;:43;;;;:::i;:::-;31485:12;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;31171:389:0;31580:8;;31576:93;;31609:44;31625:6;31641:4;31648;31609:15;:44::i;:::-;31685:14;31695:4;31685:14;;:::i;:::-;;;30434:1279;30421:1292;31725:42;31741:6;31749:9;31760:6;31725:15;:42::i;11769:191::-;11854:7;11890:12;11882:6;;;;11874:29;;;;-1:-1:-1;;;11874:29:0;;;;;;;;:::i;:::-;-1:-1:-1;11914:9:0;11926:5;11930:1;11926;:5;:::i;:::-;11914:17;11769:191;-1:-1:-1;;;;;11769:191:0:o;9758:358::-;9920:71;9942:6;9920:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9920:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;9900:17:0;;;:9;:17;;;;;;;;;;;:91;;;;10025:20;;;;;;;:32;;10050:6;10025:24;:32::i;:::-;-1:-1:-1;;;;;10002:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;10073:35;1866:25:1;;;10002:20:0;;10073:35;;;;;;1839:18:1;10073:35:0;1720:177:1;32703:1565:0;32791:4;32742:28;6094:18;;;;;;;;;;;32742:55;;32808:14;32867:12;;32846:18;;32825;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;32808:71;-1:-1:-1;32890:12:0;32919:25;;;:40;;-1:-1:-1;32948:11:0;;32919:40;32915:57;;;32963:7;;;32703:1565::o;32915:57::-;33011:19;;:24;;33033:2;33011:24;:::i;:::-;32988:20;:47;32984:127;;;33075:19;;:24;;33097:2;33075:24;:::i;:::-;33052:47;;32984:127;33172:23;33251:1;33242:6;33221:18;;33198:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;33172:80;-1:-1:-1;33263:26:0;33292:41;:20;33172:80;33292:24;:41::i;:::-;33263:70;-1:-1:-1;33375:21:0;33409:36;33263:70;33409:16;:36::i;:::-;33460:18;33481:44;:21;33507:17;33481:25;:44::i;:::-;33460:65;;33539:23;33565:46;33604:6;33565:34;33580:18;;33565:10;:14;;:34;;;;:::i;:46::-;33539:72;;33622:17;33642:40;33675:6;33642:28;33657:12;;33642:10;:14;;:28;;;;:::i;:40::-;33622:60;-1:-1:-1;33693:23:0;33733:27;33622:60;33733:15;:27;:::i;:::-;33719:42;;:10;:42;:::i;:::-;33797:1;33776:18;:22;;;33809:18;:22;;;33842:12;:16;33693:68;-1:-1:-1;33877:19:0;;;;;:42;;;33918:1;33900:15;:19;33877:42;33873:192;;;33936:46;33949:15;33966;33936:12;:46::i;:::-;34002:51;;;11993:25:1;;;12049:2;12034:18;;12027:34;;;34002:51:0;;11966:18:1;34002:51:0;;;;;;;33873:192;34098:9;;-1:-1:-1;;;;;34098:9:0;34123:39;34147:15;34123:21;:39;:::i;:::-;34090:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34202:15:0;;34194:66;;34077:93;;-1:-1:-1;;;;;;34202:15:0;;34232:21;;34194:66;;;;34232:21;34202:15;34194:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;32703:1565:0:o;11968:256::-;12025:7;12055:1;12060;12055:6;12051:47;;-1:-1:-1;12085:1:0;12078:8;;12051:47;12111:9;12123:5;12127:1;12123;:5;:::i;:::-;12111:17;-1:-1:-1;12156:1:0;12147:5;12151:1;12111:17;12147:5;:::i;:::-;:10;12139:56;;;;-1:-1:-1;;;12139:56:0;;12484:2:1;12139:56:0;;;12466:21:1;12523:2;12503:18;;;12496:30;12562:34;12542:18;;;12535:62;-1:-1:-1;;;12613:18:1;;;12606:31;12654:19;;12139:56:0;12282:397:1;12235:131:0;12292:7;12319:39;12323:1;12326;12319:39;;;;;;;;;;;;;;;;;:3;:39::i;11621:135::-;11678:7;11705:43;11709:1;11712;11705:43;;;;;;;;;;;;;;;;;:3;:43::i;31783:554::-;31931:16;;;31945:1;31931:16;;;;;;;;31907:21;;31931:16;;;;;;;;;;-1:-1:-1;31931:16:0;31907:40;;31976:4;31958;31963:1;31958:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31958:23:0;;;-1:-1:-1;;;;;31958:23:0;;;;;32002:6;-1:-1:-1;;;;;32002:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31992:4;31997:1;31992:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31992:23:0;;;-1:-1:-1;;;;;31992:23:0;;;;;32028:49;32045:4;32060:6;32069:7;32028:8;:49::i;:::-;32116:211;;-1:-1:-1;;;32116:211:0;;-1:-1:-1;;;;;32116:6:0;:57;;;;:211;;32188:7;;32210:1;;32254:4;;32281;;32301:15;;32116:211;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32345:350;32489:49;32506:4;32521:6;32530:7;32489:8;:49::i;:::-;32581:106;;-1:-1:-1;;;32581:106:0;;32633:4;32581:106;;;14530:34:1;;;14580:18;;;14573:34;;;32649:1:0;14623:18:1;;;14616:34;;;14666:18;;;14659:34;14709:19;;;14702:44;32671:15:0;14762:19:1;;;14755:35;32581:6:0;-1:-1:-1;;;;;32581:22:0;;;;32612:9;;14464:19:1;;32581:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32345:350;;:::o;12378:277::-;12463:7;12498:12;12491:5;12483:28;;;;-1:-1:-1;;;12483:28:0;;;;;;;;:::i;:::-;-1:-1:-1;12522:9:0;12534:5;12538:1;12534;: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;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1467:248::-;1535:6;1543;1596:2;1584:9;1575:7;1571:23;1567:32;1564:52;;;1612:1;1609;1602:12;1564:52;-1:-1:-1;;1635:23:1;;;1705:2;1690:18;;;1677:32;;-1:-1:-1;1467:248:1:o;1902:160::-;1967:20;;2023:13;;2016:21;2006:32;;1996:60;;2052:1;2049;2042:12;2067:180;2123:6;2176:2;2164:9;2155:7;2151:23;2147:32;2144:52;;;2192:1;2189;2182:12;2144:52;2215:26;2231:9;2215:26;:::i;2252:456::-;2329:6;2337;2345;2398:2;2386:9;2377:7;2373:23;2369:32;2366:52;;;2414:1;2411;2404:12;2366:52;2453:9;2440:23;2472:31;2497:5;2472:31;:::i;:::-;2522:5;-1:-1:-1;2579:2:1;2564:18;;2551:32;2592:33;2551:32;2592:33;:::i;:::-;2252:456;;2644:7;;-1:-1:-1;;;2698:2:1;2683:18;;;;2670:32;;2252:456::o;2902:156::-;2968:20;;3028:4;3017:16;;3007:27;;2997:55;;3048:1;3045;3038:12;3063:535;3155:6;3163;3171;3179;3187;3195;3248:3;3236:9;3227:7;3223:23;3219:33;3216:53;;;3265:1;3262;3255:12;3216:53;3288:27;3305:9;3288:27;:::i;:::-;3278:37;;3334:36;3366:2;3355:9;3351:18;3334:36;:::i;:::-;3324:46;;3389:36;3421:2;3410:9;3406:18;3389:36;:::i;:::-;3379:46;;3444:36;3476:2;3465:9;3461:18;3444:36;:::i;:::-;3434:46;;3499:37;3531:3;3520:9;3516:19;3499:37;:::i;:::-;3489:47;;3555:37;3587:3;3576:9;3572:19;3555:37;:::i;:::-;3545:47;;3063:535;;;;;;;;:::o;3811:180::-;3870:6;3923:2;3911:9;3902:7;3898:23;3894:32;3891:52;;;3939:1;3936;3929:12;3891:52;-1:-1:-1;3962:23:1;;3811:180;-1:-1:-1;3811:180:1:o;3996:315::-;4061:6;4069;4122:2;4110:9;4101:7;4097:23;4093:32;4090:52;;;4138:1;4135;4128:12;4090:52;4177:9;4164:23;4196:31;4221:5;4196:31;:::i;:::-;4246:5;-1:-1:-1;4270:35:1;4301:2;4286:18;;4270:35;:::i;:::-;4260:45;;3996:315;;;;;:::o;5063:388::-;5131:6;5139;5192:2;5180:9;5171:7;5167:23;5163:32;5160:52;;;5208:1;5205;5198:12;5160:52;5247:9;5234:23;5266:31;5291:5;5266:31;:::i;:::-;5316:5;-1:-1:-1;5373:2:1;5358:18;;5345:32;5386:33;5345:32;5386:33;:::i;:::-;5438:7;5428:17;;;5063:388;;;;;:::o;5691:380::-;5770:1;5766:12;;;;5813;;;5834:61;;5888:4;5880:6;5876:17;5866:27;;5834:61;5941:2;5933:6;5930:14;5910:18;5907:38;5904:161;;5987:10;5982:3;5978:20;5975:1;5968:31;6022:4;6019:1;6012:15;6050:4;6047:1;6040:15;5904:161;;5691:380;;;:::o;6076:356::-;6278:2;6260:21;;;6297:18;;;6290:30;6356:34;6351:2;6336:18;;6329:62;6423:2;6408:18;;6076:356::o;6437:127::-;6498:10;6493:3;6489:20;6486:1;6479:31;6529:4;6526:1;6519:15;6553:4;6550:1;6543:15;6569:217;6609:1;6635;6625:132;;6679:10;6674:3;6670:20;6667:1;6660:31;6714:4;6711:1;6704:15;6742:4;6739:1;6732:15;6625:132;-1:-1:-1;6771:9:1;;6569:217::o;6791:168::-;6864:9;;;6895;;6912:15;;;6906:22;;6892:37;6882:71;;6933:18;;:::i;7773:148::-;7861:4;7840:12;;;7854;;;7836:31;;7879:13;;7876:39;;;7895:18;;:::i;8284:125::-;8349:9;;;8370:10;;;8367:36;;;8383:18;;:::i;11686:128::-;11753:9;;;11774:11;;;11771:37;;;11788:18;;:::i;12816:127::-;12877:10;12872:3;12868:20;12865:1;12858:31;12908:4;12905:1;12898:15;12932:4;12929:1;12922:15;12948:251;13018:6;13071:2;13059:9;13050:7;13046:23;13042:32;13039:52;;;13087:1;13084;13077:12;13039:52;13119:9;13113:16;13138:31;13163:5;13138:31;:::i;13204:980::-;13466:4;13514:3;13503:9;13499:19;13545:6;13534:9;13527:25;13571:2;13609:6;13604:2;13593:9;13589:18;13582:34;13652:3;13647:2;13636:9;13632:18;13625:31;13676:6;13711;13705:13;13742:6;13734;13727:22;13780:3;13769:9;13765:19;13758:26;;13819:2;13811:6;13807:15;13793:29;;13840:1;13850:195;13864:6;13861:1;13858:13;13850:195;;;13929:13;;-1:-1:-1;;;;;13925:39:1;13913:52;;14020:15;;;;13985:12;;;;13961:1;13879:9;13850:195;;;-1:-1:-1;;;;;;;14101:32:1;;;;14096:2;14081:18;;14074:60;-1:-1:-1;;;14165:3:1;14150:19;14143:35;14062:3;13204:980;-1:-1:-1;;;13204:980:1:o;14801:306::-;14889:6;14897;14905;14958:2;14946:9;14937:7;14933:23;14929:32;14926:52;;;14974:1;14971;14964:12;14926:52;15003:9;14997:16;14987:26;;15053:2;15042:9;15038:18;15032:25;15022:35;;15097:2;15086:9;15082:18;15076:25;15066:35;;14801:306;;;;;:::o

Swarm Source

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