ETH Price: $2,279.23 (-2.76%)

Token

ProofOfMeta (ETH 3.0)
 

Overview

Max Total Supply

1,000,000 ETH 3.0

Holders

196

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
proofofmetamarketing.eth
Balance
1,651.783620528 ETH 3.0

Value
$0.00
0x9799b5ce633fe154e655087b0976399b6556569a
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:
EthDev

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-25
*/

/**

 "4d616b652069742061626f757420746865206f70656e20736f757263652070726f6a65637420616e642067697665206d6f72652063726564697420746f20796f757220636f6e7472696275746f72733b2069742068656c7073206d6f746976617465207468656d "

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

/*
 * @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 GSN 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 virtual view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal virtual view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
    
    function ceil(uint256 a, uint256 m) internal pure returns (uint256) {
    uint256 c = add(a,m);
    uint256 d = sub(c,1);
    return mul(div(d,m),m);
  }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;


            bytes32 accountHash
         = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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.
 */
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() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

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

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

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


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

interface IUniswapV2Pair {
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
}

contract EthDev is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private _name = "ProofOfMeta";
    string private _symbol = "ETH 3.0";
    uint8 private _decimals = 9;

    mapping(address => uint256) internal _reflectionBalance;
    mapping(address => uint256) internal _balanceLimit;
    mapping(address => uint256) internal _tokenBalance;
    
    mapping (address => bool) public _blackList;
    mapping (address => bool) public _maxAmount;
    mapping (address => bool) public _maxWallet;
    mapping(address => mapping(address => uint256)) internal _allowances;
    

    uint256 private constant MAX = ~uint256(0);
    uint256 internal _tokenTotal = 1000000e9;
    uint256 internal _reflectionTotal = (MAX - (MAX % _tokenTotal));

    mapping(address => bool) isTaxless;
    mapping(address => bool) internal _isExcluded;
    address[] internal _excluded;
    
    uint256 public _feeDecimal = 2; // do not change this value...
    uint256 public _taxFee = 100; // means 1% which distribute to all holders reflection fee
    uint256 public _CommunityFee = 300;// meanse 2% eth to marketing Wallet
    uint256 public _liquidityFee = 200; // means 1% 
    uint256 public _burnFee = 100; // means 1% 
    
    uint256 public _SelltaxFee = 100; // means 1% which distribute to all holders reflection fee
    uint256 public _SellCommunityFee= 500;// meanse 3% 
    uint256 public _SelllLiquidityFee  = 300; // means 2%
    uint256 public _SellBurnFee = 300; // means 3% 

    address private communityAddress = 0x9799b5CE633Fe154e655087B0976399B6556569a;
    
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    
    uint256 private _taxFeeTotal;
    uint256 private _burnFeeTotal;
    uint256 private _liquidityFeeTotal;

    bool private isFeeActive = true; // should be true
    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool private tradingEnable = true;
    
    //Max tx Amount
    uint256 public maxTxAmount = 5000e9; // 
    //max Wallet Holdings 2% of totalSupply
    uint256 public _maxWalletToken = 20000e9;
    uint256 public minTokensBeforeSwap = 5000e9;
    IUniswapV2Router02 public  uniswapV2Router;
    address public uniswapV2Pair;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived, uint256 tokensIntoLiqudity);

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

    constructor() {
         //IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); // for BSC Pncake v2
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); // for SushiSwap
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // for Ethereum uniswap v2
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
      
        isTaxless[owner()] = true;
        isTaxless[address(this)] = true;
        
        
        
        //Exempt maxTxAmount from Onwer and Contract
        _maxAmount[owner()] = true;
        _maxAmount[address(this)] = true;
        _maxAmount[communityAddress] =true;
        
        //Exempt maxWalletAmount from Owner ,Contract,marketingAddress
        _maxWallet[owner()] = true;
        _maxWallet[DEAD] = true;
        _maxWallet[communityAddress] = true;

        // exlcude pair address from tax rewards
        _isExcluded[address(uniswapV2Pair)] = true;
        _excluded.push(address(uniswapV2Pair));
        _isExcluded[DEAD]=true;
        _excluded.push(DEAD);

        _reflectionBalance[owner()] = _reflectionTotal;
        emit Transfer(address(0),owner(), _tokenTotal);
    }

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

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

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

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

    function balanceOf(address account) public override view returns (uint256) {
        if (_isExcluded[account]) return _tokenBalance[account];
        return tokenFromReflection(_reflectionBalance[account]);
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override virtual returns (bool) {
        _transfer(sender,recipient,amount);
               
        _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub( amount,"ERC20: transfer amount exceeds allowance"));
        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 isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function reflectionFromToken(uint256 tokenAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tokenAmount <= _tokenTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            return tokenAmount.mul(_getReflectionRate());
        } else {
            return
                tokenAmount.sub(tokenAmount.mul(_taxFee).div(10** _feeDecimal + 2)).mul(
                    _getReflectionRate()
                );
        }
    }

    function tokenFromReflection(uint256 reflectionAmount)
        public
        view
        returns (uint256)
    {
        require(
            reflectionAmount <= _reflectionTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getReflectionRate();
        return reflectionAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(
            account != address(uniswapV2Router),
            "ERC20: We can not exclude Uniswap router."
        );
        require(!_isExcluded[account], "ERC20: Account is already excluded");
        if (_reflectionBalance[account] > 0) {
            _tokenBalance[account] = tokenFromReflection(
                _reflectionBalance[account]
            );
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "ERC20: Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tokenBalance[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= maxTxAmount || _maxAmount[sender], "Transfer Limit Exceeds");
        require(!_blackList[sender],"Address is blackListed");
        require(tradingEnable,"trading is disable");
    
            
        uint256 transferAmount = amount;
        uint256 rate = _getReflectionRate();
        
        uint256 constractBal=balanceOf(address(this));
        bool overMinTokenBalance = constractBal >= minTokensBeforeSwap;
        
        if(!inSwapAndLiquify && overMinTokenBalance && sender != uniswapV2Pair && swapAndLiquifyEnabled) {
            swapAndLiquify(constractBal);
        }
         
        
        if(sender == uniswapV2Pair) {
            
            
        if(!_maxWallet[recipient] && recipient != address(this)  && recipient != address(0) && recipient != communityAddress){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}
        

            
        if(!isTaxless[recipient] && !inSwapAndLiquify){
            transferAmount = collectBuyFee(sender,amount,rate);
        }
        
        //transfer reflection
        _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate));
        _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate));

        //if any account belongs to the excludedAccount transfer token
        if (_isExcluded[sender]) {
            _tokenBalance[sender] = _tokenBalance[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tokenBalance[recipient] = _tokenBalance[recipient].add(transferAmount);
        }

        emit Transfer(sender, recipient, transferAmount);
        
        return;
       }
       
       if(recipient == uniswapV2Pair){
         if(!isTaxless[sender] && !inSwapAndLiquify){
            transferAmount = collectSellFee(sender,amount,rate);
         }
        
        //transfer reflection
        _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate));
        _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate));

        //if any account belongs to the excludedAccount transfer token
        if (_isExcluded[sender]) {
            _tokenBalance[sender] = _tokenBalance[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tokenBalance[recipient] = _tokenBalance[recipient].add(transferAmount);
        }

        emit Transfer(sender, recipient, transferAmount);
        
        return;
       }
       
            //transfer reflection
        _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate));
        _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate));

        //if any account belongs to the excludedAccount transfer token
        if (_isExcluded[sender]) {
            _tokenBalance[sender] = _tokenBalance[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tokenBalance[recipient] = _tokenBalance[recipient].add(transferAmount);
        }

        emit Transfer(sender, recipient, transferAmount);
        
    }
    
    function collectBuyFee(address account, uint256 amount, uint256 rate) private returns (uint256) {
        uint256 transferAmount = amount;
        
        //@dev tax fee
        if(_taxFee != 0){
            uint256 taxFee = amount.mul(_taxFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(taxFee);
            _reflectionTotal = _reflectionTotal.sub(taxFee.mul(rate));
            _taxFeeTotal = _taxFeeTotal.add(taxFee);
        }
      
        //@dev burn fee
        if(_CommunityFee != 0){
            uint256 marketingFee = amount.mul(_CommunityFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(marketingFee);
            _reflectionBalance[communityAddress] = _reflectionBalance[communityAddress].add(marketingFee.mul(rate));
            if(_isExcluded[communityAddress]){
                _tokenBalance[communityAddress] = _tokenBalance[communityAddress].add(marketingFee);
            }
          
            emit Transfer(account,communityAddress,marketingFee);
        }
        
        if(_liquidityFee != 0){
            uint256 liquidityFee = amount.mul(_liquidityFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(liquidityFee);
            _reflectionBalance[address(this)] = _reflectionBalance[address(this)].add(liquidityFee.mul(rate));
            if(_isExcluded[address(this)]){
                _tokenBalance[address(this)] = _tokenBalance[address(this)].add(liquidityFee);
            }
          
            emit Transfer(account,address(this),liquidityFee);
        }
      
         if(_burnFee != 0){
            uint256 burnFee = amount.mul(_burnFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(burnFee);
            _reflectionBalance[DEAD] = _reflectionBalance[DEAD].add(burnFee.mul(rate));
            if(_isExcluded[DEAD]){
                _tokenBalance[DEAD] = _tokenBalance[DEAD].add(burnFee);
            }
          
            emit Transfer(account,DEAD,burnFee);
        }
    
        
        return transferAmount;
    }
    
    
    function collectSellFee(address account, uint256 amount, uint256 rate) private returns (uint256) {
        uint256 transferAmount = amount;
        
       //@dev tax fee
        if(_SelltaxFee != 0){
            uint256 taxFee = amount.mul(_SelltaxFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(taxFee);
            _reflectionTotal = _reflectionTotal.sub(taxFee.mul(rate));
            _taxFeeTotal = _taxFeeTotal.add(taxFee);
        }
      
        //@dev burn fee
        if(_SellCommunityFee != 0){
            uint256 marketingFee = amount.mul(_SellCommunityFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(marketingFee);
            _reflectionBalance[communityAddress] = _reflectionBalance[communityAddress].add(marketingFee.mul(rate));
            if(_isExcluded[communityAddress]){
                _tokenBalance[communityAddress] = _tokenBalance[communityAddress].add(marketingFee);
            }
          
            emit Transfer(account,communityAddress,marketingFee);
        }
        
        if(_SelllLiquidityFee != 0){
            uint256 liquidityFee = amount.mul(_SelllLiquidityFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(liquidityFee);
            _reflectionBalance[address(this)] = _reflectionBalance[address(this)].add(liquidityFee.mul(rate));
            if(_isExcluded[address(this)]){
                _tokenBalance[address(this)] = _tokenBalance[address(this)].add(liquidityFee);
            }
          
            emit Transfer(account,address(this),liquidityFee);
        }
      
         if(_SellBurnFee != 0){
            uint256 burnFee = amount.mul(_SellBurnFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(burnFee);
            _reflectionBalance[DEAD] = _reflectionBalance[DEAD].add(burnFee.mul(rate));
            if(_isExcluded[DEAD]){
                _tokenBalance[DEAD] = _tokenBalance[DEAD].add(burnFee);
            }
          
            emit Transfer(account,DEAD,burnFee);
        }
    
        
        return transferAmount;
    }

    function _getReflectionRate() private view returns (uint256) {
        uint256 reflectionSupply = _reflectionTotal;
        uint256 tokenSupply = _tokenTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _reflectionBalance[_excluded[i]] > reflectionSupply ||
                _tokenBalance[_excluded[i]] > tokenSupply
            ) return _reflectionTotal.div(_tokenTotal);
            reflectionSupply = reflectionSupply.sub(
                _reflectionBalance[_excluded[i]]
            );
            tokenSupply = tokenSupply.sub(_tokenBalance[_excluded[i]]);
        }
        if (reflectionSupply < _reflectionTotal.div(_tokenTotal))
            return _reflectionTotal.div(_tokenTotal);
        return reflectionSupply.div(tokenSupply);
    }
    
    
    
      function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
         if(contractTokenBalance > maxTxAmount){
             contractTokenBalance = maxTxAmount;
         }
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }


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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
    
    
    
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function setPair(address pair) external onlyOwner {
        uniswapV2Pair = pair;
    }

    function setTaxless(address account, bool value) external onlyOwner {
        isTaxless[account] = value;
    }
    
    function setSwapAndLiquifyEnabled(bool enabled) external onlyOwner {
        swapAndLiquifyEnabled = enabled;
        emit SwapAndLiquifyEnabledUpdated(enabled);
    }
    
    function setFeeActive(bool value) external onlyOwner {
        isFeeActive = value;
    }
    
    function setBuyFee(uint256 communityFee,uint256 burnFee,uint256 liquidityFee,uint256 taxFee) external onlyOwner {
        _CommunityFee = communityFee;
        _liquidityFee=liquidityFee;
        _burnFee=burnFee;
        _taxFee=taxFee;
    }
    
    function setSellFee(uint256 sellCommunityFee,uint256 burnFee,uint256 liquidityFee,uint256 taxFee) external onlyOwner {
        _SellCommunityFee= sellCommunityFee;
        _SelllLiquidityFee=liquidityFee;
        _SelltaxFee=taxFee;
        _SellBurnFee=burnFee;
    }
    
    function setWalletAddress(address _communityAddress) external onlyOwner{
        communityAddress=_communityAddress;
    }
    
     function setBlackList (address add,bool value) external onlyOwner {
        _blackList[add]=value;
    }
    
    function setTrading(bool value) external onlyOwner {
        tradingEnable= value;
    }
    
    function exemptMaxTxAmountAddress(address _address,bool value) external onlyOwner {
        _maxAmount[_address] = value;
    }
    
    function exemptMaxWalletAmountAddress(address _address,bool value) external onlyOwner {
        _maxWallet[_address] =value;
    }
    
    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        _maxWalletToken = amount;
    }
 
    function setMaxTxAmount(uint256 amount) external onlyOwner {
        maxTxAmount = amount;
    }
    
    function setMinTokensBeforeSwap(uint256 amount) external onlyOwner {
        minTokensBeforeSwap = amount;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_CommunityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellCommunityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SelllLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SelltaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_maxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_maxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"exemptMaxTxAmountAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"exemptMaxWalletAmountAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"communityFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellCommunityFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setTaxless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_communityAddress","type":"address"}],"name":"setWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b60809081526a50726f6f664f664d65746160a81b60a0526001906200002c90826200061a565b50604080518082019091526007815266045544820332e360cc1b60208201526002906200005a90826200061a565b506003805460ff1916600917905566038d7ea4c68000600b8190556200008390600019620006e6565b620000919060001962000709565b600c5560026010556064601181905561012c601281905560c860135560148290556015919091556101f46016556017819055601855601980546001600160a01b0319908116739799b5ce633fe154e655087b0976399b6556569a17909155601a805490911661dead179055601e8054630101000163ffff00ff1990911617905565048c27395000601f8190556512309ce540006020556021553480156200013757600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000731565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000269919062000731565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd919062000731565b602380546001600160a01b03199081166001600160a01b0393841617909155602280549091169183169190911790556001600d6000620003256000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600d9092528120805490921660019081179092556008906200037e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526008909352818320805485166001908117909155601954909116835290822080549093168117909255600990620003ee6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601a805483168252600985528382208054871660019081179091556019548416835284832080548816821790556023805485168452600e90965284832080548816821790559454600f805480880182557f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290810180546001600160a01b0319908116948816949094179055835486168552958420805490981687179097559054865495860187559582529390920180549093169316929092179055600c5490600490620004f16000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556200051e6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200056691815260200190565b60405180910390a35062000763565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005a057607f821691505b602082108103620005c157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200061557600081815260208120601f850160051c81016020861015620005f05750805b601f850160051c820191505b818110156200061157828155600101620005fc565b5050505b505050565b81516001600160401b0381111562000636576200063662000575565b6200064e816200064784546200058b565b84620005c7565b602080601f8311600181146200068657600084156200066d5750858301515b600019600386901b1c1916600185901b17855562000611565b600085815260208120601f198616915b82811015620006b75788860151825594840194600190910190840162000696565b5085821015620006d65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000826200070457634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156200072b57634e487b7160e01b600052601160045260246000fd5b92915050565b6000602082840312156200074457600080fd5b81516001600160a01b03811681146200075c57600080fd5b9392505050565b612dea80620007736000396000f3fe6080604052600436106102e85760003560e01c8063715018a611610190578063c49b9a80116100dc578063e0ff589611610095578063ec28438a1161006f578063ec28438a146108ed578063f2cc0c181461090d578063f2fde38b1461092d578063f84354f11461094d57600080fd5b8063e0ff589614610897578063e5d41c6b146108b7578063e653da08146108cd57600080fd5b8063c49b9a8014610782578063cba0e996146107a2578063cc815ca9146107db578063d3f838941461080b578063d799eef114610821578063dd62ed3e1461085157600080fd5b80638f70ccf711610149578063a9059cbb11610123578063a9059cbb1461070c578063ac1a386a1461072c578063b7bfff651461074c578063c0b0fda21461076c57600080fd5b80638f70ccf7146106b757806395d89b41146106d7578063a457c2d7146106ec57600080fd5b8063715018a61461061857806378109e541461062d5780638187f516146106435780638c0b5e22146106635780638c5a133d146106795780638da5cb5b1461069957600080fd5b80633b124fe71161024f5780634a74bb0211610208578063678a2ca1116101e2578063678a2ca1146105ac57806368092bd9146105c25780636bc87c3a146105e257806370a08231146105f857600080fd5b80634a74bb0214610546578063563f04b314610566578063595dec3c1461057c57600080fd5b80633b124fe714610490578063442e41b5146104a65780634549b039146104c657806347f2dc5b146104e657806348a464731461050657806349bd5a5e1461052657600080fd5b806323b872dd116102a157806323b872dd146103d657806327a14fc2146103f657806329140b57146104185780632d8381191461042e578063313ce5671461044e578063395093511461047057600080fd5b806306fdde03146102f4578063095ea7b31461031f578063114bf3621461034f5780631694505e1461037357806318160ddd146103ab57806319db457d146103c057600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030961096d565b6040516103169190612876565b60405180910390f35b34801561032b57600080fd5b5061033f61033a3660046128dc565b6109ff565b6040519015158152602001610316565b34801561035b57600080fd5b5061036560125481565b604051908152602001610316565b34801561037f57600080fd5b50602254610393906001600160a01b031681565b6040516001600160a01b039091168152602001610316565b3480156103b757600080fd5b50600b54610365565b3480156103cc57600080fd5b5061036560105481565b3480156103e257600080fd5b5061033f6103f1366004612908565b610a16565b34801561040257600080fd5b50610416610411366004612949565b610a7f565b005b34801561042457600080fd5b5061036560165481565b34801561043a57600080fd5b50610365610449366004612949565b610ab7565b34801561045a57600080fd5b5060035460405160ff9091168152602001610316565b34801561047c57600080fd5b5061033f61048b3660046128dc565b610b3b565b34801561049c57600080fd5b5061036560115481565b3480156104b257600080fd5b506104166104c1366004612977565b610b71565b3480156104d257600080fd5b506103656104e13660046129ac565b610bc6565b3480156104f257600080fd5b50610416610501366004612977565b610c84565b34801561051257600080fd5b50610416610521366004612949565b610cd9565b34801561053257600080fd5b50602354610393906001600160a01b031681565b34801561055257600080fd5b50601e5461033f9062010000900460ff1681565b34801561057257600080fd5b5061036560185481565b34801561058857600080fd5b5061033f6105973660046129cf565b60076020526000908152604090205460ff1681565b3480156105b857600080fd5b5061036560175481565b3480156105ce57600080fd5b506104166105dd366004612977565b610d08565b3480156105ee57600080fd5b5061036560135481565b34801561060457600080fd5b506103656106133660046129cf565b610d5d565b34801561062457600080fd5b50610416610dbc565b34801561063957600080fd5b5061036560205481565b34801561064f57600080fd5b5061041661065e3660046129cf565b610e30565b34801561066f57600080fd5b50610365601f5481565b34801561068557600080fd5b506104166106943660046129ec565b610e7c565b3480156106a557600080fd5b506000546001600160a01b0316610393565b3480156106c357600080fd5b506104166106d2366004612a1e565b610eb7565b3480156106e357600080fd5b50610309610eff565b3480156106f857600080fd5b5061033f6107073660046128dc565b610f0e565b34801561071857600080fd5b5061033f6107273660046128dc565b610f5d565b34801561073857600080fd5b506104166107473660046129cf565b610f6a565b34801561075857600080fd5b50610416610767366004612a1e565b610fb6565b34801561077857600080fd5b5061036560145481565b34801561078e57600080fd5b5061041661079d366004612a1e565b610ff3565b3480156107ae57600080fd5b5061033f6107bd3660046129cf565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156107e757600080fd5b5061033f6107f63660046129cf565b60086020526000908152604090205460ff1681565b34801561081757600080fd5b5061036560155481565b34801561082d57600080fd5b5061033f61083c3660046129cf565b60096020526000908152604090205460ff1681565b34801561085d57600080fd5b5061036561086c366004612a39565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b3480156108a357600080fd5b506104166108b2366004612977565b611073565b3480156108c357600080fd5b5061036560215481565b3480156108d957600080fd5b506104166108e83660046129ec565b6110c8565b3480156108f957600080fd5b50610416610908366004612949565b611106565b34801561091957600080fd5b506104166109283660046129cf565b611135565b34801561093957600080fd5b506104166109483660046129cf565b611303565b34801561095957600080fd5b506104166109683660046129cf565b6113ed565b60606001805461097c90612a72565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890612a72565b80156109f55780601f106109ca576101008083540402835291602001916109f5565b820191906000526020600020905b8154815290600101906020018083116109d857829003601f168201915b5050505050905090565b6000610a0c3384846115ae565b5060015b92915050565b6000610a238484846116d2565b610a758433610a7085604051806060016040528060288152602001612d48602891396001600160a01b038a166000908152600a602090815260408083203384529091529020549190611c54565b6115ae565b5060019392505050565b6000546001600160a01b03163314610ab25760405162461bcd60e51b8152600401610aa990612aac565b60405180910390fd5b602055565b6000600c54821115610b1e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610aa9565b6000610b28611c8e565b9050610b348382611e18565b9392505050565b336000818152600a602090815260408083206001600160a01b03871684529091528120549091610a0c918590610a709086611e5a565b6000546001600160a01b03163314610b9b5760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000600b54831115610c1a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610aa9565b81610c3857610c31610c2a611c8e565b8490611eb9565b9050610a10565b610c31610c43611c8e565b610c7e610c77601054600a610c589190612bdb565b610c63906002612be7565b601154610c71908990611eb9565b90611e18565b8690611f3b565b90611eb9565b6000546001600160a01b03163314610cae5760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d035760405162461bcd60e51b8152600401610aa990612aac565b602155565b6000546001600160a01b03163314610d325760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152600e602052604081205460ff1615610d9a57506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260046020526040902054610a1090610ab7565b6000546001600160a01b03163314610de65760405162461bcd60e51b8152600401610aa990612aac565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610e5a5760405162461bcd60e51b8152600401610aa990612aac565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ea65760405162461bcd60e51b8152600401610aa990612aac565b601293909355601355601455601155565b6000546001600160a01b03163314610ee15760405162461bcd60e51b8152600401610aa990612aac565b601e805491151563010000000263ff00000019909216919091179055565b60606002805461097c90612a72565b6000610a0c3384610a7085604051806060016040528060258152602001612d9060259139336000908152600a602090815260408083206001600160a01b038d1684529091529020549190611c54565b6000610a0c3384846116d2565b6000546001600160a01b03163314610f945760405162461bcd60e51b8152600401610aa990612aac565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610fe05760405162461bcd60e51b8152600401610aa990612aac565b601e805460ff1916911515919091179055565b6000546001600160a01b0316331461101d5760405162461bcd60e51b8152600401610aa990612aac565b601e8054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061106890831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461109d5760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110f25760405162461bcd60e51b8152600401610aa990612aac565b601693909355601755601591909155601855565b6000546001600160a01b031633146111305760405162461bcd60e51b8152600401610aa990612aac565b601f55565b6000546001600160a01b0316331461115f5760405162461bcd60e51b8152600401610aa990612aac565b6022546001600160a01b03908116908216036111cf5760405162461bcd60e51b815260206004820152602960248201527f45524332303a2057652063616e206e6f74206578636c75646520556e6973776160448201526838103937baba32b91760b91b6064820152608401610aa9565b6001600160a01b0381166000908152600e602052604090205460ff16156112435760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b6064820152608401610aa9565b6001600160a01b0381166000908152600460205260409020541561129d576001600160a01b03811660009081526004602052604090205461128390610ab7565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b0316331461132d5760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b0381166113925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114175760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b0381166000908152600e602052604090205460ff1661148a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c726561647920696e636c7564604482015261195960f21b6064820152608401610aa9565b60005b600f548110156115aa57816001600160a01b0316600f82815481106114b4576114b4612bfa565b6000918252602090912001546001600160a01b03160361159857600f80546114de90600190612c10565b815481106114ee576114ee612bfa565b600091825260209091200154600f80546001600160a01b03909216918390811061151a5761151a612bfa565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600e90925220805460ff19169055600f80548061157257611572612c23565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806115a281612c39565b91505061148d565b5050565b6001600160a01b0383166116105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa9565b6001600160a01b0382166116715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa9565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117365760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aa9565b600081116117985760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610aa9565b601f54811115806117c157506001600160a01b03831660009081526008602052604090205460ff165b6118065760405162461bcd60e51b81526020600482015260166024820152755472616e73666572204c696d6974204578636565647360501b6044820152606401610aa9565b6001600160a01b03831660009081526007602052604090205460ff16156118685760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dad31a5cdd195960521b6044820152606401610aa9565b601e546301000000900460ff166118b65760405162461bcd60e51b815260206004820152601260248201527174726164696e672069732064697361626c6560701b6044820152606401610aa9565b8060006118c1611c8e565b905060006118ce30610d5d565b602154601e5491925082101590610100900460ff161580156118ed5750805b801561190757506023546001600160a01b03888116911614155b801561191b5750601e5462010000900460ff165b156119295761192982611f7d565b6023546001600160a01b0390811690881603611bfd576001600160a01b03861660009081526009602052604090205460ff1615801561197157506001600160a01b0386163014155b801561198557506001600160a01b03861615155b801561199f57506019546001600160a01b03878116911614155b15611a355760006119af87610d5d565b6020549091506119bf8783612be7565b1115611a335760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610aa9565b505b6001600160a01b0386166000908152600d602052604090205460ff16158015611a665750601e54610100900460ff16155b15611a7957611a7687868561202d565b93505b611aa5611a868685611eb9565b6001600160a01b03891660009081526004602052604090205490611f3b565b6001600160a01b038816600090815260046020526040902055611aea611acb8585611eb9565b6001600160a01b03881660009081526004602052604090205490611e5a565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600e909152205460ff1615611b5b576001600160a01b038716600090815260066020526040902054611b419086611f3b565b6001600160a01b0388166000908152600660205260409020555b6001600160a01b0386166000908152600e602052604090205460ff1615611bb9576001600160a01b038616600090815260066020526040902054611b9f9085611e5a565b6001600160a01b0387166000908152600660205260409020555b856001600160a01b0316876001600160a01b0316600080516020612d7083398151915286604051611bec91815260200190565b60405180910390a350505050505050565b6023546001600160a01b0390811690871603611a79576001600160a01b0387166000908152600d602052604090205460ff16158015611c445750601e54610100900460ff16155b15611a7957611a768786856123cf565b60008184841115611c785760405162461bcd60e51b8152600401610aa99190612876565b506000611c858486612c10565b95945050505050565b600c54600b5460009190825b600f54811015611de5578260046000600f8481548110611cbc57611cbc612bfa565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611d2757508160066000600f8481548110611d0057611d00612bfa565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d4357600b54600c54611d3b91611e18565b935050505090565b611d8960046000600f8481548110611d5d57611d5d612bfa565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f3b565b9250611dd160066000600f8481548110611da557611da5612bfa565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f3b565b915080611ddd81612c39565b915050611c9a565b50600b54600c54611df591611e18565b821015611e1257600b54600c54611e0b91611e18565b9250505090565b611e0b82825b6000610b3483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061263d565b600080611e678385612be7565b905083811015610b345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aa9565b600082600003611ecb57506000610a10565b6000611ed78385612c52565b905082611ee48583612c69565b14610b345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aa9565b6000610b3483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c54565b601e805461ff001916610100179055601f54811115611f9b5750601f545b6000611fa8826002611e18565b90506000611fb68383611f3b565b905047611fc28361266b565b6000611fce4783611f3b565b9050611fda83826127c5565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601e805461ff0019169055505050565b6011546000908390156120a0576000612067601054600261204e9190612be7565b61205990600a612bdb565b601154610c71908890611eb9565b90506120738282611f3b565b915061208b6120828286611eb9565b600c5490611f3b565b600c55601b5461209b9082611e5a565b601b55505b601254156121c15760006120d560105460026120bc9190612be7565b6120c790600a612bdb565b601254610c71908890611eb9565b90506120e18282611f3b565b91506121116120f08286611eb9565b6019546001600160a01b031660009081526004602052604090205490611e5a565b601980546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600e909152205460ff161561218c576019546001600160a01b03166000908152600660205260409020546121709082611e5a565b6019546001600160a01b03166000908152600660205260409020555b6019546040518281526001600160a01b0391821691881690600080516020612d708339815191529060200160405180910390a3505b601354156122a65760006121f660105460026121dd9190612be7565b6121e890600a612bdb565b601354610c71908890611eb9565b90506122028282611f3b565b91506122276122118286611eb9565b3060009081526004602052604090205490611e5a565b30600090815260046020908152604080832093909355600e9052205460ff161561227657306000908152600660205260409020546122659082611e5a565b306000908152600660205260409020555b60405181815230906001600160a01b03881690600080516020612d708339815191529060200160405180910390a3505b601454156123c75760006122db60105460026122c29190612be7565b6122cd90600a612bdb565b601454610c71908890611eb9565b90506122e78282611f3b565b91506123176122f68286611eb9565b601a546001600160a01b031660009081526004602052604090205490611e5a565b601a80546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600e909152205460ff161561239257601a546001600160a01b03166000908152600660205260409020546123769082611e5a565b601a546001600160a01b03166000908152600660205260409020555b601a546040518281526001600160a01b0391821691881690600080516020612d708339815191529060200160405180910390a3505b949350505050565b60155460009083901561243957600061240960105460026123f09190612be7565b6123fb90600a612bdb565b601554610c71908890611eb9565b90506124158282611f3b565b91506124246120828286611eb9565b600c55601b546124349082611e5a565b601b55505b6016541561253957600061246e60105460026124559190612be7565b61246090600a612bdb565b601654610c71908890611eb9565b905061247a8282611f3b565b91506124896120f08286611eb9565b601980546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600e909152205460ff1615612504576019546001600160a01b03166000908152600660205260409020546124e89082611e5a565b6019546001600160a01b03166000908152600660205260409020555b6019546040518281526001600160a01b0391821691881690600080516020612d708339815191529060200160405180910390a3505b6017541561260857600061256e60105460026125559190612be7565b61256090600a612bdb565b601754610c71908890611eb9565b905061257a8282611f3b565b91506125896122118286611eb9565b30600090815260046020908152604080832093909355600e9052205460ff16156125d857306000908152600660205260409020546125c79082611e5a565b306000908152600660205260409020555b60405181815230906001600160a01b03881690600080516020612d708339815191529060200160405180910390a3505b601854156123c75760006122db60105460026126249190612be7565b61262f90600a612bdb565b601854610c71908890611eb9565b6000818361265e5760405162461bcd60e51b8152600401610aa99190612876565b506000611c858486612c69565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a0576126a0612bfa565b6001600160a01b03928316602091820292909201810191909152602254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271d9190612c8b565b8160018151811061273057612730612bfa565b6001600160a01b03928316602091820292909201015260225461275691309116846115ae565b60225460405163791ac94760e01b81526001600160a01b039091169063791ac9479061278f908590600090869030904290600401612ca8565b600060405180830381600087803b1580156127a957600080fd5b505af11580156127bd573d6000803e3d6000fd5b505050505050565b6022546127dd9030906001600160a01b0316846115ae565b60225460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561284a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061286f9190612d19565b5050505050565b600060208083528351808285015260005b818110156128a357858101830151858201604001528201612887565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146128d957600080fd5b50565b600080604083850312156128ef57600080fd5b82356128fa816128c4565b946020939093013593505050565b60008060006060848603121561291d57600080fd5b8335612928816128c4565b92506020840135612938816128c4565b929592945050506040919091013590565b60006020828403121561295b57600080fd5b5035919050565b8035801515811461297257600080fd5b919050565b6000806040838503121561298a57600080fd5b8235612995816128c4565b91506129a360208401612962565b90509250929050565b600080604083850312156129bf57600080fd5b823591506129a360208401612962565b6000602082840312156129e157600080fd5b8135610b34816128c4565b60008060008060808587031215612a0257600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612a3057600080fd5b610b3482612962565b60008060408385031215612a4c57600080fd5b8235612a57816128c4565b91506020830135612a67816128c4565b809150509250929050565b600181811c90821680612a8657607f821691505b602082108103612aa657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612b32578160001904821115612b1857612b18612ae1565b80851615612b2557918102915b93841c9390800290612afc565b509250929050565b600082612b4957506001610a10565b81612b5657506000610a10565b8160018114612b6c5760028114612b7657612b92565b6001915050610a10565b60ff841115612b8757612b87612ae1565b50506001821b610a10565b5060208310610133831016604e8410600b8410161715612bb5575081810a610a10565b612bbf8383612af7565b8060001904821115612bd357612bd3612ae1565b029392505050565b6000610b348383612b3a565b80820180821115610a1057610a10612ae1565b634e487b7160e01b600052603260045260246000fd5b81810381811115610a1057610a10612ae1565b634e487b7160e01b600052603160045260246000fd5b600060018201612c4b57612c4b612ae1565b5060010190565b8082028115828204841417610a1057610a10612ae1565b600082612c8657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612c9d57600080fd5b8151610b34816128c4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612cf85784516001600160a01b031683529383019391830191600101612cd3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d2e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122031ac751aa9876d961756579526c8fbbaf3d25d6bdcaa6d6c29f5d7497069bdd864736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c8063715018a611610190578063c49b9a80116100dc578063e0ff589611610095578063ec28438a1161006f578063ec28438a146108ed578063f2cc0c181461090d578063f2fde38b1461092d578063f84354f11461094d57600080fd5b8063e0ff589614610897578063e5d41c6b146108b7578063e653da08146108cd57600080fd5b8063c49b9a8014610782578063cba0e996146107a2578063cc815ca9146107db578063d3f838941461080b578063d799eef114610821578063dd62ed3e1461085157600080fd5b80638f70ccf711610149578063a9059cbb11610123578063a9059cbb1461070c578063ac1a386a1461072c578063b7bfff651461074c578063c0b0fda21461076c57600080fd5b80638f70ccf7146106b757806395d89b41146106d7578063a457c2d7146106ec57600080fd5b8063715018a61461061857806378109e541461062d5780638187f516146106435780638c0b5e22146106635780638c5a133d146106795780638da5cb5b1461069957600080fd5b80633b124fe71161024f5780634a74bb0211610208578063678a2ca1116101e2578063678a2ca1146105ac57806368092bd9146105c25780636bc87c3a146105e257806370a08231146105f857600080fd5b80634a74bb0214610546578063563f04b314610566578063595dec3c1461057c57600080fd5b80633b124fe714610490578063442e41b5146104a65780634549b039146104c657806347f2dc5b146104e657806348a464731461050657806349bd5a5e1461052657600080fd5b806323b872dd116102a157806323b872dd146103d657806327a14fc2146103f657806329140b57146104185780632d8381191461042e578063313ce5671461044e578063395093511461047057600080fd5b806306fdde03146102f4578063095ea7b31461031f578063114bf3621461034f5780631694505e1461037357806318160ddd146103ab57806319db457d146103c057600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030961096d565b6040516103169190612876565b60405180910390f35b34801561032b57600080fd5b5061033f61033a3660046128dc565b6109ff565b6040519015158152602001610316565b34801561035b57600080fd5b5061036560125481565b604051908152602001610316565b34801561037f57600080fd5b50602254610393906001600160a01b031681565b6040516001600160a01b039091168152602001610316565b3480156103b757600080fd5b50600b54610365565b3480156103cc57600080fd5b5061036560105481565b3480156103e257600080fd5b5061033f6103f1366004612908565b610a16565b34801561040257600080fd5b50610416610411366004612949565b610a7f565b005b34801561042457600080fd5b5061036560165481565b34801561043a57600080fd5b50610365610449366004612949565b610ab7565b34801561045a57600080fd5b5060035460405160ff9091168152602001610316565b34801561047c57600080fd5b5061033f61048b3660046128dc565b610b3b565b34801561049c57600080fd5b5061036560115481565b3480156104b257600080fd5b506104166104c1366004612977565b610b71565b3480156104d257600080fd5b506103656104e13660046129ac565b610bc6565b3480156104f257600080fd5b50610416610501366004612977565b610c84565b34801561051257600080fd5b50610416610521366004612949565b610cd9565b34801561053257600080fd5b50602354610393906001600160a01b031681565b34801561055257600080fd5b50601e5461033f9062010000900460ff1681565b34801561057257600080fd5b5061036560185481565b34801561058857600080fd5b5061033f6105973660046129cf565b60076020526000908152604090205460ff1681565b3480156105b857600080fd5b5061036560175481565b3480156105ce57600080fd5b506104166105dd366004612977565b610d08565b3480156105ee57600080fd5b5061036560135481565b34801561060457600080fd5b506103656106133660046129cf565b610d5d565b34801561062457600080fd5b50610416610dbc565b34801561063957600080fd5b5061036560205481565b34801561064f57600080fd5b5061041661065e3660046129cf565b610e30565b34801561066f57600080fd5b50610365601f5481565b34801561068557600080fd5b506104166106943660046129ec565b610e7c565b3480156106a557600080fd5b506000546001600160a01b0316610393565b3480156106c357600080fd5b506104166106d2366004612a1e565b610eb7565b3480156106e357600080fd5b50610309610eff565b3480156106f857600080fd5b5061033f6107073660046128dc565b610f0e565b34801561071857600080fd5b5061033f6107273660046128dc565b610f5d565b34801561073857600080fd5b506104166107473660046129cf565b610f6a565b34801561075857600080fd5b50610416610767366004612a1e565b610fb6565b34801561077857600080fd5b5061036560145481565b34801561078e57600080fd5b5061041661079d366004612a1e565b610ff3565b3480156107ae57600080fd5b5061033f6107bd3660046129cf565b6001600160a01b03166000908152600e602052604090205460ff1690565b3480156107e757600080fd5b5061033f6107f63660046129cf565b60086020526000908152604090205460ff1681565b34801561081757600080fd5b5061036560155481565b34801561082d57600080fd5b5061033f61083c3660046129cf565b60096020526000908152604090205460ff1681565b34801561085d57600080fd5b5061036561086c366004612a39565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b3480156108a357600080fd5b506104166108b2366004612977565b611073565b3480156108c357600080fd5b5061036560215481565b3480156108d957600080fd5b506104166108e83660046129ec565b6110c8565b3480156108f957600080fd5b50610416610908366004612949565b611106565b34801561091957600080fd5b506104166109283660046129cf565b611135565b34801561093957600080fd5b506104166109483660046129cf565b611303565b34801561095957600080fd5b506104166109683660046129cf565b6113ed565b60606001805461097c90612a72565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890612a72565b80156109f55780601f106109ca576101008083540402835291602001916109f5565b820191906000526020600020905b8154815290600101906020018083116109d857829003601f168201915b5050505050905090565b6000610a0c3384846115ae565b5060015b92915050565b6000610a238484846116d2565b610a758433610a7085604051806060016040528060288152602001612d48602891396001600160a01b038a166000908152600a602090815260408083203384529091529020549190611c54565b6115ae565b5060019392505050565b6000546001600160a01b03163314610ab25760405162461bcd60e51b8152600401610aa990612aac565b60405180910390fd5b602055565b6000600c54821115610b1e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610aa9565b6000610b28611c8e565b9050610b348382611e18565b9392505050565b336000818152600a602090815260408083206001600160a01b03871684529091528120549091610a0c918590610a709086611e5a565b6000546001600160a01b03163314610b9b5760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000600b54831115610c1a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610aa9565b81610c3857610c31610c2a611c8e565b8490611eb9565b9050610a10565b610c31610c43611c8e565b610c7e610c77601054600a610c589190612bdb565b610c63906002612be7565b601154610c71908990611eb9565b90611e18565b8690611f3b565b90611eb9565b6000546001600160a01b03163314610cae5760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d035760405162461bcd60e51b8152600401610aa990612aac565b602155565b6000546001600160a01b03163314610d325760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152600e602052604081205460ff1615610d9a57506001600160a01b031660009081526006602052604090205490565b6001600160a01b038216600090815260046020526040902054610a1090610ab7565b6000546001600160a01b03163314610de65760405162461bcd60e51b8152600401610aa990612aac565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610e5a5760405162461bcd60e51b8152600401610aa990612aac565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ea65760405162461bcd60e51b8152600401610aa990612aac565b601293909355601355601455601155565b6000546001600160a01b03163314610ee15760405162461bcd60e51b8152600401610aa990612aac565b601e805491151563010000000263ff00000019909216919091179055565b60606002805461097c90612a72565b6000610a0c3384610a7085604051806060016040528060258152602001612d9060259139336000908152600a602090815260408083206001600160a01b038d1684529091529020549190611c54565b6000610a0c3384846116d2565b6000546001600160a01b03163314610f945760405162461bcd60e51b8152600401610aa990612aac565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610fe05760405162461bcd60e51b8152600401610aa990612aac565b601e805460ff1916911515919091179055565b6000546001600160a01b0316331461101d5760405162461bcd60e51b8152600401610aa990612aac565b601e8054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061106890831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461109d5760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110f25760405162461bcd60e51b8152600401610aa990612aac565b601693909355601755601591909155601855565b6000546001600160a01b031633146111305760405162461bcd60e51b8152600401610aa990612aac565b601f55565b6000546001600160a01b0316331461115f5760405162461bcd60e51b8152600401610aa990612aac565b6022546001600160a01b03908116908216036111cf5760405162461bcd60e51b815260206004820152602960248201527f45524332303a2057652063616e206e6f74206578636c75646520556e6973776160448201526838103937baba32b91760b91b6064820152608401610aa9565b6001600160a01b0381166000908152600e602052604090205460ff16156112435760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b6064820152608401610aa9565b6001600160a01b0381166000908152600460205260409020541561129d576001600160a01b03811660009081526004602052604090205461128390610ab7565b6001600160a01b0382166000908152600660205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b0316331461132d5760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b0381166113925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aa9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114175760405162461bcd60e51b8152600401610aa990612aac565b6001600160a01b0381166000908152600e602052604090205460ff1661148a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c726561647920696e636c7564604482015261195960f21b6064820152608401610aa9565b60005b600f548110156115aa57816001600160a01b0316600f82815481106114b4576114b4612bfa565b6000918252602090912001546001600160a01b03160361159857600f80546114de90600190612c10565b815481106114ee576114ee612bfa565b600091825260209091200154600f80546001600160a01b03909216918390811061151a5761151a612bfa565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600e90925220805460ff19169055600f80548061157257611572612c23565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806115a281612c39565b91505061148d565b5050565b6001600160a01b0383166116105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aa9565b6001600160a01b0382166116715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aa9565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117365760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aa9565b600081116117985760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610aa9565b601f54811115806117c157506001600160a01b03831660009081526008602052604090205460ff165b6118065760405162461bcd60e51b81526020600482015260166024820152755472616e73666572204c696d6974204578636565647360501b6044820152606401610aa9565b6001600160a01b03831660009081526007602052604090205460ff16156118685760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dad31a5cdd195960521b6044820152606401610aa9565b601e546301000000900460ff166118b65760405162461bcd60e51b815260206004820152601260248201527174726164696e672069732064697361626c6560701b6044820152606401610aa9565b8060006118c1611c8e565b905060006118ce30610d5d565b602154601e5491925082101590610100900460ff161580156118ed5750805b801561190757506023546001600160a01b03888116911614155b801561191b5750601e5462010000900460ff165b156119295761192982611f7d565b6023546001600160a01b0390811690881603611bfd576001600160a01b03861660009081526009602052604090205460ff1615801561197157506001600160a01b0386163014155b801561198557506001600160a01b03861615155b801561199f57506019546001600160a01b03878116911614155b15611a355760006119af87610d5d565b6020549091506119bf8783612be7565b1115611a335760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610aa9565b505b6001600160a01b0386166000908152600d602052604090205460ff16158015611a665750601e54610100900460ff16155b15611a7957611a7687868561202d565b93505b611aa5611a868685611eb9565b6001600160a01b03891660009081526004602052604090205490611f3b565b6001600160a01b038816600090815260046020526040902055611aea611acb8585611eb9565b6001600160a01b03881660009081526004602052604090205490611e5a565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600e909152205460ff1615611b5b576001600160a01b038716600090815260066020526040902054611b419086611f3b565b6001600160a01b0388166000908152600660205260409020555b6001600160a01b0386166000908152600e602052604090205460ff1615611bb9576001600160a01b038616600090815260066020526040902054611b9f9085611e5a565b6001600160a01b0387166000908152600660205260409020555b856001600160a01b0316876001600160a01b0316600080516020612d7083398151915286604051611bec91815260200190565b60405180910390a350505050505050565b6023546001600160a01b0390811690871603611a79576001600160a01b0387166000908152600d602052604090205460ff16158015611c445750601e54610100900460ff16155b15611a7957611a768786856123cf565b60008184841115611c785760405162461bcd60e51b8152600401610aa99190612876565b506000611c858486612c10565b95945050505050565b600c54600b5460009190825b600f54811015611de5578260046000600f8481548110611cbc57611cbc612bfa565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611d2757508160066000600f8481548110611d0057611d00612bfa565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d4357600b54600c54611d3b91611e18565b935050505090565b611d8960046000600f8481548110611d5d57611d5d612bfa565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f3b565b9250611dd160066000600f8481548110611da557611da5612bfa565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f3b565b915080611ddd81612c39565b915050611c9a565b50600b54600c54611df591611e18565b821015611e1257600b54600c54611e0b91611e18565b9250505090565b611e0b82825b6000610b3483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061263d565b600080611e678385612be7565b905083811015610b345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aa9565b600082600003611ecb57506000610a10565b6000611ed78385612c52565b905082611ee48583612c69565b14610b345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aa9565b6000610b3483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c54565b601e805461ff001916610100179055601f54811115611f9b5750601f545b6000611fa8826002611e18565b90506000611fb68383611f3b565b905047611fc28361266b565b6000611fce4783611f3b565b9050611fda83826127c5565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601e805461ff0019169055505050565b6011546000908390156120a0576000612067601054600261204e9190612be7565b61205990600a612bdb565b601154610c71908890611eb9565b90506120738282611f3b565b915061208b6120828286611eb9565b600c5490611f3b565b600c55601b5461209b9082611e5a565b601b55505b601254156121c15760006120d560105460026120bc9190612be7565b6120c790600a612bdb565b601254610c71908890611eb9565b90506120e18282611f3b565b91506121116120f08286611eb9565b6019546001600160a01b031660009081526004602052604090205490611e5a565b601980546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600e909152205460ff161561218c576019546001600160a01b03166000908152600660205260409020546121709082611e5a565b6019546001600160a01b03166000908152600660205260409020555b6019546040518281526001600160a01b0391821691881690600080516020612d708339815191529060200160405180910390a3505b601354156122a65760006121f660105460026121dd9190612be7565b6121e890600a612bdb565b601354610c71908890611eb9565b90506122028282611f3b565b91506122276122118286611eb9565b3060009081526004602052604090205490611e5a565b30600090815260046020908152604080832093909355600e9052205460ff161561227657306000908152600660205260409020546122659082611e5a565b306000908152600660205260409020555b60405181815230906001600160a01b03881690600080516020612d708339815191529060200160405180910390a3505b601454156123c75760006122db60105460026122c29190612be7565b6122cd90600a612bdb565b601454610c71908890611eb9565b90506122e78282611f3b565b91506123176122f68286611eb9565b601a546001600160a01b031660009081526004602052604090205490611e5a565b601a80546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600e909152205460ff161561239257601a546001600160a01b03166000908152600660205260409020546123769082611e5a565b601a546001600160a01b03166000908152600660205260409020555b601a546040518281526001600160a01b0391821691881690600080516020612d708339815191529060200160405180910390a3505b949350505050565b60155460009083901561243957600061240960105460026123f09190612be7565b6123fb90600a612bdb565b601554610c71908890611eb9565b90506124158282611f3b565b91506124246120828286611eb9565b600c55601b546124349082611e5a565b601b55505b6016541561253957600061246e60105460026124559190612be7565b61246090600a612bdb565b601654610c71908890611eb9565b905061247a8282611f3b565b91506124896120f08286611eb9565b601980546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600e909152205460ff1615612504576019546001600160a01b03166000908152600660205260409020546124e89082611e5a565b6019546001600160a01b03166000908152600660205260409020555b6019546040518281526001600160a01b0391821691881690600080516020612d708339815191529060200160405180910390a3505b6017541561260857600061256e60105460026125559190612be7565b61256090600a612bdb565b601754610c71908890611eb9565b905061257a8282611f3b565b91506125896122118286611eb9565b30600090815260046020908152604080832093909355600e9052205460ff16156125d857306000908152600660205260409020546125c79082611e5a565b306000908152600660205260409020555b60405181815230906001600160a01b03881690600080516020612d708339815191529060200160405180910390a3505b601854156123c75760006122db60105460026126249190612be7565b61262f90600a612bdb565b601854610c71908890611eb9565b6000818361265e5760405162461bcd60e51b8152600401610aa99190612876565b506000611c858486612c69565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a0576126a0612bfa565b6001600160a01b03928316602091820292909201810191909152602254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156126f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271d9190612c8b565b8160018151811061273057612730612bfa565b6001600160a01b03928316602091820292909201015260225461275691309116846115ae565b60225460405163791ac94760e01b81526001600160a01b039091169063791ac9479061278f908590600090869030904290600401612ca8565b600060405180830381600087803b1580156127a957600080fd5b505af11580156127bd573d6000803e3d6000fd5b505050505050565b6022546127dd9030906001600160a01b0316846115ae565b60225460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561284a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061286f9190612d19565b5050505050565b600060208083528351808285015260005b818110156128a357858101830151858201604001528201612887565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146128d957600080fd5b50565b600080604083850312156128ef57600080fd5b82356128fa816128c4565b946020939093013593505050565b60008060006060848603121561291d57600080fd5b8335612928816128c4565b92506020840135612938816128c4565b929592945050506040919091013590565b60006020828403121561295b57600080fd5b5035919050565b8035801515811461297257600080fd5b919050565b6000806040838503121561298a57600080fd5b8235612995816128c4565b91506129a360208401612962565b90509250929050565b600080604083850312156129bf57600080fd5b823591506129a360208401612962565b6000602082840312156129e157600080fd5b8135610b34816128c4565b60008060008060808587031215612a0257600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612a3057600080fd5b610b3482612962565b60008060408385031215612a4c57600080fd5b8235612a57816128c4565b91506020830135612a67816128c4565b809150509250929050565b600181811c90821680612a8657607f821691505b602082108103612aa657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612b32578160001904821115612b1857612b18612ae1565b80851615612b2557918102915b93841c9390800290612afc565b509250929050565b600082612b4957506001610a10565b81612b5657506000610a10565b8160018114612b6c5760028114612b7657612b92565b6001915050610a10565b60ff841115612b8757612b87612ae1565b50506001821b610a10565b5060208310610133831016604e8410600b8410161715612bb5575081810a610a10565b612bbf8383612af7565b8060001904821115612bd357612bd3612ae1565b029392505050565b6000610b348383612b3a565b80820180821115610a1057610a10612ae1565b634e487b7160e01b600052603260045260246000fd5b81810381811115610a1057610a10612ae1565b634e487b7160e01b600052603160045260246000fd5b600060018201612c4b57612c4b612ae1565b5060010190565b8082028115828204841417610a1057610a10612ae1565b600082612c8657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612c9d57600080fd5b8151610b34816128c4565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612cf85784516001600160a01b031683529383019391830191600101612cd3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d2e57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122031ac751aa9876d961756579526c8fbbaf3d25d6bdcaa6d6c29f5d7497069bdd864736f6c63430008110033

Deployed Bytecode Sourcemap

20257:21911:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24302:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25322:193;;;;;;;;;;-1:-1:-1;25322:193:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;25322:193:0;1023:187:1;21374:34:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;21374:34:0;1215:177:1;22499:42:0;;;;;;;;;;-1:-1:-1;22499:42:0;;;;-1:-1:-1;;;;;22499:42:0;;;;;;-1:-1:-1;;;;;1587:32:1;;;1569:51;;1557:2;1542:18;22499:42:0;1397:229:1;24579:99:0;;;;;;;;;;-1:-1:-1;24659:11:0;;24579:99;;21212:30;;;;;;;;;;;;;;;;25523:368;;;;;;;;;;-1:-1:-1;25523:368:0;;;;;:::i;:::-;;:::i;41789:106::-;;;;;;;;;;-1:-1:-1;41789:106:0;;;;;:::i;:::-;;:::i;:::-;;21658:37;;;;;;;;;;;;;;;;27267:368;;;;;;;;;;-1:-1:-1;27267:368:0;;;;;:::i;:::-;;:::i;24488:83::-;;;;;;;;;;-1:-1:-1;24554:9:0;;24488:83;;24554:9;;;;2419:36:1;;2407:2;2392:18;24488:83:0;2277:184:1;25905:300:0;;;;;;;;;;-1:-1:-1;25905:300:0;;;;;:::i;:::-;;:::i;21280:28::-;;;;;;;;;;;;;;;;41504:129;;;;;;;;;;-1:-1:-1;41504:129:0;;;;;:::i;:::-;;:::i;26739:520::-;;;;;;;;;;-1:-1:-1;26739:520:0;;;;;:::i;:::-;;:::i;40192:113::-;;;;;;;;;;-1:-1:-1;40192:113:0;;;;;:::i;:::-;;:::i;42014:114::-;;;;;;;;;;-1:-1:-1;42014:114:0;;;;;:::i;:::-;;:::i;22548:28::-;;;;;;;;;;-1:-1:-1;22548:28:0;;;;-1:-1:-1;;;;;22548:28:0;;;22197:40;;;;;;;;;;-1:-1:-1;22197:40:0;;;;;;;;;;;21774:33;;;;;;;;;;;;;;;;20677:43;;;;;;;;;;-1:-1:-1;20677:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21715:40;;;;;;;;;;;;;;;;41284:106;;;;;;;;;;-1:-1:-1;41284:106:0;;;;;:::i;:::-;;:::i;21451:34::-;;;;;;;;;;;;;;;;24686:215;;;;;;;;;;-1:-1:-1;24686:215:0;;;;;:::i;:::-;;:::i;17818:148::-;;;;;;;;;;;;;:::i;22402:40::-;;;;;;;;;;;;;;;;40095:89;;;;;;;;;;-1:-1:-1;40095:89:0;;;;;:::i;:::-;;:::i;22311:35::-;;;;;;;;;;;;;;;;40602:248;;;;;;;;;;-1:-1:-1;40602:248:0;;;;;:::i;:::-;;:::i;17176:79::-;;;;;;;;;;-1:-1:-1;17214:7:0;17241:6;-1:-1:-1;;;;;17241:6:0;17176:79;;41402:90;;;;;;;;;;-1:-1:-1;41402:90:0;;;;;:::i;:::-;;:::i;24393:87::-;;;;;;;;;;;;;:::i;26213:400::-;;;;;;;;;;-1:-1:-1;26213:400:0;;;;;:::i;:::-;;:::i;24909:213::-;;;;;;;;;;-1:-1:-1;24909:213:0;;;;;:::i;:::-;;:::i;41147:124::-;;;;;;;;;;-1:-1:-1;41147:124:0;;;;;:::i;:::-;;:::i;40499:91::-;;;;;;;;;;-1:-1:-1;40499:91:0;;;;;:::i;:::-;;:::i;21505:29::-;;;;;;;;;;;;;;;;40317:170;;;;;;;;;;-1:-1:-1;40317:170:0;;;;;:::i;:::-;;:::i;26621:110::-;;;;;;;;;;-1:-1:-1;26621:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;26703:20:0;26679:4;26703:20;;;:11;:20;;;;;;;;;26621:110;20727:43;;;;;;;;;;-1:-1:-1;20727:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21560:32;;;;;;;;;;;;;;;;20777:43;;;;;;;;;;-1:-1:-1;20777:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25130:184;;;;;;;;;;-1:-1:-1;25130:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;25279:18:0;;;25247:7;25279:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25130:184;41645:132;;;;;;;;;;-1:-1:-1;41645:132:0;;;;;:::i;:::-;;:::i;22449:43::-;;;;;;;;;;;;;;;;40862:273;;;;;;;;;;-1:-1:-1;40862:273:0;;;;;:::i;:::-;;:::i;41904:98::-;;;;;;;;;;-1:-1:-1;41904:98:0;;;;;:::i;:::-;;:::i;27643:537::-;;;;;;;;;;-1:-1:-1;27643:537:0;;;;;:::i;:::-;;:::i;18121:281::-;;;;;;;;;;-1:-1:-1;18121:281:0;;;;;:::i;:::-;;:::i;28188:491::-;;;;;;;;;;-1:-1:-1;28188:491:0;;;;;:::i;:::-;;:::i;24302:83::-;24339:13;24372:5;24365:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24302:83;:::o;25322:193::-;25424:4;25446:39;929:10;25469:7;25478:6;25446:8;:39::i;:::-;-1:-1:-1;25503:4:0;25322:193;;;;;:::o;25523:368::-;25663:4;25680:34;25690:6;25697:9;25707:6;25680:9;:34::i;:::-;25742:119;25751:6;929:10;25771:89;25810:6;25771:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25771:19:0;;;;;;:11;:19;;;;;;;;929:10;25771:33;;;;;;;;;;:37;:89::i;:::-;25742:8;:119::i;:::-;-1:-1:-1;25879:4:0;25523:368;;;;;:::o;41789:106::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;;;;;;;;;41863:15:::1;:24:::0;41789:106::o;27267:368::-;27370:7;27437:16;;27417;:36;;27395:128;;;;-1:-1:-1;;;27395:128:0;;5580:2:1;27395:128:0;;;5562:21:1;5619:2;5599:18;;;5592:30;5658:34;5638:18;;;5631:62;-1:-1:-1;;;5709:18:1;;;5702:40;5759:19;;27395:128:0;5378:406:1;27395:128:0;27534:19;27556:20;:18;:20::i;:::-;27534:42;-1:-1:-1;27594:33:0;:16;27534:42;27594:20;:33::i;:::-;27587:40;27267:368;-1:-1:-1;;;27267:368:0:o;25905:300::-;929:10;26020:4;26114:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26114:34:0;;;;;;;;;;26020:4;;26042:133;;26092:7;;26114:50;;26153:10;26114:38;:50::i;41504:129::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41597:20:0;;;::::1;;::::0;;;:10:::1;:20;::::0;;;;:28;;-1:-1:-1;;41597:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41504:129::o;26739:520::-;26861:7;26909:11;;26894;:26;;26886:70;;;;-1:-1:-1;;;26886:70:0;;5991:2:1;26886:70:0;;;5973:21:1;6030:2;6010:18;;;6003:30;6069:33;6049:18;;;6042:61;6120:18;;26886:70:0;5789:355:1;26886:70:0;26972:17;26967:285;;27013:37;27029:20;:18;:20::i;:::-;27013:11;;:15;:37::i;:::-;27006:44;;;;26967:285;27107:133;27201:20;:18;:20::i;:::-;27107:67;27123:50;27157:11;;27152:2;:16;;;;:::i;:::-;:20;;27171:1;27152:20;:::i;:::-;27139:7;;27123:24;;:11;;:15;:24::i;:::-;:28;;:50::i;:::-;27107:11;;:15;:67::i;:::-;:71;;:133::i;40192:113::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40271:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;40271:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40192:113::o;42014:114::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;42092:19:::1;:28:::0;42014:114::o;41284:106::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41361:15:0;;;::::1;;::::0;;;:10:::1;:15;::::0;;;;:21;;-1:-1:-1;;41361:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41284:106::o;24686:215::-;-1:-1:-1;;;;;24776:20:0;;24752:7;24776:20;;;:11;:20;;;;;;;;24772:55;;;-1:-1:-1;;;;;;24805:22:0;;;;;:13;:22;;;;;;;24686:215::o;24772:55::-;-1:-1:-1;;;;;24865:27:0;;;;;;:18;:27;;;;;;24845:48;;:19;:48::i;17818:148::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;17925:1:::1;17909:6:::0;;17888:40:::1;::::0;-1:-1:-1;;;;;17909:6:0;;::::1;::::0;17888:40:::1;::::0;17925:1;;17888:40:::1;17956:1;17939:19:::0;;-1:-1:-1;;;;;;17939:19:0::1;::::0;;17818:148::o;40095:89::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;40156:13:::1;:20:::0;;-1:-1:-1;;;;;;40156:20:0::1;-1:-1:-1::0;;;;;40156:20:0;;;::::1;::::0;;;::::1;::::0;;40095:89::o;40602:248::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;40725:13:::1;:28:::0;;;;40764:13:::1;:26:::0;40801:8:::1;:16:::0;40828:7:::1;:14:::0;40602:248::o;41402:90::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;41464:13:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;41464:20:0;;::::1;::::0;;;::::1;::::0;;41402:90::o;24393:87::-;24432:13;24465:7;24458:14;;;;;:::i;26213:400::-;26333:4;26355:228;929:10;26405:7;26427:145;26484:15;26427:145;;;;;;;;;;;;;;;;;929:10;26427:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26427:34:0;;;;;;;;;;;;:38;:145::i;24909:213::-;25031:4;25052:40;929:10;25075:9;25085:6;25052:9;:40::i;41147:124::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;41229:16:::1;:34:::0;;-1:-1:-1;;;;;;41229:34:0::1;-1:-1:-1::0;;;;;41229:34:0;;;::::1;::::0;;;::::1;::::0;;41147:124::o;40499:91::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;40563:11:::1;:19:::0;;-1:-1:-1;;40563:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40499:91::o;40317:170::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;40395:21:::1;:31:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40395:31:0;;::::1;;::::0;;40442:37:::1;::::0;::::1;::::0;::::1;::::0;40419:7;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;40442:37:0::1;;;;;;;;40317:170:::0;:::o;41645:132::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41742:20:0;;;::::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;41742:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41645:132::o;40862:273::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;40990:17:::1;:35:::0;;;;41036:18:::1;:31:::0;41078:11:::1;:18:::0;;;;41107:12:::1;:20:::0;40862:273::o;41904:98::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;41974:11:::1;:20:::0;41904:98::o;27643:537::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;27757:15:::1;::::0;-1:-1:-1;;;;;27757:15:0;;::::1;27738:35:::0;;::::1;::::0;27716:126:::1;;;::::0;-1:-1:-1;;;27716:126:0;;7987:2:1;27716:126:0::1;::::0;::::1;7969:21:1::0;8026:2;8006:18;;;7999:30;8065:34;8045:18;;;8038:62;-1:-1:-1;;;8116:18:1;;;8109:39;8165:19;;27716:126:0::1;7785:405:1::0;27716:126:0::1;-1:-1:-1::0;;;;;27862:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27861:21;27853:68;;;::::0;-1:-1:-1;;;27853:68:0;;8397:2:1;27853:68:0::1;::::0;::::1;8379:21:1::0;8436:2;8416:18;;;8409:30;8475:34;8455:18;;;8448:62;-1:-1:-1;;;8526:18:1;;;8519:32;8568:19;;27853:68:0::1;8195:398:1::0;27853:68:0::1;-1:-1:-1::0;;;;;27936:27:0;::::1;27966:1;27936:27:::0;;;:18:::1;:27;::::0;;;;;:31;27932:169:::1;;-1:-1:-1::0;;;;;28047:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;28009:80:::1;::::0;:19:::1;:80::i;:::-;-1:-1:-1::0;;;;;27984:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:105;27932:169:::1;-1:-1:-1::0;;;;;28111:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28111:27:0::1;28134:4;28111:27:::0;;::::1;::::0;;;28149:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;28149:23:0::1;::::0;;::::1;::::0;;27643:537::o;18121:281::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18224:22:0;::::1;18202:110;;;::::0;-1:-1:-1;;;18202:110:0;;8800:2:1;18202:110:0::1;::::0;::::1;8782:21:1::0;8839:2;8819:18;;;8812:30;8878:34;8858:18;;;8851:62;-1:-1:-1;;;8929:18:1;;;8922:36;8975:19;;18202:110:0::1;8598:402:1::0;18202:110:0::1;18349:6;::::0;;18328:38:::1;::::0;-1:-1:-1;;;;;18328:38:0;;::::1;::::0;18349:6;::::1;::::0;18328:38:::1;::::0;::::1;18377:6;:17:::0;;-1:-1:-1;;;;;;18377:17:0::1;-1:-1:-1::0;;;;;18377:17:0;;;::::1;::::0;;;::::1;::::0;;18121:281::o;28188:491::-;17388:6;;-1:-1:-1;;;;;17388:6:0;929:10;17388:22;17380:67;;;;-1:-1:-1;;;17380:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28269:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28261:67;;;::::0;-1:-1:-1;;;28261:67:0;;9207:2:1;28261:67:0::1;::::0;::::1;9189:21:1::0;9246:2;9226:18;;;9219:30;9285:34;9265:18;;;9258:62;-1:-1:-1;;;9336:18:1;;;9329:32;9378:19;;28261:67:0::1;9005:398:1::0;28261:67:0::1;28344:9;28339:333;28363:9;:16:::0;28359:20;::::1;28339:333;;;28421:7;-1:-1:-1::0;;;;;28405:23:0::1;:9;28415:1;28405:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28405:12:0::1;:23:::0;28401:260:::1;;28464:9;28474:16:::0;;:20:::1;::::0;28493:1:::1;::::0;28474:20:::1;:::i;:::-;28464:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;28449:9:::1;:12:::0;;-1:-1:-1;;;;;28464:31:0;;::::1;::::0;28459:1;;28449:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28449:46:0::1;-1:-1:-1::0;;;;;28449:46:0;;::::1;;::::0;;28514:22;;::::1;::::0;;:13:::1;:22:::0;;;;;;:26;;;28559:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28559:28:0::1;::::0;;28606:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28606:15:0;;;;;-1:-1:-1;;;;;;28606:15:0::1;::::0;;;;;28339:333:::1;28188:491:::0;:::o;28401:260::-:1;28381:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28339:333;;;;28188:491:::0;:::o;28687:371::-;-1:-1:-1;;;;;28814:19:0;;28806:68;;;;-1:-1:-1;;;28806:68:0;;10147:2:1;28806:68:0;;;10129:21:1;10186:2;10166:18;;;10159:30;10225:34;10205:18;;;10198:62;-1:-1:-1;;;10276:18:1;;;10269:34;10320:19;;28806:68:0;9945:400:1;28806:68:0;-1:-1:-1;;;;;28893:21:0;;28885:68;;;;-1:-1:-1;;;28885:68:0;;10552:2:1;28885:68:0;;;10534:21:1;10591:2;10571:18;;;10564:30;10630:34;10610:18;;;10603:62;-1:-1:-1;;;10681:18:1;;;10674:32;10723:19;;28885:68:0;10350:398:1;28885:68:0;-1:-1:-1;;;;;28966:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29018:32;;1361:25:1;;;29018:32:0;;1334:18:1;29018:32:0;;;;;;;28687:371;;;:::o;29066:3595::-;-1:-1:-1;;;;;29197:20:0;;29189:70;;;;-1:-1:-1;;;29189:70:0;;10955:2:1;29189:70:0;;;10937:21:1;10994:2;10974:18;;;10967:30;11033:34;11013:18;;;11006:62;-1:-1:-1;;;11084:18:1;;;11077:35;11129:19;;29189:70:0;10753:401:1;29189:70:0;29287:1;29278:6;:10;29270:64;;;;-1:-1:-1;;;29270:64:0;;11361:2:1;29270:64:0;;;11343:21:1;11400:2;11380:18;;;11373:30;11439:34;11419:18;;;11412:62;-1:-1:-1;;;11490:18:1;;;11483:39;11539:19;;29270:64:0;11159:405:1;29270:64:0;29363:11;;29353:6;:21;;:43;;;-1:-1:-1;;;;;;29378:18:0;;;;;;:10;:18;;;;;;;;29353:43;29345:78;;;;-1:-1:-1;;;29345:78:0;;11771:2:1;29345:78:0;;;11753:21:1;11810:2;11790:18;;;11783:30;-1:-1:-1;;;11829:18:1;;;11822:52;11891:18;;29345:78:0;11569:346:1;29345:78:0;-1:-1:-1;;;;;29443:18:0;;;;;;:10;:18;;;;;;;;29442:19;29434:53;;;;-1:-1:-1;;;29434:53:0;;12122:2:1;29434:53:0;;;12104:21:1;12161:2;12141:18;;;12134:30;-1:-1:-1;;;12180:18:1;;;12173:52;12242:18;;29434:53:0;11920:346:1;29434:53:0;29506:13;;;;;;;29498:43;;;;-1:-1:-1;;;29498:43:0;;12473:2:1;29498:43:0;;;12455:21:1;12512:2;12492:18;;;12485:30;-1:-1:-1;;;12531:18:1;;;12524:48;12589:18;;29498:43:0;12271:342:1;29498:43:0;29597:6;29572:22;29629:20;:18;:20::i;:::-;29614:35;;29670:20;29691:24;29709:4;29691:9;:24::i;:::-;29769:19;;29813:16;;29670:45;;-1:-1:-1;29753:35:0;;;;29813:16;;;;;29812:17;:40;;;;;29833:19;29812:40;:67;;;;-1:-1:-1;29866:13:0;;-1:-1:-1;;;;;29856:23:0;;;29866:13;;29856:23;;29812:67;:92;;;;-1:-1:-1;29883:21:0;;;;;;;29812:92;29809:152;;;29921:28;29936:12;29921:14;:28::i;:::-;30005:13;;-1:-1:-1;;;;;30005:13:0;;;29995:23;;;;29992:1188;;-1:-1:-1;;;;;30063:21:0;;;;;;:10;:21;;;;;;;;30062:22;:52;;;;-1:-1:-1;;;;;;30088:26:0;;30109:4;30088:26;;30062:52;:80;;;;-1:-1:-1;;;;;;30119:23:0;;;;30062:80;:113;;;;-1:-1:-1;30159:16:0;;-1:-1:-1;;;;;30146:29:0;;;30159:16;;30146:29;;30062:113;30059:304;;;30191:18;30212:20;30222:9;30212;:20::i;:::-;30280:15;;30191:41;;-1:-1:-1;30256:19:0;30269:6;30191:41;30256:19;:::i;:::-;30255:40;;30247:114;;;;-1:-1:-1;;;30247:114:0;;12820:2:1;30247:114:0;;;12802:21:1;12859:2;12839:18;;;12832:30;12898:34;12878:18;;;12871:62;12969:32;12949:18;;;12942:60;13019:19;;30247:114:0;12618:426:1;30247:114:0;30176:187;30059:304;-1:-1:-1;;;;;30403:20:0;;;;;;:9;:20;;;;;;;;30402:21;:42;;;;-1:-1:-1;30428:16:0;;;;;;;30427:17;30402:42;30399:123;;;30477:33;30491:6;30498;30505:4;30477:13;:33::i;:::-;30460:50;;30399:123;30602:48;30633:16;:6;30644:4;30633:10;:16::i;:::-;-1:-1:-1;;;;;30602:26:0;;;;;;:18;:26;;;;;;;:30;:48::i;:::-;-1:-1:-1;;;;;30573:26:0;;;;;;:18;:26;;;;;:77;30693:59;30727:24;:14;30746:4;30727:18;:24::i;:::-;-1:-1:-1;;;;;30693:29:0;;;;;;:18;:29;;;;;;;:33;:59::i;:::-;-1:-1:-1;;;;;30661:29:0;;;;;;;:18;:29;;;;;;;;:91;;;;30841:19;;;;;:11;:19;;;;;;;30837:109;;;-1:-1:-1;;;;;30901:21:0;;;;;;:13;:21;;;;;;:33;;30927:6;30901:25;:33::i;:::-;-1:-1:-1;;;;;30877:21:0;;;;;;:13;:21;;;;;:57;30837:109;-1:-1:-1;;;;;30960:22:0;;;;;;:11;:22;;;;;;;;30956:126;;;-1:-1:-1;;;;;31026:24:0;;;;;;:13;:24;;;;;;:44;;31055:14;31026:28;:44::i;:::-;-1:-1:-1;;;;;30999:24:0;;;;;;:13;:24;;;;;:71;30956:126;31116:9;-1:-1:-1;;;;;31099:43:0;31108:6;-1:-1:-1;;;;;31099:43:0;-1:-1:-1;;;;;;;;;;;31127:14:0;31099:43;;;;1361:25:1;;1349:2;1334:18;;1215:177;31099:43:0;;;;;;;;31163:7;;;;29066:3595;;;:::o;29992:1188::-;31214:13;;-1:-1:-1;;;;;31214:13:0;;;31201:26;;;;31198:822;;-1:-1:-1;;;;;31244:17:0;;;;;;:9;:17;;;;;;;;31243:18;:39;;;;-1:-1:-1;31266:16:0;;;;;;;31265:17;31243:39;31240:122;;;31315:34;31330:6;31337;31344:4;31315:14;:34::i;5765:226::-;5885:7;5921:12;5913:6;;;;5905:29;;;;-1:-1:-1;;;5905:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5945:9:0;5957:5;5961:1;5957;:5;:::i;:::-;5945:17;5765:226;-1:-1:-1;;;;;5765:226:0:o;37003:808::-;37102:16;;37151:11;;37055:7;;37102:16;37055:7;37173:458;37197:9;:16;37193:20;;37173:458;;;37292:16;37257:18;:32;37276:9;37286:1;37276:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37276:12:0;37257:32;;;;;;;;;;;;;:51;;:113;;;37359:11;37329:13;:27;37343:9;37353:1;37343:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37343:12:0;37329:27;;;;;;;;;;;;;:41;37257:113;37235:191;;;37414:11;;37393:16;;:33;;:20;:33::i;:::-;37386:40;;;;;37003:808;:::o;37235:191::-;37460:86;37499:18;:32;37518:9;37528:1;37518:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37518:12:0;37499:32;;;;;;;;;;;;;37460:16;;:20;:86::i;:::-;37441:105;;37575:44;37591:13;:27;37605:9;37615:1;37605:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37605:12:0;37591:27;;;;;;;;;;;;;37575:11;;:15;:44::i;:::-;37561:58;-1:-1:-1;37215:3:0;;;;:::i;:::-;;;;37173:458;;;-1:-1:-1;37685:11:0;;37664:16;;:33;;:20;:33::i;:::-;37645:16;:52;37641:111;;;37740:11;;37719:16;;:33;;:20;:33::i;:::-;37712:40;;;;37003:808;:::o;37641:111::-;37770:33;:16;37791:11;7197:132;7255:7;7282:39;7286:1;7289;7282:39;;;;;;;;;;;;;;;;;:3;:39::i;4862:181::-;4920:7;;4952:5;4956:1;4952;:5;:::i;:::-;4940:17;;4981:1;4976;:6;;4968:46;;;;-1:-1:-1;;;4968:46:0;;13251:2:1;4968:46:0;;;13233:21:1;13290:2;13270:18;;;13263:30;13329:29;13309:18;;;13302:57;13376:18;;4968:46:0;13049:351:1;6250:471:0;6308:7;6553:1;6558;6553:6;6549:47;;-1:-1:-1;6583:1:0;6576:8;;6549:47;6608:9;6620:5;6624:1;6620;:5;:::i;:::-;6608:17;-1:-1:-1;6653:1:0;6644:5;6648:1;6608:17;6644:5;:::i;:::-;:10;6636:56;;;;-1:-1:-1;;;6636:56:0;;14002:2:1;6636:56:0;;;13984:21:1;14041:2;14021:18;;;14014:30;14080:34;14060:18;;;14053:62;-1:-1:-1;;;14131:18:1;;;14124:31;14172:19;;6636:56:0;13800:397:1;5326:136:0;5384:7;5411:43;5415:1;5418;5411:43;;;;;;;;;;;;;;;;;:3;:43::i;37837:1097::-;22772:16;:23;;-1:-1:-1;;22772:23:0;;;;;37949:11:::1;::::0;37926:34;::::1;37923:101;;;-1:-1:-1::0;38000:11:0::1;::::0;37923:101:::1;38085:12;38100:27;:20:::0;38125:1:::1;38100:24;:27::i;:::-;38085:42:::0;-1:-1:-1;38138:17:0::1;38158:30;:20:::0;38085:42;38158:24:::1;:30::i;:::-;38138:50:::0;-1:-1:-1;38491:21:0::1;38557:22;38574:4:::0;38557:16:::1;:22::i;:::-;38710:18;38731:41;:21;38757:14:::0;38731:25:::1;:41::i;:::-;38710:62;;38822:35;38835:9;38846:10;38822:12;:35::i;:::-;38883:43;::::0;;14404:25:1;;;14460:2;14445:18;;14438:34;;;14488:18;;;14481:34;;;38883:43:0::1;::::0;14392:2:1;14377:18;38883:43:0::1;;;;;;;-1:-1:-1::0;;22818:16:0;:24;;-1:-1:-1;;22818:24:0;;;-1:-1:-1;;;37837:1097:0:o;32673:2135::-;32859:7;;32760;;32805:6;;32859:12;32856:290;;32887:14;32904:46;32933:11;;32947:1;32933:15;;;;:::i;:::-;32928:21;;:2;:21;:::i;:::-;32915:7;;32904:19;;:6;;:10;:19::i;:46::-;32887:63;-1:-1:-1;32982:26:0;:14;32887:63;32982:18;:26::i;:::-;32965:43;-1:-1:-1;33042:38:0;33063:16;:6;33074:4;33063:10;:16::i;:::-;33042;;;:20;:38::i;:::-;33023:16;:57;33110:12;;:24;;33127:6;33110:16;:24::i;:::-;33095:12;:39;-1:-1:-1;32856:290:0;33192:13;;:18;33189:550;;33226:20;33249:52;33284:11;;33298:1;33284:15;;;;:::i;:::-;33279:21;;:2;:21;:::i;:::-;33260:13;;33249:25;;:6;;:10;:25::i;:52::-;33226:75;-1:-1:-1;33333:32:0;:14;33226:75;33333:18;:32::i;:::-;33316:49;-1:-1:-1;33419:64:0;33460:22;:12;33477:4;33460:16;:22::i;:::-;33438:16;;-1:-1:-1;;;;;33438:16:0;33419:36;;;;:18;:36;;;;;;;:40;:64::i;:::-;33399:16;;;-1:-1:-1;;;;;33399:16:0;;;33380:36;;;;:18;:36;;;;;;;;:103;;;;33513:16;;;;;33501:29;;:11;:29;;;;;;;33498:151;;;33598:16;;-1:-1:-1;;;;;33598:16:0;33584:31;;;;:13;:31;;;;;;:49;;33620:12;33584:35;:49::i;:::-;33564:16;;-1:-1:-1;;;;;33564:16:0;33550:31;;;;:13;:31;;;;;:83;33498:151;33697:16;;33680:47;;1361:25:1;;;-1:-1:-1;;;;;33697:16:0;;;;33680:47;;;-1:-1:-1;;;;;;;;;;;33680:47:0;1349:2:1;1334:18;33680:47:0;;;;;;;33211:528;33189:550;33762:13;;:18;33759:532;;33796:20;33819:52;33854:11;;33868:1;33854:15;;;;:::i;:::-;33849:21;;:2;:21;:::i;:::-;33830:13;;33819:25;;:6;;:10;:25::i;:52::-;33796:75;-1:-1:-1;33903:32:0;:14;33796:75;33903:18;:32::i;:::-;33886:49;-1:-1:-1;33986:61:0;34024:22;:12;34041:4;34024:16;:22::i;:::-;34013:4;33986:33;;;;:18;:33;;;;;;;:37;:61::i;:::-;33977:4;33950:33;;;;:18;:33;;;;;;;;:97;;;;34065:11;:26;;;;;;34062:142;;;34164:4;34142:28;;;;:13;:28;;;;;;:46;;34175:12;34142:32;:46::i;:::-;34133:4;34111:28;;;;:13;:28;;;;;:77;34062:142;34235:44;;1361:25:1;;;34260:4:0;;-1:-1:-1;;;;;34235:44:0;;;-1:-1:-1;;;;;;;;;;;34235:44:0;1349:2:1;1334:18;34235:44:0;;;;;;;33781:510;33759:532;34313:8;;:13;34310:443;;34342:15;34360:47;34390:11;;34404:1;34390:15;;;;:::i;:::-;34385:21;;:2;:21;:::i;:::-;34371:8;;34360:20;;:6;;:10;:20::i;:47::-;34342:65;-1:-1:-1;34439:27:0;:14;34342:65;34439:18;:27::i;:::-;34422:44;-1:-1:-1;34508:47:0;34537:17;:7;34549:4;34537:11;:17::i;:::-;34527:4;;-1:-1:-1;;;;;34527:4:0;34508:24;;;;:18;:24;;;;;;;:28;:47::i;:::-;34500:4;;;-1:-1:-1;;;;;34500:4:0;;;34481:24;;;;:18;:24;;;;;;;;:74;;;;34585:4;;;;;34573:17;;:11;:17;;;;;;;34570:110;;;34646:4;;-1:-1:-1;;;;;34646:4:0;34632:19;;;;:13;:19;;;;;;:32;;34656:7;34632:23;:32::i;:::-;34624:4;;-1:-1:-1;;;;;34624:4:0;34610:19;;;;:13;:19;;;;;:54;34570:110;34728:4;;34711:30;;1361:25:1;;;-1:-1:-1;;;;;34728:4:0;;;;34711:30;;;-1:-1:-1;;;;;;;;;;;34711:30:0;1349:2:1;1334:18;34711:30:0;;;;;;;34327:426;34310:443;34786:14;32673:2135;-1:-1:-1;;;;32673:2135:0:o;34826:2169::-;35012:11;;34914:7;;34959:6;;35012:16;35009:298;;35044:14;35061:50;35094:11;;35108:1;35094:15;;;;:::i;:::-;35089:21;;:2;:21;:::i;:::-;35072:11;;35061:23;;:6;;:10;:23::i;:50::-;35044:67;-1:-1:-1;35143:26:0;:14;35044:67;35143:18;:26::i;:::-;35126:43;-1:-1:-1;35203:38:0;35224:16;:6;35235:4;35224:10;:16::i;35203:38::-;35184:16;:57;35271:12;;:24;;35288:6;35271:16;:24::i;:::-;35256:12;:39;-1:-1:-1;35009:298:0;35353:17;;:22;35350:558;;35391:20;35414:56;35453:11;;35467:1;35453:15;;;;:::i;:::-;35448:21;;:2;:21;:::i;:::-;35425:17;;35414:29;;:6;;:10;:29::i;:56::-;35391:79;-1:-1:-1;35502:32:0;:14;35391:79;35502:18;:32::i;:::-;35485:49;-1:-1:-1;35588:64:0;35629:22;:12;35646:4;35629:16;:22::i;35588:64::-;35568:16;;;-1:-1:-1;;;;;35568:16:0;;;35549:36;;;;:18;:36;;;;;;;;:103;;;;35682:16;;;;;35670:29;;:11;:29;;;;;;;35667:151;;;35767:16;;-1:-1:-1;;;;;35767:16:0;35753:31;;;;:13;:31;;;;;;:49;;35789:12;35753:35;:49::i;:::-;35733:16;;-1:-1:-1;;;;;35733:16:0;35719:31;;;;:13;:31;;;;;:83;35667:151;35866:16;;35849:47;;1361:25:1;;;-1:-1:-1;;;;;35866:16:0;;;;35849:47;;;-1:-1:-1;;;;;;;;;;;35849:47:0;1349:2:1;1334:18;35849:47:0;;;;;;;35376:532;35350:558;35931:18;;:23;35928:542;;35970:20;35993:57;36033:11;;36047:1;36033:15;;;;:::i;:::-;36028:21;;:2;:21;:::i;:::-;36004:18;;35993:30;;:6;;:10;:30::i;:57::-;35970:80;-1:-1:-1;36082:32:0;:14;35970:80;36082:18;:32::i;:::-;36065:49;-1:-1:-1;36165:61:0;36203:22;:12;36220:4;36203:16;:22::i;36165:61::-;36156:4;36129:33;;;;:18;:33;;;;;;;;:97;;;;36244:11;:26;;;;;;36241:142;;;36343:4;36321:28;;;;:13;:28;;;;;;:46;;36354:12;36321:32;:46::i;:::-;36312:4;36290:28;;;;:13;:28;;;;;:77;36241:142;36414:44;;1361:25:1;;;36439:4:0;;-1:-1:-1;;;;;36414:44:0;;;-1:-1:-1;;;;;;;;;;;36414:44:0;1349:2:1;1334:18;36414:44:0;;;;;;;35955:515;35928:542;36492:12;;:17;36489:451;;36525:15;36543:51;36577:11;;36591:1;36577:15;;;;:::i;:::-;36572:21;;:2;:21;:::i;:::-;36554:12;;36543:24;;:6;;:10;:24::i;7825:312::-;7945:7;7980:12;7973:5;7965:28;;;;-1:-1:-1;;;7965:28:0;;;;;;;;:::i;:::-;-1:-1:-1;8004:9:0;8016:5;8020:1;8016;:5;:::i;39494:589::-;39644:16;;;39658:1;39644:16;;;;;;;;39620:21;;39644:16;;;;;;;;;;-1:-1:-1;39644:16:0;39620:40;;39689:4;39671;39676:1;39671:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39671:23:0;;;:7;;;;;;;;;;:23;;;;39715:15;;:22;;;-1:-1:-1;;;39715:22:0;;;;:15;;;;;:20;;:22;;;;;39671:7;;39715:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39705:4;39710:1;39705:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39705:32:0;;;:7;;;;;;;;;:32;39782:15;;39750:62;;39767:4;;39782:15;39800:11;39750:8;:62::i;:::-;39851:15;;:224;;-1:-1:-1;;;39851:224:0;;-1:-1:-1;;;;;39851:15:0;;;;:66;;:224;;39932:11;;39851:15;;40002:4;;40029;;40049:15;;39851:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39549:534;39494:589;:::o;38945:519::-;39125:15;;39093:62;;39110:4;;-1:-1:-1;;;;;39125:15:0;39143:11;39093:8;:62::i;:::-;39198:15;;:258;;-1:-1:-1;;;39198:258:0;;39270:4;39198:258;;;16240:34:1;;;16290:18;;;16283:34;;;39198:15:0;16333:18:1;;;16326:34;;;16376:18;;;16369:34;16419:19;;;16412:44;39430:15:0;16472:19:1;;;16465:35;-1:-1:-1;;;;;39198:15:0;;;;:31;;39237:9;;16174:19:1;;39198:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38945:519;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1631:456::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1832:9;1819:23;1851:31;1876:5;1851:31;:::i;:::-;1901:5;-1:-1:-1;1958:2:1;1943:18;;1930:32;1971:33;1930:32;1971:33;:::i;:::-;1631:456;;2023:7;;-1:-1:-1;;;2077:2:1;2062:18;;;;2049:32;;1631:456::o;2092:180::-;2151:6;2204:2;2192:9;2183:7;2179:23;2175:32;2172:52;;;2220:1;2217;2210:12;2172:52;-1:-1:-1;2243:23:1;;2092:180;-1:-1:-1;2092:180:1:o;2466:160::-;2531:20;;2587:13;;2580:21;2570:32;;2560:60;;2616:1;2613;2606:12;2560:60;2466:160;;;:::o;2631:315::-;2696:6;2704;2757:2;2745:9;2736:7;2732:23;2728:32;2725:52;;;2773:1;2770;2763:12;2725:52;2812:9;2799:23;2831:31;2856:5;2831:31;:::i;:::-;2881:5;-1:-1:-1;2905:35:1;2936:2;2921:18;;2905:35;:::i;:::-;2895:45;;2631:315;;;;;:::o;2951:248::-;3016:6;3024;3077:2;3065:9;3056:7;3052:23;3048:32;3045:52;;;3093:1;3090;3083:12;3045:52;3129:9;3116:23;3106:33;;3158:35;3189:2;3178:9;3174:18;3158:35;:::i;3412:247::-;3471:6;3524:2;3512:9;3503:7;3499:23;3495:32;3492:52;;;3540:1;3537;3530:12;3492:52;3579:9;3566:23;3598:31;3623:5;3598:31;:::i;3664:385::-;3750:6;3758;3766;3774;3827:3;3815:9;3806:7;3802:23;3798:33;3795:53;;;3844:1;3841;3834:12;3795:53;-1:-1:-1;;3867:23:1;;;3937:2;3922:18;;3909:32;;-1:-1:-1;3988:2:1;3973:18;;3960:32;;4039:2;4024:18;4011:32;;-1:-1:-1;3664:385:1;-1:-1:-1;3664:385:1:o;4054:180::-;4110:6;4163:2;4151:9;4142:7;4138:23;4134:32;4131:52;;;4179:1;4176;4169:12;4131:52;4202:26;4218:9;4202:26;:::i;4239:388::-;4307:6;4315;4368:2;4356:9;4347:7;4343:23;4339:32;4336:52;;;4384:1;4381;4374:12;4336:52;4423:9;4410:23;4442:31;4467:5;4442:31;:::i;:::-;4492:5;-1:-1:-1;4549:2:1;4534:18;;4521:32;4562:33;4521:32;4562:33;:::i;:::-;4614:7;4604:17;;;4239:388;;;;;:::o;4632:380::-;4711:1;4707:12;;;;4754;;;4775:61;;4829:4;4821:6;4817:17;4807:27;;4775:61;4882:2;4874:6;4871:14;4851:18;4848:38;4845:161;;4928:10;4923:3;4919:20;4916:1;4909:31;4963:4;4960:1;4953:15;4991:4;4988:1;4981:15;4845:161;;4632:380;;;:::o;5017:356::-;5219:2;5201:21;;;5238:18;;;5231:30;5297:34;5292:2;5277:18;;5270:62;5364:2;5349:18;;5017:356::o;6149:127::-;6210:10;6205:3;6201:20;6198:1;6191:31;6241:4;6238:1;6231:15;6265:4;6262:1;6255:15;6281:422;6370:1;6413:5;6370:1;6427:270;6448:7;6438:8;6435:21;6427:270;;;6507:4;6503:1;6499:6;6495:17;6489:4;6486:27;6483:53;;;6516:18;;:::i;:::-;6566:7;6556:8;6552:22;6549:55;;;6586:16;;;;6549:55;6665:22;;;;6625:15;;;;6427:270;;;6431:3;6281:422;;;;;:::o;6708:806::-;6757:5;6787:8;6777:80;;-1:-1:-1;6828:1:1;6842:5;;6777:80;6876:4;6866:76;;-1:-1:-1;6913:1:1;6927:5;;6866:76;6958:4;6976:1;6971:59;;;;7044:1;7039:130;;;;6951:218;;6971:59;7001:1;6992:10;;7015:5;;;7039:130;7076:3;7066:8;7063:17;7060:43;;;7083:18;;:::i;:::-;-1:-1:-1;;7139:1:1;7125:16;;7154:5;;6951:218;;7253:2;7243:8;7240:16;7234:3;7228:4;7225:13;7221:36;7215:2;7205:8;7202:16;7197:2;7191:4;7188:12;7184:35;7181:77;7178:159;;;-1:-1:-1;7290:19:1;;;7322:5;;7178:159;7369:34;7394:8;7388:4;7369:34;:::i;:::-;7439:6;7435:1;7431:6;7427:19;7418:7;7415:32;7412:58;;;7450:18;;:::i;:::-;7488:20;;6708:806;-1:-1:-1;;;6708:806:1:o;7519:131::-;7579:5;7608:36;7635:8;7629:4;7608:36;:::i;7655:125::-;7720:9;;;7741:10;;;7738:36;;;7754:18;;:::i;9408:127::-;9469:10;9464:3;9460:20;9457:1;9450:31;9500:4;9497:1;9490:15;9524:4;9521:1;9514:15;9540:128;9607:9;;;9628:11;;;9625:37;;;9642:18;;:::i;9673:127::-;9734:10;9729:3;9725:20;9722:1;9715:31;9765:4;9762:1;9755:15;9789:4;9786:1;9779:15;9805:135;9844:3;9865:17;;;9862:43;;9885:18;;:::i;:::-;-1:-1:-1;9932:1:1;9921:13;;9805:135::o;13405:168::-;13478:9;;;13509;;13526:15;;;13520:22;;13506:37;13496:71;;13547:18;;:::i;13578:217::-;13618:1;13644;13634:132;;13688:10;13683:3;13679:20;13676:1;13669:31;13723:4;13720:1;13713:15;13751:4;13748:1;13741:15;13634:132;-1:-1:-1;13780:9:1;;13578:217::o;14658:251::-;14728:6;14781:2;14769:9;14760:7;14756:23;14752:32;14749:52;;;14797:1;14794;14787:12;14749:52;14829:9;14823:16;14848:31;14873:5;14848:31;:::i;14914:980::-;15176:4;15224:3;15213:9;15209:19;15255:6;15244:9;15237:25;15281:2;15319:6;15314:2;15303:9;15299:18;15292:34;15362:3;15357:2;15346:9;15342:18;15335:31;15386:6;15421;15415:13;15452:6;15444;15437:22;15490:3;15479:9;15475:19;15468:26;;15529:2;15521:6;15517:15;15503:29;;15550:1;15560:195;15574:6;15571:1;15568:13;15560:195;;;15639:13;;-1:-1:-1;;;;;15635:39:1;15623:52;;15730:15;;;;15695:12;;;;15671:1;15589:9;15560:195;;;-1:-1:-1;;;;;;;15811:32:1;;;;15806:2;15791:18;;15784:60;-1:-1:-1;;;15875:3:1;15860:19;15853:35;15772:3;14914:980;-1:-1:-1;;;14914:980:1:o;16511:306::-;16599:6;16607;16615;16668:2;16656:9;16647:7;16643:23;16639:32;16636:52;;;16684:1;16681;16674:12;16636:52;16713:9;16707:16;16697:26;;16763:2;16752:9;16748:18;16742:25;16732:35;;16807:2;16796:9;16792:18;16786:25;16776:35;;16511:306;;;;;:::o

Swarm Source

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