ETH Price: $3,403.73 (+1.57%)

Token

Gwaihir (GWAI)
 

Overview

Max Total Supply

698,698,698,698,698 GWAI

Holders

58

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
73,070,292,463,656.336365266165618828 GWAI

Value
$0.00
0x8b27cd7b03f285b32186d1f6b114e4333e4fb181
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:
TheWindLord

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-20
*/

pragma solidity ^0.8.6;

// Gwaihir is a DEX & DAO platform with token locking service and OTC market features for QOM. All On QOM. All for birds.
// As the native token of Gwaihir platform, $GWAI is equipped with a unique mechanism to support QOM, CAW, and GWAI holders.



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

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


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

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

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

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
}

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

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

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

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) 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);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

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

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


contract TheWindLord is ERC20, Ownable {
   
    mapping(address => bool) public dexRouters;
    mapping(address => bool) public automatedMarketMakerPairs;

    IUniswapV2Router02 public defaultDexRouter;

    address public defaultPair;
    address public treasuryWallet;
    address public constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address public constant qom = 0xa71d0588EAf47f12B13cF8eC750430d21DF04974;
    address public constant caw = 0xf3b9569F82B18aEf890De263B84189bd33EBe452;



    bool private isSwappingFees;


    uint256 private _startSupply = 698_698_698_698_698 * (10**18);
    uint256 private swapTokensAtAmount = 300 * (10**18);
    uint8  private constant _decimals = 18;

    // fees (from a total of 10000)
    uint256 public buyFeesCollected = 0;
    uint256 public buyCAWFee = 50;
    uint256 public buyQOMFee = 50;
    uint256 public buyTotalFees = buyCAWFee + buyQOMFee;

    uint256 public sellFeesCollected = 0;
    uint256 public sellCAWFee = 50;
    uint256 public sellQOMFee = 50;
    uint256 public sellTotalFees = sellCAWFee + sellQOMFee;


    uint256 public buyBackAndFeesStartTime;




    event UpdateDefaultDexRouter(address indexed newAddress, address indexed oldAddress);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TreasuryWalletUpdated(address indexed newTreasuryWallet, address indexed oldTreasuryWallet);
    event LogbuyBackQOM(uint256 amount);
    event LogbuyBackCAW(uint256 amount);
    


    constructor(
        address _routerAddress,
        address _treasuryWallet
    ) ERC20("Gwaihir", "GWAI") {
        IUniswapV2Router02 _dexRouter = IUniswapV2Router02(_routerAddress);
        
        treasuryWallet = _treasuryWallet;

        buyBackAndFeesStartTime = block.timestamp + 15 days;
        

        defaultDexRouter = _dexRouter;
        dexRouters[_routerAddress] = true;
        defaultPair = IUniswapV2Factory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        
        _setAutomatedMarketMakerPair(defaultPair, true);
        //_mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again
        _mint(owner(), _startSupply);
    }


    receive() external payable {}

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

    function addNewRouter(address _router, bool makeDefault) external onlyOwner {
        dexRouters[_router] = true;

        if (makeDefault) {
            emit UpdateDefaultDexRouter(_router, address(defaultDexRouter));
            defaultDexRouter = IUniswapV2Router02(_router);
            defaultPair = IUniswapV2Factory(defaultDexRouter.factory()).createPair(address(this), defaultDexRouter.WETH());
            _setAutomatedMarketMakerPair(defaultPair, true);
        }
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(
            value || pair != defaultPair,
            "The default pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );

        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }


    function updateTreasuryWallet(address newTreasuryWallet) external onlyOwner {
        require(newTreasuryWallet != treasuryWallet, "The treasury wallet is already this address");
        emit TreasuryWalletUpdated(newTreasuryWallet, treasuryWallet);
        treasuryWallet = newTreasuryWallet;
    }


    function updateSwapTokensAtAmount(uint256 _swapTokensAtAmount) external onlyOwner {
        require(_swapTokensAtAmount > 0, "Amount should be higher then 0");
        swapTokensAtAmount = _swapTokensAtAmount;
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 senderBalance = balanceOf(from);
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        // take fee
        amount = collectFees(from, to, amount);

        // swap fees before transfer has happened and after dividend balances are done
        swapFeesIfAmountIsReached(from, to);

        super._transfer(from, to, amount);
    }

    function collectFees(
        address from,
        address to,
        uint256 amount
    ) private returns (uint256) {
        if (!isSwappingFees && block.timestamp >= buyBackAndFeesStartTime && from != treasuryWallet &&
            to != treasuryWallet) {
            uint256 fees;
            if (automatedMarketMakerPairs[from]) {
                fees = (amount * buyTotalFees) / 10000;
                buyFeesCollected += fees;
            } else if (automatedMarketMakerPairs[to]) {
                fees = (amount * sellTotalFees) / 10000;
                sellFeesCollected += fees;
            }

            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }
        return amount;
    }

    function swapFeesIfAmountIsReached(address from, address to) private {
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (
            contractTokenBalance >= swapTokensAtAmount &&
            !isSwappingFees &&
            !automatedMarketMakerPairs[from] && // do not swap fees on buys
            from != treasuryWallet &&
            to != treasuryWallet
        ) {
            isSwappingFees = true;

            buyFeesCollected = (contractTokenBalance / (buyFeesCollected + sellFeesCollected)) * buyFeesCollected;
            sellFeesCollected = contractTokenBalance - buyFeesCollected;

            uint256 CAWTokens = (buyFeesCollected * buyCAWFee) / buyTotalFees;
            CAWTokens += (sellFeesCollected * sellCAWFee) / sellTotalFees;
            if (CAWTokens > 0) buyBackCAW(CAWTokens);
            

            uint256 QOMTokens = (buyFeesCollected * buyQOMFee) / buyTotalFees;
            QOMTokens = (sellFeesCollected * sellQOMFee) / sellTotalFees;
            if (QOMTokens > 0) buyBackQOM(QOMTokens);
          

            buyFeesCollected = 0;
            sellFeesCollected = 0;

            isSwappingFees = false;
        }
    }

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


    function buyBackCAW(uint256 amount) private{
        _approve(address(this), address(defaultDexRouter), amount);
        swapTokensForTokens(caw, amount);
        emit LogbuyBackCAW(amount);
    }

    function buyBackQOM(uint256 amount) private{
        _approve(address(this), address(defaultDexRouter), amount);
        swapTokensForTokens(qom, amount);
        emit LogbuyBackQOM(amount);
    }

    function swapTokensForTokens(address _token, uint256 amount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = weth;
        path[2] = _token;

        // make the swap
        defaultDexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            amount,
            0, // accept any amount of Tokens
            path,
            treasuryWallet,
            block.timestamp 
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"address","name":"_treasuryWallet","type":"address"}],"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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogbuyBackCAW","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogbuyBackQOM","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newTreasuryWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldTreasuryWallet","type":"address"}],"name":"TreasuryWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDefaultDexRouter","type":"event"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"bool","name":"makeDefault","type":"bool"}],"name":"addNewRouter","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackAndFeesStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCAWFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyQOMFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"caw","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultDexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dexRouters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qom","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCAWFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeesCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellQOMFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTokensAtAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526d2272d141946029bf0a0370e80000600d55681043561a8829300000600e556000600f5560326010556032601155601154601054620000449190620008c0565b601255600060135560326014556032601555601554601454620000689190620008c0565b6016553480156200007857600080fd5b50604051620046f3380380620046f383398181016040528101906200009e919062000987565b6040518060400160405280600781526020017f47776169686972000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4757414900000000000000000000000000000000000000000000000000000000815250816003908051906020019062000122929190620007d7565b5080600490805190602001906200013b929190620007d7565b505050600062000150620004eb60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600082905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506213c68042620002469190620008c0565b60178190555080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000331573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003579190620009ce565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e59190620009ce565b6040518363ffffffff1660e01b81526004016200040492919062000a11565b6020604051808303816000875af115801562000424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044a9190620009ce565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004bf600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004f360201b60201c565b620004e2620004d36200062a60201b60201c565b600d546200065460201b60201c565b50505062000bec565b600033905090565b801515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000589576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005809062000ac5565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006be9062000b37565b60405180910390fd5b620006db60008383620007cd60201b60201c565b8060026000828254620006ef9190620008c0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007469190620008c0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007ad919062000b6a565b60405180910390a3620007c960008383620007d260201b60201c565b5050565b505050565b505050565b828054620007e59062000bb6565b90600052602060002090601f01602090048101928262000809576000855562000855565b82601f106200082457805160ff191683800117855562000855565b8280016001018555821562000855579182015b828111156200085457825182559160200191906001019062000837565b5b50905062000864919062000868565b5090565b5b808211156200088357600081600090555060010162000869565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008cd8262000887565b9150620008da8362000887565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000912576200091162000891565b5b828201905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200094f8262000922565b9050919050565b620009618162000942565b81146200096d57600080fd5b50565b600081519050620009818162000956565b92915050565b60008060408385031215620009a157620009a06200091d565b5b6000620009b18582860162000970565b9250506020620009c48582860162000970565b9150509250929050565b600060208284031215620009e757620009e66200091d565b5b6000620009f78482850162000970565b91505092915050565b62000a0b8162000942565b82525050565b600060408201905062000a28600083018562000a00565b62000a37602083018462000a00565b9392505050565b600082825260208201905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600062000aad60388362000a3e565b915062000aba8262000a4f565b604082019050919050565b6000602082019050818103600083015262000ae08162000a9e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000b1f601f8362000a3e565b915062000b2c8262000ae7565b602082019050919050565b6000602082019050818103600083015262000b528162000b10565b9050919050565b62000b648162000887565b82525050565b600060208201905062000b81600083018462000b59565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bcf57607f821691505b6020821081141562000be65762000be562000b87565b5b50919050565b613af78062000bfc6000396000f3fe60806040526004361061021e5760003560e01c80638da5cb5b11610123578063bec8ca58116100ab578063d578192c1161006f578063d578192c146107fc578063d85ba06314610827578063dd62ed3e14610852578063e15310601461088f578063f2fde38b146108ba57610225565b8063bec8ca5814610715578063c1c356c514610740578063c3a5dbb91461077d578063d257b34f146107a8578063d32a8f67146107d157610225565b8063a32cb4c6116100f2578063a32cb4c61461060a578063a457c2d714610633578063a9059cbb14610670578063b62496f5146106ad578063b6c52324146106ea57610225565b80638da5cb5b1461056057806395d89b411461058b578063999777aa146105b65780639a7a23d6146105e157610225565b806342966c68116101a65780636a486a8e116101755780636a486a8e1461048d57806370a08231146104b8578063715018a6146104f55780637d1f10531461050c578063809d458d1461053757610225565b806342966c68146103e35780634626402b1461040c578063485b7035146104375780635187c3a81461046257610225565b806323b872dd116101ed57806323b872dd146102e85780632f2ba8fa14610325578063313ce56714610350578063395093511461037b5780633fc8cef3146103b857610225565b806306fdde031461022a578063095ea7b31461025557806318160ddd146102925780632260d4de146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108e3565b60405161024c9190612b00565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190612bbb565b610975565b6040516102899190612c16565b60405180910390f35b34801561029e57600080fd5b506102a7610998565b6040516102b49190612c40565b60405180910390f35b3480156102c957600080fd5b506102d26109a2565b6040516102df9190612c40565b60405180910390f35b3480156102f457600080fd5b5061030f600480360381019061030a9190612c5b565b6109a8565b60405161031c9190612c16565b60405180910390f35b34801561033157600080fd5b5061033a6109d7565b6040516103479190612c40565b60405180910390f35b34801561035c57600080fd5b506103656109dd565b6040516103729190612cca565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190612bbb565b6109e6565b6040516103af9190612c16565b60405180910390f35b3480156103c457600080fd5b506103cd610a90565b6040516103da9190612cf4565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190612d0f565b610aa8565b005b34801561041857600080fd5b50610421610abc565b60405161042e9190612cf4565b60405180910390f35b34801561044357600080fd5b5061044c610ae2565b6040516104599190612c40565b60405180910390f35b34801561046e57600080fd5b50610477610ae8565b6040516104849190612cf4565b60405180910390f35b34801561049957600080fd5b506104a2610b00565b6040516104af9190612c40565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190612d3c565b610b06565b6040516104ec9190612c40565b60405180910390f35b34801561050157600080fd5b5061050a610b4e565b005b34801561051857600080fd5b50610521610ca6565b60405161052e9190612c40565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612d3c565b610cac565b005b34801561056c57600080fd5b50610575610e94565b6040516105829190612cf4565b60405180910390f35b34801561059757600080fd5b506105a0610ebe565b6040516105ad9190612b00565b60405180910390f35b3480156105c257600080fd5b506105cb610f50565b6040516105d89190612c40565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190612d95565b610f56565b005b34801561061657600080fd5b50610631600480360381019061062c9190612d95565b611094565b005b34801561063f57600080fd5b5061065a60048036038101906106559190612bbb565b611456565b6040516106679190612c16565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190612bbb565b611540565b6040516106a49190612c16565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190612d3c565b611563565b6040516106e19190612c16565b60405180910390f35b3480156106f657600080fd5b506106ff611583565b60405161070c9190612c40565b60405180910390f35b34801561072157600080fd5b5061072a61158d565b6040516107379190612cf4565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190612d3c565b6115a5565b6040516107749190612c16565b60405180910390f35b34801561078957600080fd5b506107926115c5565b60405161079f9190612c40565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190612d0f565b6115cb565b005b3480156107dd57600080fd5b506107e66116af565b6040516107f39190612cf4565b60405180910390f35b34801561080857600080fd5b506108116116d5565b60405161081e9190612e34565b60405180910390f35b34801561083357600080fd5b5061083c6116fb565b6040516108499190612c40565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190612e4f565b611701565b6040516108869190612c40565b60405180910390f35b34801561089b57600080fd5b506108a4611788565b6040516108b19190612c40565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190612d3c565b61178e565b005b6060600380546108f290612ebe565b80601f016020809104026020016040519081016040528092919081815260200182805461091e90612ebe565b801561096b5780601f106109405761010080835404028352916020019161096b565b820191906000526020600020905b81548152906001019060200180831161094e57829003601f168201915b5050505050905090565b600080610980611955565b905061098d81858561195d565b600191505092915050565b6000600254905090565b60175481565b6000806109b3611955565b90506109c0858285611b28565b6109cb858585611bb4565b60019150509392505050565b60155481565b60006012905090565b6000806109f1611955565b9050610a85818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a809190612f1f565b61195d565b600191505092915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b610ab9610ab3611955565b82611d27565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b73f3b9569f82b18aef890de263b84189bd33ebe45281565b60165481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b56611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90612fc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b610cb4611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a90612fc1565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb90613053565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb460405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ecd90612ebe565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef990612ebe565b8015610f465780601f10610f1b57610100808354040283529160200191610f46565b820191906000526020600020905b815481529060010190602001808311610f2957829003601f168201915b5050505050905090565b60135481565b610f5e611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe490612fc1565b60405180910390fd5b80806110475750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d9061310b565b60405180910390fd5b6110908282611efe565b5050565b61109c611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112290612fc1565b60405180910390fd5b6001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561145257600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f56729c2d3b35702079226f38e0417b72386db8f924b488588b56135138cf179f60405160405180910390a381600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d79190613140565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611360573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113849190613140565b6040518363ffffffff1660e01b81526004016113a192919061316d565b6020604051808303816000875af11580156113c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e49190613140565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611451600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611efe565b5b5050565b600080611461611955565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613208565b60405180910390fd5b611534828686840361195d565b60019250505092915050565b60008061154b611955565b9050611558818585611bb4565b600191505092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b6000600754905090565b73a71d0588eaf47f12b13cf8ec750430d21df0497481565b60086020528060005260406000206000915054906101000a900460ff1681565b600f5481565b6115d3611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990612fc1565b60405180910390fd5b600081116116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90613274565b60405180910390fd5b80600e8190555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b611796611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c90612fc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90613306565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c490613398565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a349061342a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b1b9190612c40565b60405180910390a3505050565b6000611b348484611701565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611bae5781811015611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613496565b60405180910390fd5b611bad848484840361195d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90613528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b906135ba565b60405180910390fd5b6000811415611cae57611ca983836000612032565b611d22565b6000611cb984610b06565b905081811015611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf59061364c565b60405180910390fd5b611d098484846122b3565b9150611d1584846124cb565b611d20848484612032565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e906136de565b60405180910390fd5b611da382600083612747565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090613770565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611e809190613790565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ee59190612c40565b60405180910390a3611ef98360008461274c565b505050565b801515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613836565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990613528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612109906135ba565b60405180910390fd5b61211d838383612747565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a9061364c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122369190612f1f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161229a9190612c40565b60405180910390a36122ad84848461274c565b50505050565b6000600c60149054906101000a900460ff161580156122d457506017544210155b801561232e5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156123885750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156124c1576000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561241c57612710601254846123f29190613856565b6123fc91906138df565b905080600f60008282546124109190612f1f565b925050819055506124a6565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a5576127106016548461247f9190613856565b61248991906138df565b9050806013600082825461249d9190612f1f565b925050819055505b5b80836124b29190613790565b92506124bf853083612032565b505b8190509392505050565b60006124d630610b06565b9050600e5481101580156124f75750600c60149054906101000a900460ff16155b801561254d5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125a75750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126015750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612742576001600c60146101000a81548160ff021916908315150217905550600f54601354600f546126349190612f1f565b8261263f91906138df565b6126499190613856565b600f81905550600f548161265d9190613790565b6013819055506000601254601054600f546126789190613856565b61268291906138df565b90506016546014546013546126979190613856565b6126a191906138df565b816126ac9190612f1f565b905060008111156126c1576126c081612751565b5b6000601254601154600f546126d69190613856565b6126e091906138df565b90506016546015546013546126f59190613856565b6126ff91906138df565b9050600081111561271457612713816127d6565b5b6000600f8190555060006013819055506000600c60146101000a81548160ff02191690831515021790555050505b505050565b505050565b505050565b61277e30600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361195d565b61279c73f3b9569f82b18aef890de263b84189bd33ebe4528261285b565b7fe9c0ae5803574bbcf58d579f228bc57083077ab77105034a0253c3fca123292e816040516127cb9190612c40565b60405180910390a150565b61280330600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361195d565b61282173a71d0588eaf47f12b13cf8ec750430d21df049748261285b565b7f6810a9b400d97dcc26877a3f90745a53ad8a128889d516020decbdef85e5f9f5816040516128509190612c40565b60405180910390a150565b6000600367ffffffffffffffff81111561287857612877613910565b5b6040519080825280602002602001820160405280156128a65781602001602082028036833780820191505090505b50905030816000815181106128be576128bd61393f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106129215761292061393f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816002815181106129705761296f61393f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612a30959493929190613a67565b600060405180830381600087803b158015612a4a57600080fd5b505af1158015612a5e573d6000803e3d6000fd5b50505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aa1578082015181840152602081019050612a86565b83811115612ab0576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ad282612a67565b612adc8185612a72565b9350612aec818560208601612a83565b612af581612ab6565b840191505092915050565b60006020820190508181036000830152612b1a8184612ac7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b5282612b27565b9050919050565b612b6281612b47565b8114612b6d57600080fd5b50565b600081359050612b7f81612b59565b92915050565b6000819050919050565b612b9881612b85565b8114612ba357600080fd5b50565b600081359050612bb581612b8f565b92915050565b60008060408385031215612bd257612bd1612b22565b5b6000612be085828601612b70565b9250506020612bf185828601612ba6565b9150509250929050565b60008115159050919050565b612c1081612bfb565b82525050565b6000602082019050612c2b6000830184612c07565b92915050565b612c3a81612b85565b82525050565b6000602082019050612c556000830184612c31565b92915050565b600080600060608486031215612c7457612c73612b22565b5b6000612c8286828701612b70565b9350506020612c9386828701612b70565b9250506040612ca486828701612ba6565b9150509250925092565b600060ff82169050919050565b612cc481612cae565b82525050565b6000602082019050612cdf6000830184612cbb565b92915050565b612cee81612b47565b82525050565b6000602082019050612d096000830184612ce5565b92915050565b600060208284031215612d2557612d24612b22565b5b6000612d3384828501612ba6565b91505092915050565b600060208284031215612d5257612d51612b22565b5b6000612d6084828501612b70565b91505092915050565b612d7281612bfb565b8114612d7d57600080fd5b50565b600081359050612d8f81612d69565b92915050565b60008060408385031215612dac57612dab612b22565b5b6000612dba85828601612b70565b9250506020612dcb85828601612d80565b9150509250929050565b6000819050919050565b6000612dfa612df5612df084612b27565b612dd5565b612b27565b9050919050565b6000612e0c82612ddf565b9050919050565b6000612e1e82612e01565b9050919050565b612e2e81612e13565b82525050565b6000602082019050612e496000830184612e25565b92915050565b60008060408385031215612e6657612e65612b22565b5b6000612e7485828601612b70565b9250506020612e8585828601612b70565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ed657607f821691505b60208210811415612eea57612ee9612e8f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f2a82612b85565b9150612f3583612b85565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f6a57612f69612ef0565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fab602083612a72565b9150612fb682612f75565b602082019050919050565b60006020820190508181036000830152612fda81612f9e565b9050919050565b7f5468652074726561737572792077616c6c657420697320616c7265616479207460008201527f6869732061646472657373000000000000000000000000000000000000000000602082015250565b600061303d602b83612a72565b915061304882612fe1565b604082019050919050565b6000602082019050818103600083015261306c81613030565b9050919050565b7f5468652064656661756c7420706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006130f5604183612a72565b915061310082613073565b606082019050919050565b60006020820190508181036000830152613124816130e8565b9050919050565b60008151905061313a81612b59565b92915050565b60006020828403121561315657613155612b22565b5b60006131648482850161312b565b91505092915050565b60006040820190506131826000830185612ce5565b61318f6020830184612ce5565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131f2602583612a72565b91506131fd82613196565b604082019050919050565b60006020820190508181036000830152613221816131e5565b9050919050565b7f416d6f756e742073686f756c6420626520686967686572207468656e20300000600082015250565b600061325e601e83612a72565b915061326982613228565b602082019050919050565b6000602082019050818103600083015261328d81613251565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132f0602683612a72565b91506132fb82613294565b604082019050919050565b6000602082019050818103600083015261331f816132e3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613382602483612a72565b915061338d82613326565b604082019050919050565b600060208201905081810360008301526133b181613375565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613414602283612a72565b915061341f826133b8565b604082019050919050565b6000602082019050818103600083015261344381613407565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613480601d83612a72565b915061348b8261344a565b602082019050919050565b600060208201905081810360008301526134af81613473565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613512602583612a72565b915061351d826134b6565b604082019050919050565b6000602082019050818103600083015261354181613505565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135a4602383612a72565b91506135af82613548565b604082019050919050565b600060208201905081810360008301526135d381613597565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613636602683612a72565b9150613641826135da565b604082019050919050565b6000602082019050818103600083015261366581613629565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c8602183612a72565b91506136d38261366c565b604082019050919050565b600060208201905081810360008301526136f7816136bb565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061375a602283612a72565b9150613765826136fe565b604082019050919050565b600060208201905081810360008301526137898161374d565b9050919050565b600061379b82612b85565b91506137a683612b85565b9250828210156137b9576137b8612ef0565b5b828203905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000613820603883612a72565b915061382b826137c4565b604082019050919050565b6000602082019050818103600083015261384f81613813565b9050919050565b600061386182612b85565b915061386c83612b85565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138a5576138a4612ef0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138ea82612b85565b91506138f583612b85565b925082613905576139046138b0565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061399361398e6139898461396e565b612dd5565b612b85565b9050919050565b6139a381613978565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139de81612b47565b82525050565b60006139f083836139d5565b60208301905092915050565b6000602082019050919050565b6000613a14826139a9565b613a1e81856139b4565b9350613a29836139c5565b8060005b83811015613a5a578151613a4188826139e4565b9750613a4c836139fc565b925050600181019050613a2d565b5085935050505092915050565b600060a082019050613a7c6000830188612c31565b613a89602083018761399a565b8181036040830152613a9b8186613a09565b9050613aaa6060830185612ce5565b613ab76080830184612c31565b969550505050505056fea26469706673582212203685391dcca2186c96b60730148dfeefaa26603a22893618226aa4e8cfb1625864736f6c634300080c00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000bb4d6667d5e514b253fd39428914a9fb73e84371

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80638da5cb5b11610123578063bec8ca58116100ab578063d578192c1161006f578063d578192c146107fc578063d85ba06314610827578063dd62ed3e14610852578063e15310601461088f578063f2fde38b146108ba57610225565b8063bec8ca5814610715578063c1c356c514610740578063c3a5dbb91461077d578063d257b34f146107a8578063d32a8f67146107d157610225565b8063a32cb4c6116100f2578063a32cb4c61461060a578063a457c2d714610633578063a9059cbb14610670578063b62496f5146106ad578063b6c52324146106ea57610225565b80638da5cb5b1461056057806395d89b411461058b578063999777aa146105b65780639a7a23d6146105e157610225565b806342966c68116101a65780636a486a8e116101755780636a486a8e1461048d57806370a08231146104b8578063715018a6146104f55780637d1f10531461050c578063809d458d1461053757610225565b806342966c68146103e35780634626402b1461040c578063485b7035146104375780635187c3a81461046257610225565b806323b872dd116101ed57806323b872dd146102e85780632f2ba8fa14610325578063313ce56714610350578063395093511461037b5780633fc8cef3146103b857610225565b806306fdde031461022a578063095ea7b31461025557806318160ddd146102925780632260d4de146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108e3565b60405161024c9190612b00565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190612bbb565b610975565b6040516102899190612c16565b60405180910390f35b34801561029e57600080fd5b506102a7610998565b6040516102b49190612c40565b60405180910390f35b3480156102c957600080fd5b506102d26109a2565b6040516102df9190612c40565b60405180910390f35b3480156102f457600080fd5b5061030f600480360381019061030a9190612c5b565b6109a8565b60405161031c9190612c16565b60405180910390f35b34801561033157600080fd5b5061033a6109d7565b6040516103479190612c40565b60405180910390f35b34801561035c57600080fd5b506103656109dd565b6040516103729190612cca565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190612bbb565b6109e6565b6040516103af9190612c16565b60405180910390f35b3480156103c457600080fd5b506103cd610a90565b6040516103da9190612cf4565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190612d0f565b610aa8565b005b34801561041857600080fd5b50610421610abc565b60405161042e9190612cf4565b60405180910390f35b34801561044357600080fd5b5061044c610ae2565b6040516104599190612c40565b60405180910390f35b34801561046e57600080fd5b50610477610ae8565b6040516104849190612cf4565b60405180910390f35b34801561049957600080fd5b506104a2610b00565b6040516104af9190612c40565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190612d3c565b610b06565b6040516104ec9190612c40565b60405180910390f35b34801561050157600080fd5b5061050a610b4e565b005b34801561051857600080fd5b50610521610ca6565b60405161052e9190612c40565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612d3c565b610cac565b005b34801561056c57600080fd5b50610575610e94565b6040516105829190612cf4565b60405180910390f35b34801561059757600080fd5b506105a0610ebe565b6040516105ad9190612b00565b60405180910390f35b3480156105c257600080fd5b506105cb610f50565b6040516105d89190612c40565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190612d95565b610f56565b005b34801561061657600080fd5b50610631600480360381019061062c9190612d95565b611094565b005b34801561063f57600080fd5b5061065a60048036038101906106559190612bbb565b611456565b6040516106679190612c16565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190612bbb565b611540565b6040516106a49190612c16565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190612d3c565b611563565b6040516106e19190612c16565b60405180910390f35b3480156106f657600080fd5b506106ff611583565b60405161070c9190612c40565b60405180910390f35b34801561072157600080fd5b5061072a61158d565b6040516107379190612cf4565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190612d3c565b6115a5565b6040516107749190612c16565b60405180910390f35b34801561078957600080fd5b506107926115c5565b60405161079f9190612c40565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190612d0f565b6115cb565b005b3480156107dd57600080fd5b506107e66116af565b6040516107f39190612cf4565b60405180910390f35b34801561080857600080fd5b506108116116d5565b60405161081e9190612e34565b60405180910390f35b34801561083357600080fd5b5061083c6116fb565b6040516108499190612c40565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190612e4f565b611701565b6040516108869190612c40565b60405180910390f35b34801561089b57600080fd5b506108a4611788565b6040516108b19190612c40565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190612d3c565b61178e565b005b6060600380546108f290612ebe565b80601f016020809104026020016040519081016040528092919081815260200182805461091e90612ebe565b801561096b5780601f106109405761010080835404028352916020019161096b565b820191906000526020600020905b81548152906001019060200180831161094e57829003601f168201915b5050505050905090565b600080610980611955565b905061098d81858561195d565b600191505092915050565b6000600254905090565b60175481565b6000806109b3611955565b90506109c0858285611b28565b6109cb858585611bb4565b60019150509392505050565b60155481565b60006012905090565b6000806109f1611955565b9050610a85818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a809190612f1f565b61195d565b600191505092915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b610ab9610ab3611955565b82611d27565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b73f3b9569f82b18aef890de263b84189bd33ebe45281565b60165481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b56611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90612fc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b610cb4611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a90612fc1565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb90613053565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb460405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610ecd90612ebe565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef990612ebe565b8015610f465780601f10610f1b57610100808354040283529160200191610f46565b820191906000526020600020905b815481529060010190602001808311610f2957829003601f168201915b5050505050905090565b60135481565b610f5e611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe490612fc1565b60405180910390fd5b80806110475750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d9061310b565b60405180910390fd5b6110908282611efe565b5050565b61109c611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112290612fc1565b60405180910390fd5b6001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561145257600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f56729c2d3b35702079226f38e0417b72386db8f924b488588b56135138cf179f60405160405180910390a381600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d79190613140565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611360573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113849190613140565b6040518363ffffffff1660e01b81526004016113a192919061316d565b6020604051808303816000875af11580156113c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e49190613140565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611451600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611efe565b5b5050565b600080611461611955565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613208565b60405180910390fd5b611534828686840361195d565b60019250505092915050565b60008061154b611955565b9050611558818585611bb4565b600191505092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b6000600754905090565b73a71d0588eaf47f12b13cf8ec750430d21df0497481565b60086020528060005260406000206000915054906101000a900460ff1681565b600f5481565b6115d3611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990612fc1565b60405180910390fd5b600081116116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90613274565b60405180910390fd5b80600e8190555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b611796611955565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c90612fc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90613306565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c490613398565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a349061342a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b1b9190612c40565b60405180910390a3505050565b6000611b348484611701565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611bae5781811015611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613496565b60405180910390fd5b611bad848484840361195d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90613528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b906135ba565b60405180910390fd5b6000811415611cae57611ca983836000612032565b611d22565b6000611cb984610b06565b905081811015611cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf59061364c565b60405180910390fd5b611d098484846122b3565b9150611d1584846124cb565b611d20848484612032565b505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e906136de565b60405180910390fd5b611da382600083612747565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090613770565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611e809190613790565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ee59190612c40565b60405180910390a3611ef98360008461274c565b505050565b801515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613836565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990613528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612109906135ba565b60405180910390fd5b61211d838383612747565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a9061364c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122369190612f1f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161229a9190612c40565b60405180910390a36122ad84848461274c565b50505050565b6000600c60149054906101000a900460ff161580156122d457506017544210155b801561232e5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156123885750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156124c1576000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561241c57612710601254846123f29190613856565b6123fc91906138df565b905080600f60008282546124109190612f1f565b925050819055506124a6565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a5576127106016548461247f9190613856565b61248991906138df565b9050806013600082825461249d9190612f1f565b925050819055505b5b80836124b29190613790565b92506124bf853083612032565b505b8190509392505050565b60006124d630610b06565b9050600e5481101580156124f75750600c60149054906101000a900460ff16155b801561254d5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156125a75750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126015750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612742576001600c60146101000a81548160ff021916908315150217905550600f54601354600f546126349190612f1f565b8261263f91906138df565b6126499190613856565b600f81905550600f548161265d9190613790565b6013819055506000601254601054600f546126789190613856565b61268291906138df565b90506016546014546013546126979190613856565b6126a191906138df565b816126ac9190612f1f565b905060008111156126c1576126c081612751565b5b6000601254601154600f546126d69190613856565b6126e091906138df565b90506016546015546013546126f59190613856565b6126ff91906138df565b9050600081111561271457612713816127d6565b5b6000600f8190555060006013819055506000600c60146101000a81548160ff02191690831515021790555050505b505050565b505050565b505050565b61277e30600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361195d565b61279c73f3b9569f82b18aef890de263b84189bd33ebe4528261285b565b7fe9c0ae5803574bbcf58d579f228bc57083077ab77105034a0253c3fca123292e816040516127cb9190612c40565b60405180910390a150565b61280330600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361195d565b61282173a71d0588eaf47f12b13cf8ec750430d21df049748261285b565b7f6810a9b400d97dcc26877a3f90745a53ad8a128889d516020decbdef85e5f9f5816040516128509190612c40565b60405180910390a150565b6000600367ffffffffffffffff81111561287857612877613910565b5b6040519080825280602002602001820160405280156128a65781602001602082028036833780820191505090505b50905030816000815181106128be576128bd61393f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106129215761292061393f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816002815181106129705761296f61393f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612a30959493929190613a67565b600060405180830381600087803b158015612a4a57600080fd5b505af1158015612a5e573d6000803e3d6000fd5b50505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612aa1578082015181840152602081019050612a86565b83811115612ab0576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ad282612a67565b612adc8185612a72565b9350612aec818560208601612a83565b612af581612ab6565b840191505092915050565b60006020820190508181036000830152612b1a8184612ac7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b5282612b27565b9050919050565b612b6281612b47565b8114612b6d57600080fd5b50565b600081359050612b7f81612b59565b92915050565b6000819050919050565b612b9881612b85565b8114612ba357600080fd5b50565b600081359050612bb581612b8f565b92915050565b60008060408385031215612bd257612bd1612b22565b5b6000612be085828601612b70565b9250506020612bf185828601612ba6565b9150509250929050565b60008115159050919050565b612c1081612bfb565b82525050565b6000602082019050612c2b6000830184612c07565b92915050565b612c3a81612b85565b82525050565b6000602082019050612c556000830184612c31565b92915050565b600080600060608486031215612c7457612c73612b22565b5b6000612c8286828701612b70565b9350506020612c9386828701612b70565b9250506040612ca486828701612ba6565b9150509250925092565b600060ff82169050919050565b612cc481612cae565b82525050565b6000602082019050612cdf6000830184612cbb565b92915050565b612cee81612b47565b82525050565b6000602082019050612d096000830184612ce5565b92915050565b600060208284031215612d2557612d24612b22565b5b6000612d3384828501612ba6565b91505092915050565b600060208284031215612d5257612d51612b22565b5b6000612d6084828501612b70565b91505092915050565b612d7281612bfb565b8114612d7d57600080fd5b50565b600081359050612d8f81612d69565b92915050565b60008060408385031215612dac57612dab612b22565b5b6000612dba85828601612b70565b9250506020612dcb85828601612d80565b9150509250929050565b6000819050919050565b6000612dfa612df5612df084612b27565b612dd5565b612b27565b9050919050565b6000612e0c82612ddf565b9050919050565b6000612e1e82612e01565b9050919050565b612e2e81612e13565b82525050565b6000602082019050612e496000830184612e25565b92915050565b60008060408385031215612e6657612e65612b22565b5b6000612e7485828601612b70565b9250506020612e8585828601612b70565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ed657607f821691505b60208210811415612eea57612ee9612e8f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f2a82612b85565b9150612f3583612b85565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f6a57612f69612ef0565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fab602083612a72565b9150612fb682612f75565b602082019050919050565b60006020820190508181036000830152612fda81612f9e565b9050919050565b7f5468652074726561737572792077616c6c657420697320616c7265616479207460008201527f6869732061646472657373000000000000000000000000000000000000000000602082015250565b600061303d602b83612a72565b915061304882612fe1565b604082019050919050565b6000602082019050818103600083015261306c81613030565b9050919050565b7f5468652064656661756c7420706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006130f5604183612a72565b915061310082613073565b606082019050919050565b60006020820190508181036000830152613124816130e8565b9050919050565b60008151905061313a81612b59565b92915050565b60006020828403121561315657613155612b22565b5b60006131648482850161312b565b91505092915050565b60006040820190506131826000830185612ce5565b61318f6020830184612ce5565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006131f2602583612a72565b91506131fd82613196565b604082019050919050565b60006020820190508181036000830152613221816131e5565b9050919050565b7f416d6f756e742073686f756c6420626520686967686572207468656e20300000600082015250565b600061325e601e83612a72565b915061326982613228565b602082019050919050565b6000602082019050818103600083015261328d81613251565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132f0602683612a72565b91506132fb82613294565b604082019050919050565b6000602082019050818103600083015261331f816132e3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613382602483612a72565b915061338d82613326565b604082019050919050565b600060208201905081810360008301526133b181613375565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613414602283612a72565b915061341f826133b8565b604082019050919050565b6000602082019050818103600083015261344381613407565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613480601d83612a72565b915061348b8261344a565b602082019050919050565b600060208201905081810360008301526134af81613473565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613512602583612a72565b915061351d826134b6565b604082019050919050565b6000602082019050818103600083015261354181613505565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135a4602383612a72565b91506135af82613548565b604082019050919050565b600060208201905081810360008301526135d381613597565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613636602683612a72565b9150613641826135da565b604082019050919050565b6000602082019050818103600083015261366581613629565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006136c8602183612a72565b91506136d38261366c565b604082019050919050565b600060208201905081810360008301526136f7816136bb565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061375a602283612a72565b9150613765826136fe565b604082019050919050565b600060208201905081810360008301526137898161374d565b9050919050565b600061379b82612b85565b91506137a683612b85565b9250828210156137b9576137b8612ef0565b5b828203905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000613820603883612a72565b915061382b826137c4565b604082019050919050565b6000602082019050818103600083015261384f81613813565b9050919050565b600061386182612b85565b915061386c83612b85565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138a5576138a4612ef0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138ea82612b85565b91506138f583612b85565b925082613905576139046138b0565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061399361398e6139898461396e565b612dd5565b612b85565b9050919050565b6139a381613978565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139de81612b47565b82525050565b60006139f083836139d5565b60208301905092915050565b6000602082019050919050565b6000613a14826139a9565b613a1e81856139b4565b9350613a29836139c5565b8060005b83811015613a5a578151613a4188826139e4565b9750613a4c836139fc565b925050600181019050613a2d565b5085935050505092915050565b600060a082019050613a7c6000830188612c31565b613a89602083018761399a565b8181036040830152613a9b8186613a09565b9050613aaa6060830185612ce5565b613ab76080830184612c31565b969550505050505056fea26469706673582212203685391dcca2186c96b60730148dfeefaa26603a22893618226aa4e8cfb1625864736f6c634300080c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000bb4d6667d5e514b253fd39428914a9fb73e84371

-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _treasuryWallet (address): 0xbB4D6667D5E514b253fD39428914a9fB73E84371

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000bb4d6667d5e514b253fd39428914a9fb73e84371


Deployed Bytecode Sourcemap

24991:7911:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4376:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6727:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5496:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26125:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7508:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26023:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27333:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8212:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25277:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31901:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25241:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25811;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25436:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26060:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5667:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16375:148;;;;;;;;;;;;;:::i;:::-;;25986:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28588:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15732:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4595:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25943:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27929:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27433:488;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8955:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6000:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25091:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16930:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25357:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25042:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25769:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28901:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25208:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25157:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25883:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6256:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25847:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16678:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4376:100;4430:13;4463:5;4456:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4376:100;:::o;6727:201::-;6810:4;6827:13;6843:12;:10;:12::i;:::-;6827:28;;6866:32;6875:5;6882:7;6891:6;6866:8;:32::i;:::-;6916:4;6909:11;;;6727:201;;;;:::o;5496:108::-;5557:7;5584:12;;5577:19;;5496:108;:::o;26125:38::-;;;;:::o;7508:295::-;7639:4;7656:15;7674:12;:10;:12::i;:::-;7656:30;;7697:38;7713:4;7719:7;7728:6;7697:15;:38::i;:::-;7746:27;7756:4;7762:2;7766:6;7746:9;:27::i;:::-;7791:4;7784:11;;;7508:295;;;;;:::o;26023:30::-;;;;:::o;27333:92::-;27383:5;25721:2;27401:16;;27333:92;:::o;8212:240::-;8300:4;8317:13;8333:12;:10;:12::i;:::-;8317:28;;8356:66;8365:5;8372:7;8411:10;8381:11;:18;8393:5;8381:18;;;;;;;;;;;;;;;:27;8400:7;8381:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;8356:8;:66::i;:::-;8440:4;8433:11;;;8212:240;;;;:::o;25277:73::-;25308:42;25277:73;:::o;31901:91::-;31957:27;31963:12;:10;:12::i;:::-;31977:6;31957:5;:27::i;:::-;31901:91;:::o;25241:29::-;;;;;;;;;;;;;:::o;25811:::-;;;;:::o;25436:72::-;25466:42;25436:72;:::o;26060:54::-;;;;:::o;5667:127::-;5741:7;5768:9;:18;5778:7;5768:18;;;;;;;;;;;;;;;;5761:25;;5667:127;;;:::o;16375:148::-;15954:12;:10;:12::i;:::-;15944:22;;:6;;;;;;;;;;;:22;;;15936:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16482:1:::1;16445:40;;16466:6;;;;;;;;;;;16445:40;;;;;;;;;;;;16513:1;16496:6;;:19;;;;;;;;;;;;;;;;;;16375:148::o:0;25986:30::-;;;;:::o;28588:303::-;15954:12;:10;:12::i;:::-;15944:22;;:6;;;;;;;;;;;:22;;;15936:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28704:14:::1;;;;;;;;;;;28683:35;;:17;:35;;;;28675:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;28823:14;;;;;;;;;;;28782:56;;28804:17;28782:56;;;;;;;;;;;;28866:17;28849:14;;:34;;;;;;;;;;;;;;;;;;28588:303:::0;:::o;15732:79::-;15770:7;15797:6;;;;;;;;;;;15790:13;;15732:79;:::o;4595:104::-;4651:13;4684:7;4677:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4595:104;:::o;25943:36::-;;;;:::o;27929:296::-;15954:12;:10;:12::i;:::-;15944:22;;:6;;;;;;;;;;;:22;;;15936:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28044:5:::1;:28;;;;28061:11;;;;;;;;;;;28053:19;;:4;:19;;;;28044:28;28022:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;28176:41;28205:4;28211:5;28176:28;:41::i;:::-;27929:296:::0;;:::o;27433:488::-;15954:12;:10;:12::i;:::-;15944:22;;:6;;;;;;;;;;;:22;;;15936:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27542:4:::1;27520:10;:19;27531:7;27520:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;27563:11;27559:355;;;27636:16;;;;;;;;;;;27596:58;;27619:7;27596:58;;;;;;;;;;;;27707:7;27669:16;;:46;;;;;;;;;;;;;;;;;;27762:16;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27744:56;;;27809:4;27816:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27744:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27730:11;;:110;;;;;;;;;;;;;;;;;;27855:47;27884:11;;;;;;;;;;;27897:4;27855:28;:47::i;:::-;27559:355;27433:488:::0;;:::o;8955:438::-;9048:4;9065:13;9081:12;:10;:12::i;:::-;9065:28;;9104:24;9131:11;:18;9143:5;9131:18;;;;;;;;;;;;;;;:27;9150:7;9131:27;;;;;;;;;;;;;;;;9104:54;;9197:15;9177:16;:35;;9169:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9290:60;9299:5;9306:7;9334:15;9315:16;:34;9290:8;:60::i;:::-;9381:4;9374:11;;;;8955:438;;;;:::o;6000:193::-;6079:4;6096:13;6112:12;:10;:12::i;:::-;6096:28;;6135;6145:5;6152:2;6156:6;6135:9;:28::i;:::-;6181:4;6174:11;;;6000:193;;;;:::o;25091:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16930:89::-;16975:7;17002:9;;16995:16;;16930:89;:::o;25357:72::-;25387:42;25357:72;:::o;25042:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;25769:35::-;;;;:::o;28901:218::-;15954:12;:10;:12::i;:::-;15944:22;;:6;;;;;;;;;;;:22;;;15936:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29024:1:::1;29002:19;:23;28994:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29092:19;29071:18;:40;;;;28901:218:::0;:::o;25208:26::-;;;;;;;;;;;;;:::o;25157:42::-;;;;;;;;;;;;;:::o;25883:51::-;;;;:::o;6256:151::-;6345:7;6372:11;:18;6384:5;6372:18;;;;;;;;;;;;;;;:27;6391:7;6372:27;;;;;;;;;;;;;;;;6365:34;;6256:151;;;;:::o;25847:29::-;;;;:::o;16678:244::-;15954:12;:10;:12::i;:::-;15944:22;;:6;;;;;;;;;;;:22;;;15936:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16787:1:::1;16767:22;;:8;:22;;;;16759:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16877:8;16848:38;;16869:6;;;;;;;;;;;16848:38;;;;;;;;;;;;16906:8;16897:6;;:17;;;;;;;;;;;;;;;;;;16678:244:::0;:::o;315:98::-;368:7;395:10;388:17;;315:98;:::o;12591:380::-;12744:1;12727:19;;:5;:19;;;;12719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12825:1;12806:21;;:7;:21;;;;12798:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12909:6;12879:11;:18;12891:5;12879:18;;;;;;;;;;;;;;;:27;12898:7;12879:27;;;;;;;;;;;;;;;:36;;;;12947:7;12931:32;;12940:5;12931:32;;;12956:6;12931:32;;;;;;:::i;:::-;;;;;;;;12591:380;;;:::o;13258:453::-;13393:24;13420:25;13430:5;13437:7;13420:9;:25::i;:::-;13393:52;;13480:17;13460:16;:37;13456:248;;13542:6;13522:16;:26;;13514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13626:51;13635:5;13642:7;13670:6;13651:16;:25;13626:8;:51::i;:::-;13456:248;13382:329;13258:453;;;:::o;29127:771::-;29275:1;29259:18;;:4;:18;;;;29251:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29352:1;29338:16;;:2;:16;;;;29330:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29421:1;29411:6;:11;29407:93;;;29439:28;29455:4;29461:2;29465:1;29439:15;:28::i;:::-;29482:7;;29407:93;29512:21;29536:15;29546:4;29536:9;:15::i;:::-;29512:39;;29587:6;29570:13;:23;;29562:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29679:29;29691:4;29697:2;29701:6;29679:11;:29::i;:::-;29670:38;;29809:35;29835:4;29841:2;29809:25;:35::i;:::-;29857:33;29873:4;29879:2;29883:6;29857:15;:33::i;:::-;29240:658;29127:771;;;;:::o;11562:591::-;11665:1;11646:21;;:7;:21;;;;11638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11718:49;11739:7;11756:1;11760:6;11718:20;:49::i;:::-;11780:22;11805:9;:18;11815:7;11805:18;;;;;;;;;;;;;;;;11780:43;;11860:6;11842:14;:24;;11834:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11979:6;11962:14;:23;11941:9;:18;11951:7;11941:18;;;;;;;;;;;;;;;:44;;;;12023:6;12007:12;;:22;;;;;;;:::i;:::-;;;;;;;;12073:1;12047:37;;12056:7;12047:37;;;12077:6;12047:37;;;;;;:::i;:::-;;;;;;;;12097:48;12117:7;12134:1;12138:6;12097:19;:48::i;:::-;11627:526;11562:591;;:::o;28233:345::-;28373:5;28338:40;;:25;:31;28364:4;28338:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;28316:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;28509:5;28475:25;:31;28501:4;28475:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;28564:5;28530:40;;28558:4;28530:40;;;;;;;;;;;;28233:345;;:::o;9872:671::-;10019:1;10003:18;;:4;:18;;;;9995:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10096:1;10082:16;;:2;:16;;;;10074:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10151:38;10172:4;10178:2;10182:6;10151:20;:38::i;:::-;10202:19;10224:9;:15;10234:4;10224:15;;;;;;;;;;;;;;;;10202:37;;10273:6;10258:11;:21;;10250:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10390:6;10376:11;:20;10358:9;:15;10368:4;10358:15;;;;;;;;;;;;;;;:38;;;;10435:6;10418:9;:13;10428:2;10418:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;10474:2;10459:26;;10468:4;10459:26;;;10478:6;10459:26;;;;;;:::i;:::-;;;;;;;;10498:37;10518:4;10524:2;10528:6;10498:19;:37::i;:::-;9984:559;9872:671;;;:::o;29906:756::-;30020:7;30045:14;;;;;;;;;;;30044:15;:61;;;;;30082:23;;30063:15;:42;;30044:61;:87;;;;;30117:14;;;;;;;;;;;30109:22;;:4;:22;;;;30044:87;:124;;;;;30154:14;;;;;;;;;;;30148:20;;:2;:20;;;;30044:124;30040:591;;;30185:12;30216:25;:31;30242:4;30216:31;;;;;;;;;;;;;;;;;;;;;;;;;30212:312;;;30301:5;30285:12;;30276:6;:21;;;;:::i;:::-;30275:31;;;;:::i;:::-;30268:38;;30345:4;30325:16;;:24;;;;;;;:::i;:::-;;;;;;;;30212:312;;;30375:25;:29;30401:2;30375:29;;;;;;;;;;;;;;;;;;;;;;;;;30371:153;;;30459:5;30442:13;;30433:6;:22;;;;:::i;:::-;30432:32;;;;:::i;:::-;30425:39;;30504:4;30483:17;;:25;;;;;;;:::i;:::-;;;;;;;;30371:153;30212:312;30558:4;30549:6;:13;;;;:::i;:::-;30540:22;;30577:42;30593:4;30607;30614;30577:15;:42::i;:::-;30170:461;30040:591;30648:6;30641:13;;29906:756;;;;;:::o;30670:1223::-;30750:28;30781:24;30799:4;30781:9;:24::i;:::-;30750:55;;30868:18;;30844:20;:42;;:74;;;;;30904:14;;;;;;;;;;;30903:15;30844:74;:123;;;;;30936:25;:31;30962:4;30936:31;;;;;;;;;;;;;;;;;;;;;;;;;30935:32;30844:123;:190;;;;;31020:14;;;;;;;;;;;31012:22;;:4;:22;;;;30844:190;:227;;;;;31057:14;;;;;;;;;;;31051:20;;:2;:20;;;;30844:227;30826:1060;;;31115:4;31098:14;;:21;;;;;;;;;;;;;;;;;;31221:16;;31199:17;;31180:16;;:36;;;;:::i;:::-;31156:20;:61;;;;:::i;:::-;31155:82;;;;:::i;:::-;31136:16;:101;;;;31295:16;;31272:20;:39;;;;:::i;:::-;31252:17;:59;;;;31328:17;31381:12;;31368:9;;31349:16;;:28;;;;:::i;:::-;31348:45;;;;:::i;:::-;31328:65;;31456:13;;31442:10;;31422:17;;:30;;;;:::i;:::-;31421:48;;;;:::i;:::-;31408:61;;;;;:::i;:::-;;;31500:1;31488:9;:13;31484:40;;;31503:21;31514:9;31503:10;:21::i;:::-;31484:40;31555:17;31608:12;;31595:9;;31576:16;;:28;;;;:::i;:::-;31575:45;;;;:::i;:::-;31555:65;;31682:13;;31668:10;;31648:17;;:30;;;;:::i;:::-;31647:48;;;;:::i;:::-;31635:60;;31726:1;31714:9;:13;31710:40;;;31729:21;31740:9;31729:10;:21::i;:::-;31710:40;31798:1;31779:16;:20;;;;31834:1;31814:17;:21;;;;31869:5;31852:14;;:22;;;;;;;;;;;;;;;;;;31083:803;;30826:1060;30739:1154;30670:1223;;:::o;14311:125::-;;;;:::o;15040:124::-;;;;:::o;32002:200::-;32056:58;32073:4;32088:16;;;;;;;;;;;32107:6;32056:8;:58::i;:::-;32125:32;25466:42;32150:6;32125:19;:32::i;:::-;32173:21;32187:6;32173:21;;;;;;:::i;:::-;;;;;;;;32002:200;:::o;32210:::-;32264:58;32281:4;32296:16;;;;;;;;;;;32315:6;32264:8;:58::i;:::-;32333:32;25387:42;32358:6;32333:19;:32::i;:::-;32381:21;32395:6;32381:21;;;;;;:::i;:::-;;;;;;;;32210:200;:::o;32418:481::-;32498:21;32536:1;32522:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32498:40;;32567:4;32549;32554:1;32549:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25308:42;32583:4;32588:1;32583:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;32618:6;32608:4;32613:1;32608:7;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;;;32663;;;;;;;;;;;:70;;;32748:6;32769:1;32816:4;32835:14;;;;;;;;;;;32864:15;32663:228;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32487:412;32418:481;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:86::-;4506:7;4546:4;4539:5;4535:16;4524:27;;4471:86;;;:::o;4563:112::-;4646:22;4662:5;4646:22;:::i;:::-;4641:3;4634:35;4563:112;;:::o;4681:214::-;4770:4;4808:2;4797:9;4793:18;4785:26;;4821:67;4885:1;4874:9;4870:17;4861:6;4821:67;:::i;:::-;4681:214;;;;:::o;4901:118::-;4988:24;5006:5;4988:24;:::i;:::-;4983:3;4976:37;4901:118;;:::o;5025:222::-;5118:4;5156:2;5145:9;5141:18;5133:26;;5169:71;5237:1;5226:9;5222:17;5213:6;5169:71;:::i;:::-;5025:222;;;;:::o;5253:329::-;5312:6;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5253:329;;;;:::o;5588:::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:116::-;5993:21;6008:5;5993:21;:::i;:::-;5986:5;5983:32;5973:60;;6029:1;6026;6019:12;5973:60;5923:116;:::o;6045:133::-;6088:5;6126:6;6113:20;6104:29;;6142:30;6166:5;6142:30;:::i;:::-;6045:133;;;;:::o;6184:468::-;6249:6;6257;6306:2;6294:9;6285:7;6281:23;6277:32;6274:119;;;6312:79;;:::i;:::-;6274:119;6432:1;6457:53;6502:7;6493:6;6482:9;6478:22;6457:53;:::i;:::-;6447:63;;6403:117;6559:2;6585:50;6627:7;6618:6;6607:9;6603:22;6585:50;:::i;:::-;6575:60;;6530:115;6184:468;;;;;:::o;6658:60::-;6686:3;6707:5;6700:12;;6658:60;;;:::o;6724:142::-;6774:9;6807:53;6825:34;6834:24;6852:5;6834:24;:::i;:::-;6825:34;:::i;:::-;6807:53;:::i;:::-;6794:66;;6724:142;;;:::o;6872:126::-;6922:9;6955:37;6986:5;6955:37;:::i;:::-;6942:50;;6872:126;;;:::o;7004:153::-;7081:9;7114:37;7145:5;7114:37;:::i;:::-;7101:50;;7004:153;;;:::o;7163:185::-;7277:64;7335:5;7277:64;:::i;:::-;7272:3;7265:77;7163:185;;:::o;7354:276::-;7474:4;7512:2;7501:9;7497:18;7489:26;;7525:98;7620:1;7609:9;7605:17;7596:6;7525:98;:::i;:::-;7354:276;;;;:::o;7636:474::-;7704:6;7712;7761:2;7749:9;7740:7;7736:23;7732:32;7729:119;;;7767:79;;:::i;:::-;7729:119;7887:1;7912:53;7957:7;7948:6;7937:9;7933:22;7912:53;:::i;:::-;7902:63;;7858:117;8014:2;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7985:118;7636:474;;;;;:::o;8116:180::-;8164:77;8161:1;8154:88;8261:4;8258:1;8251:15;8285:4;8282:1;8275:15;8302:320;8346:6;8383:1;8377:4;8373:12;8363:22;;8430:1;8424:4;8420:12;8451:18;8441:81;;8507:4;8499:6;8495:17;8485:27;;8441:81;8569:2;8561:6;8558:14;8538:18;8535:38;8532:84;;;8588:18;;:::i;:::-;8532:84;8353:269;8302:320;;;:::o;8628:180::-;8676:77;8673:1;8666:88;8773:4;8770:1;8763:15;8797:4;8794:1;8787:15;8814:305;8854:3;8873:20;8891:1;8873:20;:::i;:::-;8868:25;;8907:20;8925:1;8907:20;:::i;:::-;8902:25;;9061:1;8993:66;8989:74;8986:1;8983:81;8980:107;;;9067:18;;:::i;:::-;8980:107;9111:1;9108;9104:9;9097:16;;8814:305;;;;:::o;9125:182::-;9265:34;9261:1;9253:6;9249:14;9242:58;9125:182;:::o;9313:366::-;9455:3;9476:67;9540:2;9535:3;9476:67;:::i;:::-;9469:74;;9552:93;9641:3;9552:93;:::i;:::-;9670:2;9665:3;9661:12;9654:19;;9313:366;;;:::o;9685:419::-;9851:4;9889:2;9878:9;9874:18;9866:26;;9938:9;9932:4;9928:20;9924:1;9913:9;9909:17;9902:47;9966:131;10092:4;9966:131;:::i;:::-;9958:139;;9685:419;;;:::o;10110:230::-;10250:34;10246:1;10238:6;10234:14;10227:58;10319:13;10314:2;10306:6;10302:15;10295:38;10110:230;:::o;10346:366::-;10488:3;10509:67;10573:2;10568:3;10509:67;:::i;:::-;10502:74;;10585:93;10674:3;10585:93;:::i;:::-;10703:2;10698:3;10694:12;10687:19;;10346:366;;;:::o;10718:419::-;10884:4;10922:2;10911:9;10907:18;10899:26;;10971:9;10965:4;10961:20;10957:1;10946:9;10942:17;10935:47;10999:131;11125:4;10999:131;:::i;:::-;10991:139;;10718:419;;;:::o;11143:289::-;11283:34;11279:1;11271:6;11267:14;11260:58;11352:34;11347:2;11339:6;11335:15;11328:59;11421:3;11416:2;11408:6;11404:15;11397:28;11143:289;:::o;11438:366::-;11580:3;11601:67;11665:2;11660:3;11601:67;:::i;:::-;11594:74;;11677:93;11766:3;11677:93;:::i;:::-;11795:2;11790:3;11786:12;11779:19;;11438:366;;;:::o;11810:419::-;11976:4;12014:2;12003:9;11999:18;11991:26;;12063:9;12057:4;12053:20;12049:1;12038:9;12034:17;12027:47;12091:131;12217:4;12091:131;:::i;:::-;12083:139;;11810:419;;;:::o;12235:143::-;12292:5;12323:6;12317:13;12308:22;;12339:33;12366:5;12339:33;:::i;:::-;12235:143;;;;:::o;12384:351::-;12454:6;12503:2;12491:9;12482:7;12478:23;12474:32;12471:119;;;12509:79;;:::i;:::-;12471:119;12629:1;12654:64;12710:7;12701:6;12690:9;12686:22;12654:64;:::i;:::-;12644:74;;12600:128;12384:351;;;;:::o;12741:332::-;12862:4;12900:2;12889:9;12885:18;12877:26;;12913:71;12981:1;12970:9;12966:17;12957:6;12913:71;:::i;:::-;12994:72;13062:2;13051:9;13047:18;13038:6;12994:72;:::i;:::-;12741:332;;;;;:::o;13079:224::-;13219:34;13215:1;13207:6;13203:14;13196:58;13288:7;13283:2;13275:6;13271:15;13264:32;13079:224;:::o;13309:366::-;13451:3;13472:67;13536:2;13531:3;13472:67;:::i;:::-;13465:74;;13548:93;13637:3;13548:93;:::i;:::-;13666:2;13661:3;13657:12;13650:19;;13309:366;;;:::o;13681:419::-;13847:4;13885:2;13874:9;13870:18;13862:26;;13934:9;13928:4;13924:20;13920:1;13909:9;13905:17;13898:47;13962:131;14088:4;13962:131;:::i;:::-;13954:139;;13681:419;;;:::o;14106:180::-;14246:32;14242:1;14234:6;14230:14;14223:56;14106:180;:::o;14292:366::-;14434:3;14455:67;14519:2;14514:3;14455:67;:::i;:::-;14448:74;;14531:93;14620:3;14531:93;:::i;:::-;14649:2;14644:3;14640:12;14633:19;;14292:366;;;:::o;14664:419::-;14830:4;14868:2;14857:9;14853:18;14845:26;;14917:9;14911:4;14907:20;14903:1;14892:9;14888:17;14881:47;14945:131;15071:4;14945:131;:::i;:::-;14937:139;;14664:419;;;:::o;15089:225::-;15229:34;15225:1;15217:6;15213:14;15206:58;15298:8;15293:2;15285:6;15281:15;15274:33;15089:225;:::o;15320:366::-;15462:3;15483:67;15547:2;15542:3;15483:67;:::i;:::-;15476:74;;15559:93;15648:3;15559:93;:::i;:::-;15677:2;15672:3;15668:12;15661:19;;15320:366;;;:::o;15692:419::-;15858:4;15896:2;15885:9;15881:18;15873:26;;15945:9;15939:4;15935:20;15931:1;15920:9;15916:17;15909:47;15973:131;16099:4;15973:131;:::i;:::-;15965:139;;15692:419;;;:::o;16117:223::-;16257:34;16253:1;16245:6;16241:14;16234:58;16326:6;16321:2;16313:6;16309:15;16302:31;16117:223;:::o;16346:366::-;16488:3;16509:67;16573:2;16568:3;16509:67;:::i;:::-;16502:74;;16585:93;16674:3;16585:93;:::i;:::-;16703:2;16698:3;16694:12;16687:19;;16346:366;;;:::o;16718:419::-;16884:4;16922:2;16911:9;16907:18;16899:26;;16971:9;16965:4;16961:20;16957:1;16946:9;16942:17;16935:47;16999:131;17125:4;16999:131;:::i;:::-;16991:139;;16718:419;;;:::o;17143:221::-;17283:34;17279:1;17271:6;17267:14;17260:58;17352:4;17347:2;17339:6;17335:15;17328:29;17143:221;:::o;17370:366::-;17512:3;17533:67;17597:2;17592:3;17533:67;:::i;:::-;17526:74;;17609:93;17698:3;17609:93;:::i;:::-;17727:2;17722:3;17718:12;17711:19;;17370:366;;;:::o;17742:419::-;17908:4;17946:2;17935:9;17931:18;17923:26;;17995:9;17989:4;17985:20;17981:1;17970:9;17966:17;17959:47;18023:131;18149:4;18023:131;:::i;:::-;18015:139;;17742:419;;;:::o;18167:179::-;18307:31;18303:1;18295:6;18291:14;18284:55;18167:179;:::o;18352:366::-;18494:3;18515:67;18579:2;18574:3;18515:67;:::i;:::-;18508:74;;18591:93;18680:3;18591:93;:::i;:::-;18709:2;18704:3;18700:12;18693:19;;18352:366;;;:::o;18724:419::-;18890:4;18928:2;18917:9;18913:18;18905:26;;18977:9;18971:4;18967:20;18963:1;18952:9;18948:17;18941:47;19005:131;19131:4;19005:131;:::i;:::-;18997:139;;18724:419;;;:::o;19149:224::-;19289:34;19285:1;19277:6;19273:14;19266:58;19358:7;19353:2;19345:6;19341:15;19334:32;19149:224;:::o;19379:366::-;19521:3;19542:67;19606:2;19601:3;19542:67;:::i;:::-;19535:74;;19618:93;19707:3;19618:93;:::i;:::-;19736:2;19731:3;19727:12;19720:19;;19379:366;;;:::o;19751:419::-;19917:4;19955:2;19944:9;19940:18;19932:26;;20004:9;19998:4;19994:20;19990:1;19979:9;19975:17;19968:47;20032:131;20158:4;20032:131;:::i;:::-;20024:139;;19751:419;;;:::o;20176:222::-;20316:34;20312:1;20304:6;20300:14;20293:58;20385:5;20380:2;20372:6;20368:15;20361:30;20176:222;:::o;20404:366::-;20546:3;20567:67;20631:2;20626:3;20567:67;:::i;:::-;20560:74;;20643:93;20732:3;20643:93;:::i;:::-;20761:2;20756:3;20752:12;20745:19;;20404:366;;;:::o;20776:419::-;20942:4;20980:2;20969:9;20965:18;20957:26;;21029:9;21023:4;21019:20;21015:1;21004:9;21000:17;20993:47;21057:131;21183:4;21057:131;:::i;:::-;21049:139;;20776:419;;;:::o;21201:225::-;21341:34;21337:1;21329:6;21325:14;21318:58;21410:8;21405:2;21397:6;21393:15;21386:33;21201:225;:::o;21432:366::-;21574:3;21595:67;21659:2;21654:3;21595:67;:::i;:::-;21588:74;;21671:93;21760:3;21671:93;:::i;:::-;21789:2;21784:3;21780:12;21773:19;;21432:366;;;:::o;21804:419::-;21970:4;22008:2;21997:9;21993:18;21985:26;;22057:9;22051:4;22047:20;22043:1;22032:9;22028:17;22021:47;22085:131;22211:4;22085:131;:::i;:::-;22077:139;;21804:419;;;:::o;22229:220::-;22369:34;22365:1;22357:6;22353:14;22346:58;22438:3;22433:2;22425:6;22421:15;22414:28;22229:220;:::o;22455:366::-;22597:3;22618:67;22682:2;22677:3;22618:67;:::i;:::-;22611:74;;22694:93;22783:3;22694:93;:::i;:::-;22812:2;22807:3;22803:12;22796:19;;22455:366;;;:::o;22827:419::-;22993:4;23031:2;23020:9;23016:18;23008:26;;23080:9;23074:4;23070:20;23066:1;23055:9;23051:17;23044:47;23108:131;23234:4;23108:131;:::i;:::-;23100:139;;22827:419;;;:::o;23252:221::-;23392:34;23388:1;23380:6;23376:14;23369:58;23461:4;23456:2;23448:6;23444:15;23437:29;23252:221;:::o;23479:366::-;23621:3;23642:67;23706:2;23701:3;23642:67;:::i;:::-;23635:74;;23718:93;23807:3;23718:93;:::i;:::-;23836:2;23831:3;23827:12;23820:19;;23479:366;;;:::o;23851:419::-;24017:4;24055:2;24044:9;24040:18;24032:26;;24104:9;24098:4;24094:20;24090:1;24079:9;24075:17;24068:47;24132:131;24258:4;24132:131;:::i;:::-;24124:139;;23851:419;;;:::o;24276:191::-;24316:4;24336:20;24354:1;24336:20;:::i;:::-;24331:25;;24370:20;24388:1;24370:20;:::i;:::-;24365:25;;24409:1;24406;24403:8;24400:34;;;24414:18;;:::i;:::-;24400:34;24459:1;24456;24452:9;24444:17;;24276:191;;;;:::o;24473:243::-;24613:34;24609:1;24601:6;24597:14;24590:58;24682:26;24677:2;24669:6;24665:15;24658:51;24473:243;:::o;24722:366::-;24864:3;24885:67;24949:2;24944:3;24885:67;:::i;:::-;24878:74;;24961:93;25050:3;24961:93;:::i;:::-;25079:2;25074:3;25070:12;25063:19;;24722:366;;;:::o;25094:419::-;25260:4;25298:2;25287:9;25283:18;25275:26;;25347:9;25341:4;25337:20;25333:1;25322:9;25318:17;25311:47;25375:131;25501:4;25375:131;:::i;:::-;25367:139;;25094:419;;;:::o;25519:348::-;25559:7;25582:20;25600:1;25582:20;:::i;:::-;25577:25;;25616:20;25634:1;25616:20;:::i;:::-;25611:25;;25804:1;25736:66;25732:74;25729:1;25726:81;25721:1;25714:9;25707:17;25703:105;25700:131;;;25811:18;;:::i;:::-;25700:131;25859:1;25856;25852:9;25841:20;;25519:348;;;;:::o;25873:180::-;25921:77;25918:1;25911:88;26018:4;26015:1;26008:15;26042:4;26039:1;26032:15;26059:185;26099:1;26116:20;26134:1;26116:20;:::i;:::-;26111:25;;26150:20;26168:1;26150:20;:::i;:::-;26145:25;;26189:1;26179:35;;26194:18;;:::i;:::-;26179:35;26236:1;26233;26229:9;26224:14;;26059:185;;;;:::o;26250:180::-;26298:77;26295:1;26288:88;26395:4;26392:1;26385:15;26419:4;26416:1;26409:15;26436:180;26484:77;26481:1;26474:88;26581:4;26578:1;26571:15;26605:4;26602:1;26595:15;26622:85;26667:7;26696:5;26685:16;;26622:85;;;:::o;26713:158::-;26771:9;26804:61;26822:42;26831:32;26857:5;26831:32;:::i;:::-;26822:42;:::i;:::-;26804:61;:::i;:::-;26791:74;;26713:158;;;:::o;26877:147::-;26972:45;27011:5;26972:45;:::i;:::-;26967:3;26960:58;26877:147;;:::o;27030:114::-;27097:6;27131:5;27125:12;27115:22;;27030:114;;;:::o;27150:184::-;27249:11;27283:6;27278:3;27271:19;27323:4;27318:3;27314:14;27299:29;;27150:184;;;;:::o;27340:132::-;27407:4;27430:3;27422:11;;27460:4;27455:3;27451:14;27443:22;;27340:132;;;:::o;27478:108::-;27555:24;27573:5;27555:24;:::i;:::-;27550:3;27543:37;27478:108;;:::o;27592:179::-;27661:10;27682:46;27724:3;27716:6;27682:46;:::i;:::-;27760:4;27755:3;27751:14;27737:28;;27592:179;;;;:::o;27777:113::-;27847:4;27879;27874:3;27870:14;27862:22;;27777:113;;;:::o;27926:732::-;28045:3;28074:54;28122:5;28074:54;:::i;:::-;28144:86;28223:6;28218:3;28144:86;:::i;:::-;28137:93;;28254:56;28304:5;28254:56;:::i;:::-;28333:7;28364:1;28349:284;28374:6;28371:1;28368:13;28349:284;;;28450:6;28444:13;28477:63;28536:3;28521:13;28477:63;:::i;:::-;28470:70;;28563:60;28616:6;28563:60;:::i;:::-;28553:70;;28409:224;28396:1;28393;28389:9;28384:14;;28349:284;;;28353:14;28649:3;28642:10;;28050:608;;;27926:732;;;;:::o;28664:831::-;28927:4;28965:3;28954:9;28950:19;28942:27;;28979:71;29047:1;29036:9;29032:17;29023:6;28979:71;:::i;:::-;29060:80;29136:2;29125:9;29121:18;29112:6;29060:80;:::i;:::-;29187:9;29181:4;29177:20;29172:2;29161:9;29157:18;29150:48;29215:108;29318:4;29309:6;29215:108;:::i;:::-;29207:116;;29333:72;29401:2;29390:9;29386:18;29377:6;29333:72;:::i;:::-;29415:73;29483:3;29472:9;29468:19;29459:6;29415:73;:::i;:::-;28664:831;;;;;;;;:::o

Swarm Source

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