ETH Price: $3,304.82 (+2.76%)
 

Overview

Max Total Supply

659,281.048860605666119921 $AMENO

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.462405829946702081 $AMENO

Value
$0.00
0xe41739c0156b0Ca57a402CBe3BeeF47bd273070D
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:
AmenoToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-17
*/

/**
 
*/

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
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, allowance(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 = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * 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 {}
}

// File: TORA.sol


pragma solidity ^0.8.0;



interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(address token,uint amountTokenDesired,uint amountTokenMin,uint amountETHMin,address to,uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
} 

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn,uint amountOutMin,address[] calldata path,address to,uint deadline) external;
}

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

contract AmenoToken is ERC20, Ownable {
    IUniswapV2Router02 public uniswapV2Router;
    
    bool private swapping;
    
    uint256 public swapTokensAtAmount = 6660 ether;

    uint256 public liquidityFee = 2;
    uint256 public marketingfee = 2;
    uint256 public burnFee = 1;

    uint256 public maxTxAmount = 666 ether;

    uint256 public pendingMarketingFee;
    uint256 public pendingBurnFee;
    
    address public marketingWallet = 0x9f883d9E2fef26dA8a14b6b4532eDAC808EA9943;
    address public uniswapV2Pair; 
    // address immutable deadAddress = 0x000000000000000000000000000000000000dEaD;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public _isBlacklisted;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

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

    constructor() ERC20("Ameno Token", "$AMENO") {

    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        excludeFromFees(owner(), true); 
        excludeFromFees(address(this), true);
        _mint(owner(), 666_000  * (10**18));
    }

    receive() external payable {
  	}

 
    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(address[] memory accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner{
        swapTokensAtAmount = amount;
    }

    function setLiquiditFee(uint256 _newFee) external onlyOwner{
        liquidityFee = _newFee;
    }

    function setmarketingFee(uint256 _newFee) external onlyOwner{
        marketingfee = _newFee;
    }

    function setBurnFee(uint256 _newFee) external onlyOwner{
        burnFee = _newFee;
    }

    function setMaxTxAmount(uint256 _amount) external onlyOwner() {
        maxTxAmount = _amount;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The Uniswap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }
    
    function blacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = 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 swapOnDemand() external onlyOwner {
        swapping = true;
        uint256 contractTokenBalanceforlp = balanceOf(address(this))-pendingMarketingFee-pendingBurnFee;
        swapAndLiquify(contractTokenBalanceforlp);
        swapping = false;
    }

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

    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");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address');

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

       
        if (!swapping && from != owner() && to != owner()) {
            require(amount <= maxTxAmount ,"transfer: amount exceeds the maxTxAmount");
        }
            
 
		uint256 contractTokenBalanceforlp = balanceOf(address(this))-pendingMarketingFee-pendingBurnFee;
        bool canSwap = contractTokenBalanceforlp >= swapTokensAtAmount;

        if( canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != owner() &&
            to != owner()
        ) 
        {
            swapping = true;
            swapAndLiquify(contractTokenBalanceforlp);
            swapAndSendMarketingFee();
            deflationaryBurn();
            swapping = false;
        }

        bool takeFee = !swapping;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        if(takeFee) {
            // lpfee
        	uint256 fees1 = (amount*liquidityFee)/(100);  
            // marketing fee
            uint256 fees2 = (amount*marketingfee)/(100);
            pendingMarketingFee = pendingMarketingFee+(fees2);
              // burnFee
        	uint256 fees3 = (amount*burnFee)/(100); 
            pendingBurnFee = pendingBurnFee+(fees3);

            uint totalfees;
            unchecked {
                totalfees = fees1 + fees2 + fees3;
            }

            super._transfer(from, address(this), totalfees);
            amount = amount-totalfees;
        }
        super._transfer(from, to, amount);
    }


    function claimMarketingFees() external onlyOwner {
        uint _pendingMarketingFee = pendingMarketingFee;
        if (_pendingMarketingFee > 0) 
        {
        swapping = true;    
        swapTokensForEth(_pendingMarketingFee);
        uint amount = address(this).balance;
        (bool success, ) = address(marketingWallet).call{ value: amount }("");
        require(success, "Address: unable to extract value, tx may have reverted");
        pendingMarketingFee = 0;
        swapping = false;    
        }
    }

    function deflationaryBurn() public {
        uint _pendingBurnFee = pendingBurnFee;
        if (_pendingBurnFee > 0) {
            _burn(address(this), _pendingBurnFee);
            pendingBurnFee = 0;
        } 
    }

    function setmarketingWallet(address _walletaddress) external onlyOwner {
        marketingWallet = _walletaddress;
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens/2;
        uint256 otherHalf = tokens-(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half);
        uint256 newBalance = address(this).balance-(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendMarketingFee() private {
        uint _pendingMarketingFee = pendingMarketingFee;
        if (_pendingMarketingFee > 0) 
        {
        swapTokensForEth(_pendingMarketingFee);
        uint amount = address(this).balance;
        (bool success, ) = address(marketingWallet).call{ value: amount }("");
        require(success, "Address: unable to extract value, tx may have reverted");
        pendingMarketingFee = 0;
        }
    }

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0,
            owner(),
            block.timestamp
        );
    }

    function migrateGasToken(address payable _newadd,uint256 amount) public onlyOwner {    
        (bool success, ) = address(_newadd).call{ value: amount }("");
        require(success, "Address: unable to extract value, tx may have reverted");    
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimMarketingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deflationaryBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newadd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"migrateGasToken","outputs":[],"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":"pendingBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setLiquiditFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"setmarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletaddress","type":"address"}],"name":"setmarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapOnDemand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526901690a1119cec5900000600755600260085560026009556001600a5568241a9b4f617a280000600b55739f883d9e2fef26da8a14b6b4532edac808ea9943600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200009057600080fd5b506040518060400160405280600b81526020017f416d656e6f20546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600681526020017f24414d454e4f000000000000000000000000000000000000000000000000000081525081600390805190602001906200011592919062000994565b5080600490805190602001906200012e92919062000994565b50505062000151620001456200040060201b60201c565b6200040860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001b357600080fd5b505afa158015620001c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ee919062000a5b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025157600080fd5b505afa15801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c919062000a5b565b6040518363ffffffff1660e01b8152600401620002ab92919062000b5c565b602060405180830381600087803b158015620002c657600080fd5b505af1158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000301919062000a5b565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000398816001620004ce60201b60201c565b620003ba620003ac6200060560201b60201c565b60016200062f60201b60201c565b620003cd3060016200062f60201b60201c565b620003f8620003e16200060560201b60201c565b698d07eeae14c52c4000006200078060201b60201c565b505062000ea6565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000564576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200055b9062000ba6565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200063f620008f960201b60201c565b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415620006d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006cc9062000bea565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000774919062000b89565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ea9062000c0c565b60405180910390fd5b62000807600083836200098a60201b60201c565b80600260008282546200081b919062000c5c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000872919062000c5c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008d9919062000c2e565b60405180910390a3620008f5600083836200098f60201b60201c565b5050565b620009096200040060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200092f6200060560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000988576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200097f9062000bc8565b60405180910390fd5b565b505050565b505050565b828054620009a29062000d03565b90600052602060002090601f016020900481019282620009c6576000855562000a12565b82601f10620009e157805160ff191683800117855562000a12565b8280016001018555821562000a12579182015b8281111562000a11578251825591602001919060010190620009f4565b5b50905062000a21919062000a25565b5090565b5b8082111562000a4057600081600090555060010162000a26565b5090565b60008151905062000a558162000e8c565b92915050565b60006020828403121562000a745762000a7362000d97565b5b600062000a848482850162000a44565b91505092915050565b62000a988162000cb9565b82525050565b62000aa98162000ccd565b82525050565b600062000abe60388362000c4b565b915062000acb8262000d9c565b604082019050919050565b600062000ae560208362000c4b565b915062000af28262000deb565b602082019050919050565b600062000b0c602a8362000c4b565b915062000b198262000e14565b604082019050919050565b600062000b33601f8362000c4b565b915062000b408262000e63565b602082019050919050565b62000b568162000cf9565b82525050565b600060408201905062000b73600083018562000a8d565b62000b82602083018462000a8d565b9392505050565b600060208201905062000ba0600083018462000a9e565b92915050565b6000602082019050818103600083015262000bc18162000aaf565b9050919050565b6000602082019050818103600083015262000be38162000ad6565b9050919050565b6000602082019050818103600083015262000c058162000afd565b9050919050565b6000602082019050818103600083015262000c278162000b24565b9050919050565b600060208201905062000c45600083018462000b4b565b92915050565b600082825260208201905092915050565b600062000c698262000cf9565b915062000c768362000cf9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000cae5762000cad62000d39565b5b828201905092915050565b600062000cc68262000cd9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000d1c57607f821691505b6020821081141562000d335762000d3262000d68565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000e978162000cb9565b811462000ea357600080fd5b50565b61421e8062000eb66000396000f3fe6080604052600436106102555760003560e01c80638c0b5e2211610139578063b62496f5116100b6578063e2f456051161007a578063e2f45605146108bd578063e6d4875f146108e8578063ec28438a14610913578063f19ae7931461093c578063f2fde38b14610965578063fce589d81461098e5761025c565b8063b62496f5146107da578063c024666814610817578063c492f04614610840578063d1a1f31814610869578063dd62ed3e146108805761025c565b80639a7a23d6116100fd5780639a7a23d6146106e5578063a457c2d71461070e578063a9059cbb1461074b578063adefd90c14610788578063afa4f3b2146107b15761025c565b80638c0b5e22146106105780638c9a5a311461063b5780638da5cb5b1461066457806395d89b411461068f57806398118cb4146106ba5761025c565b8063455a4396116101d25780636a6029cd116101965780636a6029cd1461052457806370a082311461054f578063715018a61461058c578063729ca707146105a357806375f0a874146105ce5780637ff7403f146105f95761025c565b8063455a43961461044157806349bd5a5e1461046a5780634bf2c7c9146104955780634fbee193146104be57806365b8dbc0146104fb5761025c565b80631cdd3be3116102195780631cdd3be314610336578063224611731461037357806323b872dd1461039c578063313ce567146103d957806339509351146104045761025c565b806306fdde031461026157806307dce0f81461028c578063095ea7b3146102a35780631694505e146102e057806318160ddd1461030b5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109b9565b60405161028391906134ba565b60405180910390f35b34801561029857600080fd5b506102a1610a4b565b005b3480156102af57600080fd5b506102ca60048036038101906102c59190612ecd565b610b83565b6040516102d79190613484565b60405180910390f35b3480156102ec57600080fd5b506102f5610ba6565b604051610302919061349f565b60405180910390f35b34801561031757600080fd5b50610320610bcc565b60405161032d919061371c565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190612d60565b610bd6565b60405161036a9190613484565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190612d60565b610bf6565b005b3480156103a857600080fd5b506103c360048036038101906103be9190612e3a565b610c42565b6040516103d09190613484565b60405180910390f35b3480156103e557600080fd5b506103ee610c71565b6040516103fb91906137c8565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190612ecd565b610c7a565b6040516104389190613484565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190612e8d565b610cb1565b005b34801561047657600080fd5b5061047f610d14565b60405161048c91906133af565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190612f69565b610d3a565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190612d60565b610d4c565b6040516104f29190613484565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190612d60565b610da2565b005b34801561053057600080fd5b5061053961110c565b604051610546919061371c565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190612d60565b611112565b604051610583919061371c565b60405180910390f35b34801561059857600080fd5b506105a161115a565b005b3480156105af57600080fd5b506105b861116e565b6040516105c5919061371c565b60405180910390f35b3480156105da57600080fd5b506105e3611174565b6040516105f091906133af565b60405180910390f35b34801561060557600080fd5b5061060e61119a565b005b34801561061c57600080fd5b506106256111c0565b604051610632919061371c565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190612f69565b6111c6565b005b34801561067057600080fd5b506106796111d8565b60405161068691906133af565b60405180910390f35b34801561069b57600080fd5b506106a4611202565b6040516106b191906134ba565b60405180910390f35b3480156106c657600080fd5b506106cf611294565b6040516106dc919061371c565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190612e8d565b61129a565b005b34801561071a57600080fd5b5061073560048036038101906107309190612ecd565b611341565b6040516107429190613484565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190612ecd565b6113b8565b60405161077f9190613484565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612f69565b6113db565b005b3480156107bd57600080fd5b506107d860048036038101906107d39190612f69565b6113ed565b005b3480156107e657600080fd5b5061080160048036038101906107fc9190612d60565b6113ff565b60405161080e9190613484565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190612e8d565b61141f565b005b34801561084c57600080fd5b5061086760048036038101906108629190612f0d565b611563565b005b34801561087557600080fd5b5061087e611639565b005b34801561088c57600080fd5b506108a760048036038101906108a29190612dfa565b6116aa565b6040516108b4919061371c565b60405180910390f35b3480156108c957600080fd5b506108d2611731565b6040516108df919061371c565b60405180910390f35b3480156108f457600080fd5b506108fd611737565b60405161090a919061371c565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190612f69565b61173d565b005b34801561094857600080fd5b50610963600480360381019061095e9190612dba565b61174f565b005b34801561097157600080fd5b5061098c60048036038101906109879190612d60565b611808565b005b34801561099a57600080fd5b506109a361188c565b6040516109b0919061371c565b60405180910390f35b6060600380546109c890613a8b565b80601f01602080910402602001604051908101604052809291908181526020018280546109f490613a8b565b8015610a415780601f10610a1657610100808354040283529160200191610a41565b820191906000526020600020905b815481529060010190602001808311610a2457829003601f168201915b5050505050905090565b610a53611892565b6000600c5490506000811115610b80576001600660146101000a81548160ff021916908315150217905550610a8781611910565b60004790506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610ad49061339a565b60006040518083038185875af1925050503d8060008114610b11576040519150601f19603f3d011682016040523d82523d6000602084013e610b16565b606091505b5050905080610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b519061365c565b60405180910390fd5b6000600c819055506000600660146101000a81548160ff02191690831515021790555050505b50565b600080610b8e611b62565b9050610b9b818585611b6a565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60126020528060005260406000206000915054906101000a900460ff1681565b610bfe611892565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610c4d611b62565b9050610c5a858285611d35565b610c65858585611dc1565b60019150509392505050565b60006012905090565b600080610c85611b62565b9050610ca6818585610c9785896116aa565b610ca19190613894565b611b6a565b600191505092915050565b610cb9611892565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d42611892565b80600a8190555050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610daa611892565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e32906135bc565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f6257600080fd5b505afa158015610f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9a9190612d8d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561101e57600080fd5b505afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110569190612d8d565b6040518363ffffffff1660e01b81526004016110739291906133ca565b602060405180830381600087803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c59190612d8d565b905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600d5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611162611892565b61116c600061236f565b565b60095481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d54905060008111156111bd576111b43082612435565b6000600d819055505b50565b600b5481565b6111ce611892565b8060098190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461121190613a8b565b80601f016020809104026020016040519081016040528092919081815260200182805461123d90613a8b565b801561128a5780601f1061125f5761010080835404028352916020019161128a565b820191906000526020600020905b81548152906001019060200180831161126d57829003601f168201915b5050505050905090565b60085481565b6112a2611892565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a906135dc565b60405180910390fd5b61133d828261260c565b5050565b60008061134c611b62565b9050600061135a82866116aa565b90508381101561139f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611396906136fc565b60405180910390fd5b6113ac8286868403611b6a565b60019250505092915050565b6000806113c3611b62565b90506113d0818585611dc1565b600191505092915050565b6113e3611892565b8060088190555050565b6113f5611892565b8060078190555050565b60116020528060005260406000206000915054906101000a900460ff1681565b611427611892565b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b1906136dc565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115579190613484565b60405180910390a25050565b61156b611892565b60005b82518110156115fb57816010600085848151811061158f5761158e613bc4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806115f390613aee565b91505061156e565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35828260405161162d929190613454565b60405180910390a15050565b611641611892565b6001600660146101000a81548160ff0219169083151502179055506000600d54600c5461166d30611112565b6116779190613975565b6116819190613975565b905061168c81612740565b6000600660146101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b600c5481565b611745611892565b80600b8190555050565b611757611892565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161177d9061339a565b60006040518083038185875af1925050503d80600081146117ba576040519150601f19603f3d011682016040523d82523d6000602084013e6117bf565b606091505b5050905080611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa9061365c565b60405180910390fd5b505050565b611810611892565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118779061351c565b60405180910390fd5b6118898161236f565b50565b600a5481565b61189a611b62565b73ffffffffffffffffffffffffffffffffffffffff166118b86111d8565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119059061363c565b60405180910390fd5b565b6000600267ffffffffffffffff81111561192d5761192c613bf3565b5b60405190808252806020026020018201604052801561195b5781602001602082028036833780820191505090505b509050308160008151811061197357611972613bc4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a1557600080fd5b505afa158015611a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4d9190612d8d565b81600181518110611a6157611a60613bc4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611ac830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b6a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611b2c959493929190613737565b600060405180830381600087803b158015611b4657600080fd5b505af1158015611b5a573d6000803e3d6000fd5b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd1906136bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c419061353c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d28919061371c565b60405180910390a3505050565b6000611d4184846116aa565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611dbb5781811015611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da49061357c565b60405180910390fd5b611dba8484848403611b6a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e289061369c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e98906134dc565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f455750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7b9061361c565b60405180910390fd5b6000811415611f9e57611f99838360006127cb565b61236a565b600660149054906101000a900460ff16158015611fee5750611fbe6111d8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561202d5750611ffd6111d8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561207857600b54811115612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e906135fc565b60405180910390fd5b5b6000600d54600c5461208930611112565b6120939190613975565b61209d9190613975565b9050600060075482101590508080156120c35750600660149054906101000a900460ff16155b80156121195750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561215857506121286111d8565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561219757506121676111d8565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156121ec576001600660146101000a81548160ff0219169083151502179055506121c082612740565b6121c8612a4c565b6121d061119a565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122a25750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122ac57600090505b801561235b5760006064600854866122c4919061391b565b6122ce91906138ea565b905060006064600954876122e2919061391b565b6122ec91906138ea565b905080600c546122fc9190613894565b600c8190555060006064600a5488612314919061391b565b61231e91906138ea565b905080600d5461232e9190613894565b600d819055506000818385010190506123488a30836127cb565b80886123549190613975565b9750505050505b6123668686866127cb565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249c9061367c565b60405180910390fd5b6124b182600083612b46565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e906134fc565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461258e9190613975565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125f3919061371c565b60405180910390a361260783600084612b4b565b505050565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561269f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126969061355c565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600060028261274f91906138ea565b90506000818361275f9190613975565b9050600047905061276f83611910565b6000814761277d9190613975565b90506127898382612b50565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516127bc93929190613791565b60405180910390a15050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561283b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128329061369c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a2906134dc565b60405180910390fd5b6128b6838383612b46565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561293c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129339061359c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129cf9190613894565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a33919061371c565b60405180910390a3612a46848484612b4b565b50505050565b6000600c5490506000811115612b4357612a6581611910565b60004790506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612ab29061339a565b60006040518083038185875af1925050503d8060008114612aef576040519150601f19603f3d011682016040523d82523d6000602084013e612af4565b606091505b5050905080612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f9061365c565b60405180910390fd5b6000600c8190555050505b50565b505050565b505050565b612b7d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b6a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612bc96111d8565b426040518863ffffffff1660e01b8152600401612beb969594939291906133f3565b6060604051808303818588803b158015612c0457600080fd5b505af1158015612c18573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c3d9190612f96565b5050505050565b6000612c57612c5284613808565b6137e3565b90508083825260208201905082856020860282011115612c7a57612c79613c27565b5b60005b85811015612caa5781612c908882612cb4565b845260208401935060208301925050600181019050612c7d565b5050509392505050565b600081359050612cc38161418c565b92915050565b600081519050612cd88161418c565b92915050565b600081359050612ced816141a3565b92915050565b600082601f830112612d0857612d07613c22565b5b8135612d18848260208601612c44565b91505092915050565b600081359050612d30816141ba565b92915050565b600081359050612d45816141d1565b92915050565b600081519050612d5a816141d1565b92915050565b600060208284031215612d7657612d75613c31565b5b6000612d8484828501612cb4565b91505092915050565b600060208284031215612da357612da2613c31565b5b6000612db184828501612cc9565b91505092915050565b60008060408385031215612dd157612dd0613c31565b5b6000612ddf85828601612cde565b9250506020612df085828601612d36565b9150509250929050565b60008060408385031215612e1157612e10613c31565b5b6000612e1f85828601612cb4565b9250506020612e3085828601612cb4565b9150509250929050565b600080600060608486031215612e5357612e52613c31565b5b6000612e6186828701612cb4565b9350506020612e7286828701612cb4565b9250506040612e8386828701612d36565b9150509250925092565b60008060408385031215612ea457612ea3613c31565b5b6000612eb285828601612cb4565b9250506020612ec385828601612d21565b9150509250929050565b60008060408385031215612ee457612ee3613c31565b5b6000612ef285828601612cb4565b9250506020612f0385828601612d36565b9150509250929050565b60008060408385031215612f2457612f23613c31565b5b600083013567ffffffffffffffff811115612f4257612f41613c2c565b5b612f4e85828601612cf3565b9250506020612f5f85828601612d21565b9150509250929050565b600060208284031215612f7f57612f7e613c31565b5b6000612f8d84828501612d36565b91505092915050565b600080600060608486031215612faf57612fae613c31565b5b6000612fbd86828701612d4b565b9350506020612fce86828701612d4b565b9250506040612fdf86828701612d4b565b9150509250925092565b6000612ff58383613001565b60208301905092915050565b61300a816139a9565b82525050565b613019816139a9565b82525050565b600061302a82613844565b6130348185613867565b935061303f83613834565b8060005b838110156130705781516130578882612fe9565b97506130628361385a565b925050600181019050613043565b5085935050505092915050565b613086816139cd565b82525050565b61309581613a10565b82525050565b6130a481613a22565b82525050565b60006130b58261384f565b6130bf8185613883565b93506130cf818560208601613a58565b6130d881613c36565b840191505092915050565b60006130f0602383613883565b91506130fb82613c47565b604082019050919050565b6000613113602283613883565b915061311e82613c96565b604082019050919050565b6000613136602683613883565b915061314182613ce5565b604082019050919050565b6000613159602283613883565b915061316482613d34565b604082019050919050565b600061317c603883613883565b915061318782613d83565b604082019050919050565b600061319f601d83613883565b91506131aa82613dd2565b602082019050919050565b60006131c2602683613883565b91506131cd82613dfb565b604082019050919050565b60006131e5602383613883565b91506131f082613e4a565b604082019050919050565b6000613208604183613883565b915061321382613e99565b606082019050919050565b600061322b602883613883565b915061323682613f0e565b604082019050919050565b600061324e601383613883565b915061325982613f5d565b602082019050919050565b6000613271602083613883565b915061327c82613f86565b602082019050919050565b6000613294603683613883565b915061329f82613faf565b604082019050919050565b60006132b7602183613883565b91506132c282613ffe565b604082019050919050565b60006132da602583613883565b91506132e58261404d565b604082019050919050565b60006132fd600083613878565b91506133088261409c565b600082019050919050565b6000613320602483613883565b915061332b8261409f565b604082019050919050565b6000613343602a83613883565b915061334e826140ee565b604082019050919050565b6000613366602583613883565b91506133718261413d565b604082019050919050565b613385816139f9565b82525050565b61339481613a03565b82525050565b60006133a5826132f0565b9150819050919050565b60006020820190506133c46000830184613010565b92915050565b60006040820190506133df6000830185613010565b6133ec6020830184613010565b9392505050565b600060c0820190506134086000830189613010565b613415602083018861337c565b613422604083018761309b565b61342f606083018661309b565b61343c6080830185613010565b61344960a083018461337c565b979650505050505050565b6000604082019050818103600083015261346e818561301f565b905061347d602083018461307d565b9392505050565b6000602082019050613499600083018461307d565b92915050565b60006020820190506134b4600083018461308c565b92915050565b600060208201905081810360008301526134d481846130aa565b905092915050565b600060208201905081810360008301526134f5816130e3565b9050919050565b6000602082019050818103600083015261351581613106565b9050919050565b6000602082019050818103600083015261353581613129565b9050919050565b600060208201905081810360008301526135558161314c565b9050919050565b600060208201905081810360008301526135758161316f565b9050919050565b6000602082019050818103600083015261359581613192565b9050919050565b600060208201905081810360008301526135b5816131b5565b9050919050565b600060208201905081810360008301526135d5816131d8565b9050919050565b600060208201905081810360008301526135f5816131fb565b9050919050565b600060208201905081810360008301526136158161321e565b9050919050565b6000602082019050818103600083015261363581613241565b9050919050565b6000602082019050818103600083015261365581613264565b9050919050565b6000602082019050818103600083015261367581613287565b9050919050565b60006020820190508181036000830152613695816132aa565b9050919050565b600060208201905081810360008301526136b5816132cd565b9050919050565b600060208201905081810360008301526136d581613313565b9050919050565b600060208201905081810360008301526136f581613336565b9050919050565b6000602082019050818103600083015261371581613359565b9050919050565b6000602082019050613731600083018461337c565b92915050565b600060a08201905061374c600083018861337c565b613759602083018761309b565b818103604083015261376b818661301f565b905061377a6060830185613010565b613787608083018461337c565b9695505050505050565b60006060820190506137a6600083018661337c565b6137b3602083018561337c565b6137c0604083018461337c565b949350505050565b60006020820190506137dd600083018461338b565b92915050565b60006137ed6137fe565b90506137f98282613abd565b919050565b6000604051905090565b600067ffffffffffffffff82111561382357613822613bf3565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061389f826139f9565b91506138aa836139f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138df576138de613b37565b5b828201905092915050565b60006138f5826139f9565b9150613900836139f9565b9250826139105761390f613b66565b5b828204905092915050565b6000613926826139f9565b9150613931836139f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561396a57613969613b37565b5b828202905092915050565b6000613980826139f9565b915061398b836139f9565b92508282101561399e5761399d613b37565b5b828203905092915050565b60006139b4826139d9565b9050919050565b60006139c6826139d9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613a1b82613a34565b9050919050565b6000613a2d826139f9565b9050919050565b6000613a3f82613a46565b9050919050565b6000613a51826139d9565b9050919050565b60005b83811015613a76578082015181840152602081019050613a5b565b83811115613a85576000848401525b50505050565b60006002820490506001821680613aa357607f821691505b60208210811415613ab757613ab6613b95565b5b50919050565b613ac682613c36565b810181811067ffffffffffffffff82111715613ae557613ae4613bf3565b5b80604052505050565b6000613af9826139f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b2c57613b2b613b37565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b7f7472616e736665723a20616d6f756e74206578636565647320746865206d617860008201527f5478416d6f756e74000000000000000000000000000000000000000000000000602082015250565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416464726573733a20756e61626c6520746f20657874726163742076616c756560008201527f2c207478206d6179206861766520726576657274656400000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b614195816139a9565b81146141a057600080fd5b50565b6141ac816139bb565b81146141b757600080fd5b50565b6141c3816139cd565b81146141ce57600080fd5b50565b6141da816139f9565b81146141e557600080fd5b5056fea26469706673582212204652d8c2b3c440ac1cda08b5ae804412e6e6f85048f2b523ed51cc648a80f2d564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102555760003560e01c80638c0b5e2211610139578063b62496f5116100b6578063e2f456051161007a578063e2f45605146108bd578063e6d4875f146108e8578063ec28438a14610913578063f19ae7931461093c578063f2fde38b14610965578063fce589d81461098e5761025c565b8063b62496f5146107da578063c024666814610817578063c492f04614610840578063d1a1f31814610869578063dd62ed3e146108805761025c565b80639a7a23d6116100fd5780639a7a23d6146106e5578063a457c2d71461070e578063a9059cbb1461074b578063adefd90c14610788578063afa4f3b2146107b15761025c565b80638c0b5e22146106105780638c9a5a311461063b5780638da5cb5b1461066457806395d89b411461068f57806398118cb4146106ba5761025c565b8063455a4396116101d25780636a6029cd116101965780636a6029cd1461052457806370a082311461054f578063715018a61461058c578063729ca707146105a357806375f0a874146105ce5780637ff7403f146105f95761025c565b8063455a43961461044157806349bd5a5e1461046a5780634bf2c7c9146104955780634fbee193146104be57806365b8dbc0146104fb5761025c565b80631cdd3be3116102195780631cdd3be314610336578063224611731461037357806323b872dd1461039c578063313ce567146103d957806339509351146104045761025c565b806306fdde031461026157806307dce0f81461028c578063095ea7b3146102a35780631694505e146102e057806318160ddd1461030b5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109b9565b60405161028391906134ba565b60405180910390f35b34801561029857600080fd5b506102a1610a4b565b005b3480156102af57600080fd5b506102ca60048036038101906102c59190612ecd565b610b83565b6040516102d79190613484565b60405180910390f35b3480156102ec57600080fd5b506102f5610ba6565b604051610302919061349f565b60405180910390f35b34801561031757600080fd5b50610320610bcc565b60405161032d919061371c565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190612d60565b610bd6565b60405161036a9190613484565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190612d60565b610bf6565b005b3480156103a857600080fd5b506103c360048036038101906103be9190612e3a565b610c42565b6040516103d09190613484565b60405180910390f35b3480156103e557600080fd5b506103ee610c71565b6040516103fb91906137c8565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190612ecd565b610c7a565b6040516104389190613484565b60405180910390f35b34801561044d57600080fd5b5061046860048036038101906104639190612e8d565b610cb1565b005b34801561047657600080fd5b5061047f610d14565b60405161048c91906133af565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190612f69565b610d3a565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190612d60565b610d4c565b6040516104f29190613484565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190612d60565b610da2565b005b34801561053057600080fd5b5061053961110c565b604051610546919061371c565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190612d60565b611112565b604051610583919061371c565b60405180910390f35b34801561059857600080fd5b506105a161115a565b005b3480156105af57600080fd5b506105b861116e565b6040516105c5919061371c565b60405180910390f35b3480156105da57600080fd5b506105e3611174565b6040516105f091906133af565b60405180910390f35b34801561060557600080fd5b5061060e61119a565b005b34801561061c57600080fd5b506106256111c0565b604051610632919061371c565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190612f69565b6111c6565b005b34801561067057600080fd5b506106796111d8565b60405161068691906133af565b60405180910390f35b34801561069b57600080fd5b506106a4611202565b6040516106b191906134ba565b60405180910390f35b3480156106c657600080fd5b506106cf611294565b6040516106dc919061371c565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190612e8d565b61129a565b005b34801561071a57600080fd5b5061073560048036038101906107309190612ecd565b611341565b6040516107429190613484565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190612ecd565b6113b8565b60405161077f9190613484565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612f69565b6113db565b005b3480156107bd57600080fd5b506107d860048036038101906107d39190612f69565b6113ed565b005b3480156107e657600080fd5b5061080160048036038101906107fc9190612d60565b6113ff565b60405161080e9190613484565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190612e8d565b61141f565b005b34801561084c57600080fd5b5061086760048036038101906108629190612f0d565b611563565b005b34801561087557600080fd5b5061087e611639565b005b34801561088c57600080fd5b506108a760048036038101906108a29190612dfa565b6116aa565b6040516108b4919061371c565b60405180910390f35b3480156108c957600080fd5b506108d2611731565b6040516108df919061371c565b60405180910390f35b3480156108f457600080fd5b506108fd611737565b60405161090a919061371c565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190612f69565b61173d565b005b34801561094857600080fd5b50610963600480360381019061095e9190612dba565b61174f565b005b34801561097157600080fd5b5061098c60048036038101906109879190612d60565b611808565b005b34801561099a57600080fd5b506109a361188c565b6040516109b0919061371c565b60405180910390f35b6060600380546109c890613a8b565b80601f01602080910402602001604051908101604052809291908181526020018280546109f490613a8b565b8015610a415780601f10610a1657610100808354040283529160200191610a41565b820191906000526020600020905b815481529060010190602001808311610a2457829003601f168201915b5050505050905090565b610a53611892565b6000600c5490506000811115610b80576001600660146101000a81548160ff021916908315150217905550610a8781611910565b60004790506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610ad49061339a565b60006040518083038185875af1925050503d8060008114610b11576040519150601f19603f3d011682016040523d82523d6000602084013e610b16565b606091505b5050905080610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b519061365c565b60405180910390fd5b6000600c819055506000600660146101000a81548160ff02191690831515021790555050505b50565b600080610b8e611b62565b9050610b9b818585611b6a565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60126020528060005260406000206000915054906101000a900460ff1681565b610bfe611892565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610c4d611b62565b9050610c5a858285611d35565b610c65858585611dc1565b60019150509392505050565b60006012905090565b600080610c85611b62565b9050610ca6818585610c9785896116aa565b610ca19190613894565b611b6a565b600191505092915050565b610cb9611892565b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d42611892565b80600a8190555050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610daa611892565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e32906135bc565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f6257600080fd5b505afa158015610f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9a9190612d8d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561101e57600080fd5b505afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110569190612d8d565b6040518363ffffffff1660e01b81526004016110739291906133ca565b602060405180830381600087803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c59190612d8d565b905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600d5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611162611892565b61116c600061236f565b565b60095481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600d54905060008111156111bd576111b43082612435565b6000600d819055505b50565b600b5481565b6111ce611892565b8060098190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461121190613a8b565b80601f016020809104026020016040519081016040528092919081815260200182805461123d90613a8b565b801561128a5780601f1061125f5761010080835404028352916020019161128a565b820191906000526020600020905b81548152906001019060200180831161126d57829003601f168201915b5050505050905090565b60085481565b6112a2611892565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a906135dc565b60405180910390fd5b61133d828261260c565b5050565b60008061134c611b62565b9050600061135a82866116aa565b90508381101561139f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611396906136fc565b60405180910390fd5b6113ac8286868403611b6a565b60019250505092915050565b6000806113c3611b62565b90506113d0818585611dc1565b600191505092915050565b6113e3611892565b8060088190555050565b6113f5611892565b8060078190555050565b60116020528060005260406000206000915054906101000a900460ff1681565b611427611892565b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b1906136dc565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115579190613484565b60405180910390a25050565b61156b611892565b60005b82518110156115fb57816010600085848151811061158f5761158e613bc4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806115f390613aee565b91505061156e565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35828260405161162d929190613454565b60405180910390a15050565b611641611892565b6001600660146101000a81548160ff0219169083151502179055506000600d54600c5461166d30611112565b6116779190613975565b6116819190613975565b905061168c81612740565b6000600660146101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b600c5481565b611745611892565b80600b8190555050565b611757611892565b60008273ffffffffffffffffffffffffffffffffffffffff168260405161177d9061339a565b60006040518083038185875af1925050503d80600081146117ba576040519150601f19603f3d011682016040523d82523d6000602084013e6117bf565b606091505b5050905080611803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fa9061365c565b60405180910390fd5b505050565b611810611892565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611880576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118779061351c565b60405180910390fd5b6118898161236f565b50565b600a5481565b61189a611b62565b73ffffffffffffffffffffffffffffffffffffffff166118b86111d8565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119059061363c565b60405180910390fd5b565b6000600267ffffffffffffffff81111561192d5761192c613bf3565b5b60405190808252806020026020018201604052801561195b5781602001602082028036833780820191505090505b509050308160008151811061197357611972613bc4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a1557600080fd5b505afa158015611a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4d9190612d8d565b81600181518110611a6157611a60613bc4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611ac830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b6a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611b2c959493929190613737565b600060405180830381600087803b158015611b4657600080fd5b505af1158015611b5a573d6000803e3d6000fd5b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd1906136bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c419061353c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d28919061371c565b60405180910390a3505050565b6000611d4184846116aa565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611dbb5781811015611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da49061357c565b60405180910390fd5b611dba8484848403611b6a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e289061369c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e98906134dc565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f455750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7b9061361c565b60405180910390fd5b6000811415611f9e57611f99838360006127cb565b61236a565b600660149054906101000a900460ff16158015611fee5750611fbe6111d8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561202d5750611ffd6111d8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561207857600b54811115612077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206e906135fc565b60405180910390fd5b5b6000600d54600c5461208930611112565b6120939190613975565b61209d9190613975565b9050600060075482101590508080156120c35750600660149054906101000a900460ff16155b80156121195750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561215857506121286111d8565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561219757506121676111d8565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156121ec576001600660146101000a81548160ff0219169083151502179055506121c082612740565b6121c8612a4c565b6121d061119a565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122a25750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156122ac57600090505b801561235b5760006064600854866122c4919061391b565b6122ce91906138ea565b905060006064600954876122e2919061391b565b6122ec91906138ea565b905080600c546122fc9190613894565b600c8190555060006064600a5488612314919061391b565b61231e91906138ea565b905080600d5461232e9190613894565b600d819055506000818385010190506123488a30836127cb565b80886123549190613975565b9750505050505b6123668686866127cb565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249c9061367c565b60405180910390fd5b6124b182600083612b46565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e906134fc565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461258e9190613975565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125f3919061371c565b60405180910390a361260783600084612b4b565b505050565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561269f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126969061355c565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600060028261274f91906138ea565b90506000818361275f9190613975565b9050600047905061276f83611910565b6000814761277d9190613975565b90506127898382612b50565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516127bc93929190613791565b60405180910390a15050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561283b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128329061369c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a2906134dc565b60405180910390fd5b6128b6838383612b46565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561293c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129339061359c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129cf9190613894565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a33919061371c565b60405180910390a3612a46848484612b4b565b50505050565b6000600c5490506000811115612b4357612a6581611910565b60004790506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612ab29061339a565b60006040518083038185875af1925050503d8060008114612aef576040519150601f19603f3d011682016040523d82523d6000602084013e612af4565b606091505b5050905080612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f9061365c565b60405180910390fd5b6000600c8190555050505b50565b505050565b505050565b612b7d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b6a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612bc96111d8565b426040518863ffffffff1660e01b8152600401612beb969594939291906133f3565b6060604051808303818588803b158015612c0457600080fd5b505af1158015612c18573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c3d9190612f96565b5050505050565b6000612c57612c5284613808565b6137e3565b90508083825260208201905082856020860282011115612c7a57612c79613c27565b5b60005b85811015612caa5781612c908882612cb4565b845260208401935060208301925050600181019050612c7d565b5050509392505050565b600081359050612cc38161418c565b92915050565b600081519050612cd88161418c565b92915050565b600081359050612ced816141a3565b92915050565b600082601f830112612d0857612d07613c22565b5b8135612d18848260208601612c44565b91505092915050565b600081359050612d30816141ba565b92915050565b600081359050612d45816141d1565b92915050565b600081519050612d5a816141d1565b92915050565b600060208284031215612d7657612d75613c31565b5b6000612d8484828501612cb4565b91505092915050565b600060208284031215612da357612da2613c31565b5b6000612db184828501612cc9565b91505092915050565b60008060408385031215612dd157612dd0613c31565b5b6000612ddf85828601612cde565b9250506020612df085828601612d36565b9150509250929050565b60008060408385031215612e1157612e10613c31565b5b6000612e1f85828601612cb4565b9250506020612e3085828601612cb4565b9150509250929050565b600080600060608486031215612e5357612e52613c31565b5b6000612e6186828701612cb4565b9350506020612e7286828701612cb4565b9250506040612e8386828701612d36565b9150509250925092565b60008060408385031215612ea457612ea3613c31565b5b6000612eb285828601612cb4565b9250506020612ec385828601612d21565b9150509250929050565b60008060408385031215612ee457612ee3613c31565b5b6000612ef285828601612cb4565b9250506020612f0385828601612d36565b9150509250929050565b60008060408385031215612f2457612f23613c31565b5b600083013567ffffffffffffffff811115612f4257612f41613c2c565b5b612f4e85828601612cf3565b9250506020612f5f85828601612d21565b9150509250929050565b600060208284031215612f7f57612f7e613c31565b5b6000612f8d84828501612d36565b91505092915050565b600080600060608486031215612faf57612fae613c31565b5b6000612fbd86828701612d4b565b9350506020612fce86828701612d4b565b9250506040612fdf86828701612d4b565b9150509250925092565b6000612ff58383613001565b60208301905092915050565b61300a816139a9565b82525050565b613019816139a9565b82525050565b600061302a82613844565b6130348185613867565b935061303f83613834565b8060005b838110156130705781516130578882612fe9565b97506130628361385a565b925050600181019050613043565b5085935050505092915050565b613086816139cd565b82525050565b61309581613a10565b82525050565b6130a481613a22565b82525050565b60006130b58261384f565b6130bf8185613883565b93506130cf818560208601613a58565b6130d881613c36565b840191505092915050565b60006130f0602383613883565b91506130fb82613c47565b604082019050919050565b6000613113602283613883565b915061311e82613c96565b604082019050919050565b6000613136602683613883565b915061314182613ce5565b604082019050919050565b6000613159602283613883565b915061316482613d34565b604082019050919050565b600061317c603883613883565b915061318782613d83565b604082019050919050565b600061319f601d83613883565b91506131aa82613dd2565b602082019050919050565b60006131c2602683613883565b91506131cd82613dfb565b604082019050919050565b60006131e5602383613883565b91506131f082613e4a565b604082019050919050565b6000613208604183613883565b915061321382613e99565b606082019050919050565b600061322b602883613883565b915061323682613f0e565b604082019050919050565b600061324e601383613883565b915061325982613f5d565b602082019050919050565b6000613271602083613883565b915061327c82613f86565b602082019050919050565b6000613294603683613883565b915061329f82613faf565b604082019050919050565b60006132b7602183613883565b91506132c282613ffe565b604082019050919050565b60006132da602583613883565b91506132e58261404d565b604082019050919050565b60006132fd600083613878565b91506133088261409c565b600082019050919050565b6000613320602483613883565b915061332b8261409f565b604082019050919050565b6000613343602a83613883565b915061334e826140ee565b604082019050919050565b6000613366602583613883565b91506133718261413d565b604082019050919050565b613385816139f9565b82525050565b61339481613a03565b82525050565b60006133a5826132f0565b9150819050919050565b60006020820190506133c46000830184613010565b92915050565b60006040820190506133df6000830185613010565b6133ec6020830184613010565b9392505050565b600060c0820190506134086000830189613010565b613415602083018861337c565b613422604083018761309b565b61342f606083018661309b565b61343c6080830185613010565b61344960a083018461337c565b979650505050505050565b6000604082019050818103600083015261346e818561301f565b905061347d602083018461307d565b9392505050565b6000602082019050613499600083018461307d565b92915050565b60006020820190506134b4600083018461308c565b92915050565b600060208201905081810360008301526134d481846130aa565b905092915050565b600060208201905081810360008301526134f5816130e3565b9050919050565b6000602082019050818103600083015261351581613106565b9050919050565b6000602082019050818103600083015261353581613129565b9050919050565b600060208201905081810360008301526135558161314c565b9050919050565b600060208201905081810360008301526135758161316f565b9050919050565b6000602082019050818103600083015261359581613192565b9050919050565b600060208201905081810360008301526135b5816131b5565b9050919050565b600060208201905081810360008301526135d5816131d8565b9050919050565b600060208201905081810360008301526135f5816131fb565b9050919050565b600060208201905081810360008301526136158161321e565b9050919050565b6000602082019050818103600083015261363581613241565b9050919050565b6000602082019050818103600083015261365581613264565b9050919050565b6000602082019050818103600083015261367581613287565b9050919050565b60006020820190508181036000830152613695816132aa565b9050919050565b600060208201905081810360008301526136b5816132cd565b9050919050565b600060208201905081810360008301526136d581613313565b9050919050565b600060208201905081810360008301526136f581613336565b9050919050565b6000602082019050818103600083015261371581613359565b9050919050565b6000602082019050613731600083018461337c565b92915050565b600060a08201905061374c600083018861337c565b613759602083018761309b565b818103604083015261376b818661301f565b905061377a6060830185613010565b613787608083018461337c565b9695505050505050565b60006060820190506137a6600083018661337c565b6137b3602083018561337c565b6137c0604083018461337c565b949350505050565b60006020820190506137dd600083018461338b565b92915050565b60006137ed6137fe565b90506137f98282613abd565b919050565b6000604051905090565b600067ffffffffffffffff82111561382357613822613bf3565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061389f826139f9565b91506138aa836139f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138df576138de613b37565b5b828201905092915050565b60006138f5826139f9565b9150613900836139f9565b9250826139105761390f613b66565b5b828204905092915050565b6000613926826139f9565b9150613931836139f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561396a57613969613b37565b5b828202905092915050565b6000613980826139f9565b915061398b836139f9565b92508282101561399e5761399d613b37565b5b828203905092915050565b60006139b4826139d9565b9050919050565b60006139c6826139d9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613a1b82613a34565b9050919050565b6000613a2d826139f9565b9050919050565b6000613a3f82613a46565b9050919050565b6000613a51826139d9565b9050919050565b60005b83811015613a76578082015181840152602081019050613a5b565b83811115613a85576000848401525b50505050565b60006002820490506001821680613aa357607f821691505b60208210811415613ab757613ab6613b95565b5b50919050565b613ac682613c36565b810181811067ffffffffffffffff82111715613ae557613ae4613bf3565b5b80604052505050565b6000613af9826139f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b2c57613b2b613b37565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b7f7472616e736665723a20616d6f756e74206578636565647320746865206d617860008201527f5478416d6f756e74000000000000000000000000000000000000000000000000602082015250565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f416464726573733a20756e61626c6520746f20657874726163742076616c756560008201527f2c207478206d6179206861766520726576657274656400000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b614195816139a9565b81146141a057600080fd5b50565b6141ac816139bb565b81146141b757600080fd5b50565b6141c3816139cd565b81146141ce57600080fd5b50565b6141da816139f9565b81146141e557600080fd5b5056fea26469706673582212204652d8c2b3c440ac1cda08b5ae804412e6e6f85048f2b523ed51cc648a80f2d564736f6c63430008070033

Deployed Bytecode Sourcemap

20908:9623:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9367:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27638:532;;;;;;;;;;;;;:::i;:::-;;11718:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20953:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10487:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21666:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28410:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12499:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10329:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13203:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24742:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21419:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24271:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25459:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22831:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21295:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10658:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2790:103;;;;;;;;;;;;;:::i;:::-;;21134:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21337:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28178:224;;;;;;;;;;;;;:::i;:::-;;21207:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24162:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2142:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9586:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21096:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24480:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13944:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10991:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24054:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23935:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21601:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23331:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23627:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25189:262;;;;;;;;;;;;;:::i;:::-;;11247:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21041:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21254:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24370:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30271:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3048:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21172:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9367:100;9421:13;9454:5;9447:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9367:100;:::o;27638:532::-;2028:13;:11;:13::i;:::-;27698:25:::1;27726:19;;27698:47;;27783:1;27760:20;:24;27756:407;;;27818:4;27807:8;;:15;;;;;;;;;;;;;;;;;;27837:38;27854:20;27837:16;:38::i;:::-;27886:11;27900:21;27886:35;;27933:12;27959:15;;;;;;;;;;;27951:29;;27989:6;27951:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27932:69;;;28020:7;28012:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28119:1;28097:19;:23;;;;28142:5;28131:8;;:16;;;;;;;;;;;;;;;;;;27796:367;;27756:407;27687:483;27638:532::o:0;11718:201::-;11801:4;11818:13;11834:12;:10;:12::i;:::-;11818:28;;11857:32;11866:5;11873:7;11882:6;11857:8;:32::i;:::-;11907:4;11900:11;;;11718:201;;;;:::o;20953:41::-;;;;;;;;;;;;;:::o;10487:108::-;10548:7;10575:12;;10568:19;;10487:108;:::o;21666:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;28410:122::-;2028:13;:11;:13::i;:::-;28510:14:::1;28492:15;;:32;;;;;;;;;;;;;;;;;;28410:122:::0;:::o;12499:295::-;12630:4;12647:15;12665:12;:10;:12::i;:::-;12647:30;;12688:38;12704:4;12710:7;12719:6;12688:15;:38::i;:::-;12737:27;12747:4;12753:2;12757:6;12737:9;:27::i;:::-;12782:4;12775:11;;;12499:295;;;;;:::o;10329:93::-;10387:5;10412:2;10405:9;;10329:93;:::o;13203:238::-;13291:4;13308:13;13324:12;:10;:12::i;:::-;13308:28;;13347:64;13356:5;13363:7;13400:10;13372:25;13382:5;13389:7;13372:9;:25::i;:::-;:38;;;;:::i;:::-;13347:8;:64::i;:::-;13429:4;13422:11;;;13203:238;;;;:::o;24742:123::-;2028:13;:11;:13::i;:::-;24852:5:::1;24826:14;:23;24841:7;24826:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24742:123:::0;;:::o;21419:28::-;;;;;;;;;;;;;:::o;24271:91::-;2028:13;:11;:13::i;:::-;24347:7:::1;24337;:17;;;;24271:91:::0;:::o;25459:125::-;25524:4;25548:19;:28;25568:7;25548:28;;;;;;;;;;;;;;;;;;;;;;;;;25541:35;;25459:125;;;:::o;22831:492::-;2028:13;:11;:13::i;:::-;22940:15:::1;;;;;;;;;;;22918:38;;:10;:38;;;;22910:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;23054:15;;;;;;;;;;;23012:59;;23034:10;23012:59;;;;;;;;;;;;23119:10;23082:15;;:48;;;;;;;;;;;;;;;;;;23141:22;23184:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23166:69;;;23244:4;23251:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23166:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23141:133;;23301:14;23285:13;;:30;;;;;;;;;;;;;;;;;;22899:424;22831:492:::0;:::o;21295:29::-;;;;:::o;10658:127::-;10732:7;10759:9;:18;10769:7;10759:18;;;;;;;;;;;;;;;;10752:25;;10658:127;;;:::o;2790:103::-;2028:13;:11;:13::i;:::-;2855:30:::1;2882:1;2855:18;:30::i;:::-;2790:103::o:0;21134:31::-;;;;:::o;21337:75::-;;;;;;;;;;;;;:::o;28178:224::-;28224:20;28247:14;;28224:37;;28294:1;28276:15;:19;28272:122;;;28312:37;28326:4;28333:15;28312:5;:37::i;:::-;28381:1;28364:14;:18;;;;28272:122;28213:189;28178:224::o;21207:38::-;;;;:::o;24162:101::-;2028:13;:11;:13::i;:::-;24248:7:::1;24233:12;:22;;;;24162:101:::0;:::o;2142:87::-;2188:7;2215:6;;;;;;;;;;;2208:13;;2142:87;:::o;9586:104::-;9642:13;9675:7;9668:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9586:104;:::o;21096:31::-;;;;:::o;24480:250::-;2028:13;:11;:13::i;:::-;24587::::1;;;;;;;;;;;24579:21;;:4;:21;;;;24571:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;24681:41;24710:4;24716:5;24681:28;:41::i;:::-;24480:250:::0;;:::o;13944:436::-;14037:4;14054:13;14070:12;:10;:12::i;:::-;14054:28;;14093:24;14120:25;14130:5;14137:7;14120:9;:25::i;:::-;14093:52;;14184:15;14164:16;:35;;14156:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14277:60;14286:5;14293:7;14321:15;14302:16;:34;14277:8;:60::i;:::-;14368:4;14361:11;;;;13944:436;;;;:::o;10991:193::-;11070:4;11087:13;11103:12;:10;:12::i;:::-;11087:28;;11126;11136:5;11143:2;11147:6;11126:9;:28::i;:::-;11172:4;11165:11;;;10991:193;;;;:::o;24054:100::-;2028:13;:11;:13::i;:::-;24139:7:::1;24124:12;:22;;;;24054:100:::0;:::o;23935:111::-;2028:13;:11;:13::i;:::-;24032:6:::1;24011:18;:27;;;;23935:111:::0;:::o;21601:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;23331:288::-;2028:13;:11;:13::i;:::-;23456:8:::1;23424:40;;:19;:28;23444:7;23424:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;23416:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;23553:8;23522:19;:28;23542:7;23522:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23593:7;23577:34;;;23602:8;23577:34;;;;;;:::i;:::-;;;;;;;;23331:288:::0;;:::o;23627:300::-;2028:13;:11;:13::i;:::-;23742:9:::1;23738:115;23761:8;:15;23757:1;:19;23738:115;;;23833:8;23798:19;:32;23818:8;23827:1;23818:11;;;;;;;;:::i;:::-;;;;;;;;23798:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;23778:3;;;;;:::i;:::-;;;;23738:115;;;;23868:51;23900:8;23910;23868:51;;;;;;;:::i;:::-;;;;;;;;23627:300:::0;;:::o;25189:262::-;2028:13;:11;:13::i;:::-;25254:4:::1;25243:8;;:15;;;;;;;;;;;;;;;;;;25269:33;25350:14;;25330:19;;25305:24;25323:4;25305:9;:24::i;:::-;:44;;;;:::i;:::-;:59;;;;:::i;:::-;25269:95;;25375:41;25390:25;25375:14;:41::i;:::-;25438:5;25427:8;;:16;;;;;;;;;;;;;;;;;;25232:219;25189:262::o:0;11247:151::-;11336:7;11363:11;:18;11375:5;11363:18;;;;;;;;;;;;;;;:27;11382:7;11363:27;;;;;;;;;;;;;;;;11356:34;;11247:151;;;;:::o;21041:46::-;;;;:::o;21254:34::-;;;;:::o;24370:102::-;2028:13;:11;:13::i;:::-;24457:7:::1;24443:11;:21;;;;24370:102:::0;:::o;30271:255::-;2028:13;:11;:13::i;:::-;30369:12:::1;30395:7;30387:21;;30417:6;30387:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30368:61;;;30448:7;30440:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30353:173;30271:255:::0;;:::o;3048:201::-;2028:13;:11;:13::i;:::-;3157:1:::1;3137:22;;:8;:22;;;;3129:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3213:28;3232:8;3213:18;:28::i;:::-;3048:201:::0;:::o;21172:26::-;;;;:::o;2307:132::-;2382:12;:10;:12::i;:::-;2371:23;;:7;:5;:7::i;:::-;:23;;;2363:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2307:132::o;29420:474::-;29486:21;29524:1;29510:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29486:40;;29555:4;29537;29542:1;29537:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29581:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29571:4;29576:1;29571:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29616:62;29633:4;29648:15;;;;;;;;;;;29666:11;29616:8;:62::i;:::-;29689:15;;;;;;;;;;;:66;;;29770:11;29796:1;29813:4;29840;29860:15;29689:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29475:419;29420:474;:::o;693:98::-;746:7;773:10;766:17;;693:98;:::o;17569:380::-;17722:1;17705:19;;:5;:19;;;;17697:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17803:1;17784:21;;:7;:21;;;;17776:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17887:6;17857:11;:18;17869:5;17857:18;;;;;;;;;;;;;;;:27;17876:7;17857:27;;;;;;;;;;;;;;;:36;;;;17925:7;17909:32;;17918:5;17909:32;;;17934:6;17909:32;;;;;;:::i;:::-;;;;;;;;17569:380;;;:::o;18240:453::-;18375:24;18402:25;18412:5;18419:7;18402:9;:25::i;:::-;18375:52;;18462:17;18442:16;:37;18438:248;;18524:6;18504:16;:26;;18496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18608:51;18617:5;18624:7;18652:6;18633:16;:25;18608:8;:51::i;:::-;18438:248;18364:329;18240:453;;;:::o;25592:2036::-;25740:1;25724:18;;:4;:18;;;;25716:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25817:1;25803:16;;:2;:16;;;;25795:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25879:14;:20;25894:4;25879:20;;;;;;;;;;;;;;;;;;;;;;;;;25878:21;:44;;;;;25904:14;:18;25919:2;25904:18;;;;;;;;;;;;;;;;;;;;;;;;;25903:19;25878:44;25870:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25972:1;25962:6;:11;25959:92;;;25990:28;26006:4;26012:2;26016:1;25990:15;:28::i;:::-;26033:7;;25959:92;26077:8;;;;;;;;;;;26076:9;:28;;;;;26097:7;:5;:7::i;:::-;26089:15;;:4;:15;;;;26076:28;:45;;;;;26114:7;:5;:7::i;:::-;26108:13;;:2;:13;;;;26076:45;26072:152;;;26156:11;;26146:6;:21;;26138:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26072:152;26245:33;26326:14;;26306:19;;26281:24;26299:4;26281:9;:24::i;:::-;:44;;;;:::i;:::-;:59;;;;:::i;:::-;26245:95;;26351:12;26395:18;;26366:25;:47;;26351:62;;26430:7;:33;;;;;26455:8;;;;;;;;;;;26454:9;26430:33;:82;;;;;26481:25;:31;26507:4;26481:31;;;;;;;;;;;;;;;;;;;;;;;;;26480:32;26430:82;:114;;;;;26537:7;:5;:7::i;:::-;26529:15;;:4;:15;;;;26430:114;:144;;;;;26567:7;:5;:7::i;:::-;26561:13;;:2;:13;;;;26430:144;26426:372;;;26622:4;26611:8;;:15;;;;;;;;;;;;;;;;;;26641:41;26656:25;26641:14;:41::i;:::-;26697:25;:23;:25::i;:::-;26737:18;:16;:18::i;:::-;26781:5;26770:8;;:16;;;;;;;;;;;;;;;;;;26426:372;26810:12;26826:8;;;;;;;;;;;26825:9;26810:24;;26848:19;:25;26868:4;26848:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26877:19;:23;26897:2;26877:23;;;;;;;;;;;;;;;;;;;;;;;;;26848:52;26845:99;;;26927:5;26917:15;;26845:99;26967:7;26964:613;;;27010:13;27049:3;27034:12;;27027:6;:19;;;;:::i;:::-;27026:27;;;;:::i;:::-;27010:43;;27100:13;27139:3;27124:12;;27117:6;:19;;;;:::i;:::-;27116:27;;;;:::i;:::-;27100:43;;27201:5;27180:19;;:27;;;;:::i;:::-;27158:19;:49;;;;27245:13;27279:3;27269:7;;27262:6;:14;;;;:::i;:::-;27261:22;;;;:::i;:::-;27245:38;;27332:5;27316:14;;:22;;;;:::i;:::-;27299:14;:39;;;;27355:14;27441:5;27433;27425;:13;:21;27413:33;;27478:47;27494:4;27508;27515:9;27478:15;:47::i;:::-;27556:9;27549:6;:16;;;;:::i;:::-;27540:25;;26976:601;;;;26964:613;27587:33;27603:4;27609:2;27613:6;27587:15;:33::i;:::-;25705:1923;;;25592:2036;;;;:::o;3409:191::-;3483:16;3502:6;;;;;;;;;;;3483:25;;3528:8;3519:6;;:17;;;;;;;;;;;;;;;;;;3583:8;3552:40;;3573:8;3552:40;;;;;;;;;;;;3472:128;3409:191;:::o;16540:591::-;16643:1;16624:21;;:7;:21;;;;16616:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16696:49;16717:7;16734:1;16738:6;16696:20;:49::i;:::-;16758:22;16783:9;:18;16793:7;16783:18;;;;;;;;;;;;;;;;16758:43;;16838:6;16820:14;:24;;16812:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16957:6;16940:14;:23;16919:9;:18;16929:7;16919:18;;;;;;;;;;;;;;;:44;;;;17001:6;16985:12;;:22;;;;;;;:::i;:::-;;;;;;;;17051:1;17025:37;;17034:7;17025:37;;;17055:6;17025:37;;;;;;:::i;:::-;;;;;;;;17075:48;17095:7;17112:1;17116:6;17075:19;:48::i;:::-;16605:526;16540:591;;:::o;24873:308::-;24999:5;24964:40;;:25;:31;24990:4;24964:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;24956:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;25110:5;25076:25;:31;25102:4;25076:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25167:5;25133:40;;25161:4;25133:40;;;;;;;;;;;;24873:308;;:::o;28540:399::-;28599:12;28621:1;28614:6;:8;;;;:::i;:::-;28599:23;;28633:17;28661:4;28653:6;:13;;;;:::i;:::-;28633:33;;28677:22;28702:21;28677:46;;28734:22;28751:4;28734:16;:22::i;:::-;28767:18;28811:14;28788:21;:38;;;;:::i;:::-;28767:59;;28837:35;28850:9;28861:10;28837:12;:35::i;:::-;28888:43;28903:4;28909:10;28921:9;28888:43;;;;;;;;:::i;:::-;;;;;;;;28588:351;;;;28540:399;:::o;14850:671::-;14997:1;14981:18;;:4;:18;;;;14973:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15074:1;15060:16;;:2;:16;;;;15052:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15129:38;15150:4;15156:2;15160:6;15129:20;:38::i;:::-;15180:19;15202:9;:15;15212:4;15202:15;;;;;;;;;;;;;;;;15180:37;;15251:6;15236:11;:21;;15228:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15368:6;15354:11;:20;15336:9;:15;15346:4;15336:15;;;;;;;;;;;;;;;:38;;;;15413:6;15396:9;:13;15406:2;15396:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;15452:2;15437:26;;15446:4;15437:26;;;15456:6;15437:26;;;;;;:::i;:::-;;;;;;;;15476:37;15496:4;15502:2;15506:6;15476:19;:37::i;:::-;14962:559;14850:671;;;:::o;28947:465::-;29001:25;29029:19;;29001:47;;29086:1;29063:20;:24;29059:346;;;29110:38;29127:20;29110:16;:38::i;:::-;29159:11;29173:21;29159:35;;29206:12;29232:15;;;;;;;;;;;29224:29;;29262:6;29224:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29205:69;;;29293:7;29285:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29392:1;29370:19;:23;;;;29099:306;;29059:346;28990:422;28947:465::o;19293:125::-;;;;:::o;20022:124::-;;;;:::o;29902:361::-;29983:62;30000:4;30015:15;;;;;;;;;;;30033:11;29983:8;:62::i;:::-;30056:15;;;;;;;;;;;:31;;;30095:9;30128:4;30148:11;30174:1;30191;30207:7;:5;:7::i;:::-;30229:15;30056:199;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29902:361;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1046:155::-;1100:5;1138:6;1125:20;1116:29;;1154:41;1189:5;1154:41;:::i;:::-;1046:155;;;;:::o;1224:370::-;1295:5;1344:3;1337:4;1329:6;1325:17;1321:27;1311:122;;1352:79;;:::i;:::-;1311:122;1469:6;1456:20;1494:94;1584:3;1576:6;1569:4;1561:6;1557:17;1494:94;:::i;:::-;1485:103;;1301:293;1224:370;;;;:::o;1600:133::-;1643:5;1681:6;1668:20;1659:29;;1697:30;1721:5;1697:30;:::i;:::-;1600:133;;;;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:143::-;1941:5;1972:6;1966:13;1957:22;;1988:33;2015:5;1988:33;:::i;:::-;1884:143;;;;:::o;2033:329::-;2092:6;2141:2;2129:9;2120:7;2116:23;2112:32;2109:119;;;2147:79;;:::i;:::-;2109:119;2267:1;2292:53;2337:7;2328:6;2317:9;2313:22;2292:53;:::i;:::-;2282:63;;2238:117;2033:329;;;;:::o;2368:351::-;2438:6;2487:2;2475:9;2466:7;2462:23;2458:32;2455:119;;;2493:79;;:::i;:::-;2455:119;2613:1;2638:64;2694:7;2685:6;2674:9;2670:22;2638:64;:::i;:::-;2628:74;;2584:128;2368:351;;;;:::o;2725:490::-;2801:6;2809;2858:2;2846:9;2837:7;2833:23;2829:32;2826:119;;;2864:79;;:::i;:::-;2826:119;2984:1;3009:61;3062:7;3053:6;3042:9;3038:22;3009:61;:::i;:::-;2999:71;;2955:125;3119:2;3145:53;3190:7;3181:6;3170:9;3166:22;3145:53;:::i;:::-;3135:63;;3090:118;2725:490;;;;;:::o;3221:474::-;3289:6;3297;3346:2;3334:9;3325:7;3321:23;3317:32;3314:119;;;3352:79;;:::i;:::-;3314:119;3472:1;3497:53;3542:7;3533:6;3522:9;3518:22;3497:53;:::i;:::-;3487:63;;3443:117;3599:2;3625:53;3670:7;3661:6;3650:9;3646:22;3625:53;:::i;:::-;3615:63;;3570:118;3221:474;;;;;:::o;3701:619::-;3778:6;3786;3794;3843:2;3831:9;3822:7;3818:23;3814:32;3811:119;;;3849:79;;:::i;:::-;3811:119;3969:1;3994:53;4039:7;4030:6;4019:9;4015:22;3994:53;:::i;:::-;3984:63;;3940:117;4096:2;4122:53;4167:7;4158:6;4147:9;4143:22;4122:53;:::i;:::-;4112:63;;4067:118;4224:2;4250:53;4295:7;4286:6;4275:9;4271:22;4250:53;:::i;:::-;4240:63;;4195:118;3701:619;;;;;:::o;4326:468::-;4391:6;4399;4448:2;4436:9;4427:7;4423:23;4419:32;4416:119;;;4454:79;;:::i;:::-;4416:119;4574:1;4599:53;4644:7;4635:6;4624:9;4620:22;4599:53;:::i;:::-;4589:63;;4545:117;4701:2;4727:50;4769:7;4760:6;4749:9;4745:22;4727:50;:::i;:::-;4717:60;;4672:115;4326:468;;;;;:::o;4800:474::-;4868:6;4876;4925:2;4913:9;4904:7;4900:23;4896:32;4893:119;;;4931:79;;:::i;:::-;4893:119;5051:1;5076:53;5121:7;5112:6;5101:9;5097:22;5076:53;:::i;:::-;5066:63;;5022:117;5178:2;5204:53;5249:7;5240:6;5229:9;5225:22;5204:53;:::i;:::-;5194:63;;5149:118;4800:474;;;;;:::o;5280:678::-;5370:6;5378;5427:2;5415:9;5406:7;5402:23;5398:32;5395:119;;;5433:79;;:::i;:::-;5395:119;5581:1;5570:9;5566:17;5553:31;5611:18;5603:6;5600:30;5597:117;;;5633:79;;:::i;:::-;5597:117;5738:78;5808:7;5799:6;5788:9;5784:22;5738:78;:::i;:::-;5728:88;;5524:302;5865:2;5891:50;5933:7;5924:6;5913:9;5909:22;5891:50;:::i;:::-;5881:60;;5836:115;5280:678;;;;;:::o;5964:329::-;6023:6;6072:2;6060:9;6051:7;6047:23;6043:32;6040:119;;;6078:79;;:::i;:::-;6040:119;6198:1;6223:53;6268:7;6259:6;6248:9;6244:22;6223:53;:::i;:::-;6213:63;;6169:117;5964:329;;;;:::o;6299:663::-;6387:6;6395;6403;6452:2;6440:9;6431:7;6427:23;6423:32;6420:119;;;6458:79;;:::i;:::-;6420:119;6578:1;6603:64;6659:7;6650:6;6639:9;6635:22;6603:64;:::i;:::-;6593:74;;6549:128;6716:2;6742:64;6798:7;6789:6;6778:9;6774:22;6742:64;:::i;:::-;6732:74;;6687:129;6855:2;6881:64;6937:7;6928:6;6917:9;6913:22;6881:64;:::i;:::-;6871:74;;6826:129;6299:663;;;;;:::o;6968:179::-;7037:10;7058:46;7100:3;7092:6;7058:46;:::i;:::-;7136:4;7131:3;7127:14;7113:28;;6968:179;;;;:::o;7153:108::-;7230:24;7248:5;7230:24;:::i;:::-;7225:3;7218:37;7153:108;;:::o;7267:118::-;7354:24;7372:5;7354:24;:::i;:::-;7349:3;7342:37;7267:118;;:::o;7421:732::-;7540:3;7569:54;7617:5;7569:54;:::i;:::-;7639:86;7718:6;7713:3;7639:86;:::i;:::-;7632:93;;7749:56;7799:5;7749:56;:::i;:::-;7828:7;7859:1;7844:284;7869:6;7866:1;7863:13;7844:284;;;7945:6;7939:13;7972:63;8031:3;8016:13;7972:63;:::i;:::-;7965:70;;8058:60;8111:6;8058:60;:::i;:::-;8048:70;;7904:224;7891:1;7888;7884:9;7879:14;;7844:284;;;7848:14;8144:3;8137:10;;7545:608;;;7421:732;;;;:::o;8159:109::-;8240:21;8255:5;8240:21;:::i;:::-;8235:3;8228:34;8159:109;;:::o;8274:183::-;8387:63;8444:5;8387:63;:::i;:::-;8382:3;8375:76;8274:183;;:::o;8463:147::-;8558:45;8597:5;8558:45;:::i;:::-;8553:3;8546:58;8463:147;;:::o;8616:364::-;8704:3;8732:39;8765:5;8732:39;:::i;:::-;8787:71;8851:6;8846:3;8787:71;:::i;:::-;8780:78;;8867:52;8912:6;8907:3;8900:4;8893:5;8889:16;8867:52;:::i;:::-;8944:29;8966:6;8944:29;:::i;:::-;8939:3;8935:39;8928:46;;8708:272;8616:364;;;;:::o;8986:366::-;9128:3;9149:67;9213:2;9208:3;9149:67;:::i;:::-;9142:74;;9225:93;9314:3;9225:93;:::i;:::-;9343:2;9338:3;9334:12;9327:19;;8986:366;;;:::o;9358:::-;9500:3;9521:67;9585:2;9580:3;9521:67;:::i;:::-;9514:74;;9597:93;9686:3;9597:93;:::i;:::-;9715:2;9710:3;9706:12;9699:19;;9358:366;;;:::o;9730:::-;9872:3;9893:67;9957:2;9952:3;9893:67;:::i;:::-;9886:74;;9969:93;10058:3;9969:93;:::i;:::-;10087:2;10082:3;10078:12;10071:19;;9730:366;;;:::o;10102:::-;10244:3;10265:67;10329:2;10324:3;10265:67;:::i;:::-;10258:74;;10341:93;10430:3;10341:93;:::i;:::-;10459:2;10454:3;10450:12;10443:19;;10102:366;;;:::o;10474:::-;10616:3;10637:67;10701:2;10696:3;10637:67;:::i;:::-;10630:74;;10713:93;10802:3;10713:93;:::i;:::-;10831:2;10826:3;10822:12;10815:19;;10474:366;;;:::o;10846:::-;10988:3;11009:67;11073:2;11068:3;11009:67;:::i;:::-;11002:74;;11085:93;11174:3;11085:93;:::i;:::-;11203:2;11198:3;11194:12;11187:19;;10846:366;;;:::o;11218:::-;11360:3;11381:67;11445:2;11440:3;11381:67;:::i;:::-;11374:74;;11457:93;11546:3;11457:93;:::i;:::-;11575:2;11570:3;11566:12;11559:19;;11218:366;;;:::o;11590:::-;11732:3;11753:67;11817:2;11812:3;11753:67;:::i;:::-;11746:74;;11829:93;11918:3;11829:93;:::i;:::-;11947:2;11942:3;11938:12;11931:19;;11590:366;;;:::o;11962:::-;12104:3;12125:67;12189:2;12184:3;12125:67;:::i;:::-;12118:74;;12201:93;12290:3;12201:93;:::i;:::-;12319:2;12314:3;12310:12;12303:19;;11962:366;;;:::o;12334:::-;12476:3;12497:67;12561:2;12556:3;12497:67;:::i;:::-;12490:74;;12573:93;12662:3;12573:93;:::i;:::-;12691:2;12686:3;12682:12;12675:19;;12334:366;;;:::o;12706:::-;12848:3;12869:67;12933:2;12928:3;12869:67;:::i;:::-;12862:74;;12945:93;13034:3;12945:93;:::i;:::-;13063:2;13058:3;13054:12;13047:19;;12706:366;;;:::o;13078:::-;13220:3;13241:67;13305:2;13300:3;13241:67;:::i;:::-;13234:74;;13317:93;13406:3;13317:93;:::i;:::-;13435:2;13430:3;13426:12;13419:19;;13078:366;;;:::o;13450:::-;13592:3;13613:67;13677:2;13672:3;13613:67;:::i;:::-;13606:74;;13689:93;13778:3;13689:93;:::i;:::-;13807:2;13802:3;13798:12;13791:19;;13450:366;;;:::o;13822:::-;13964:3;13985:67;14049:2;14044:3;13985:67;:::i;:::-;13978:74;;14061:93;14150:3;14061:93;:::i;:::-;14179:2;14174:3;14170:12;14163:19;;13822:366;;;:::o;14194:::-;14336:3;14357:67;14421:2;14416:3;14357:67;:::i;:::-;14350:74;;14433:93;14522:3;14433:93;:::i;:::-;14551:2;14546:3;14542:12;14535:19;;14194:366;;;:::o;14566:398::-;14725:3;14746:83;14827:1;14822:3;14746:83;:::i;:::-;14739:90;;14838:93;14927:3;14838:93;:::i;:::-;14956:1;14951:3;14947:11;14940:18;;14566:398;;;:::o;14970:366::-;15112:3;15133:67;15197:2;15192:3;15133:67;:::i;:::-;15126:74;;15209:93;15298:3;15209:93;:::i;:::-;15327:2;15322:3;15318:12;15311:19;;14970:366;;;:::o;15342:::-;15484:3;15505:67;15569:2;15564:3;15505:67;:::i;:::-;15498:74;;15581:93;15670:3;15581:93;:::i;:::-;15699:2;15694:3;15690:12;15683:19;;15342:366;;;:::o;15714:::-;15856:3;15877:67;15941:2;15936:3;15877:67;:::i;:::-;15870:74;;15953:93;16042:3;15953:93;:::i;:::-;16071:2;16066:3;16062:12;16055:19;;15714:366;;;:::o;16086:118::-;16173:24;16191:5;16173:24;:::i;:::-;16168:3;16161:37;16086:118;;:::o;16210:112::-;16293:22;16309:5;16293:22;:::i;:::-;16288:3;16281:35;16210:112;;:::o;16328:379::-;16512:3;16534:147;16677:3;16534:147;:::i;:::-;16527:154;;16698:3;16691:10;;16328:379;;;:::o;16713:222::-;16806:4;16844:2;16833:9;16829:18;16821:26;;16857:71;16925:1;16914:9;16910:17;16901:6;16857:71;:::i;:::-;16713:222;;;;:::o;16941:332::-;17062:4;17100:2;17089:9;17085:18;17077:26;;17113:71;17181:1;17170:9;17166:17;17157:6;17113:71;:::i;:::-;17194:72;17262:2;17251:9;17247:18;17238:6;17194:72;:::i;:::-;16941:332;;;;;:::o;17279:807::-;17528:4;17566:3;17555:9;17551:19;17543:27;;17580:71;17648:1;17637:9;17633:17;17624:6;17580:71;:::i;:::-;17661:72;17729:2;17718:9;17714:18;17705:6;17661:72;:::i;:::-;17743:80;17819:2;17808:9;17804:18;17795:6;17743:80;:::i;:::-;17833;17909:2;17898:9;17894:18;17885:6;17833:80;:::i;:::-;17923:73;17991:3;17980:9;17976:19;17967:6;17923:73;:::i;:::-;18006;18074:3;18063:9;18059:19;18050:6;18006:73;:::i;:::-;17279:807;;;;;;;;;:::o;18092:471::-;18257:4;18295:2;18284:9;18280:18;18272:26;;18344:9;18338:4;18334:20;18330:1;18319:9;18315:17;18308:47;18372:108;18475:4;18466:6;18372:108;:::i;:::-;18364:116;;18490:66;18552:2;18541:9;18537:18;18528:6;18490:66;:::i;:::-;18092:471;;;;;:::o;18569:210::-;18656:4;18694:2;18683:9;18679:18;18671:26;;18707:65;18769:1;18758:9;18754:17;18745:6;18707:65;:::i;:::-;18569:210;;;;:::o;18785:274::-;18904:4;18942:2;18931:9;18927:18;18919:26;;18955:97;19049:1;19038:9;19034:17;19025:6;18955:97;:::i;:::-;18785:274;;;;:::o;19065:313::-;19178:4;19216:2;19205:9;19201:18;19193:26;;19265:9;19259:4;19255:20;19251:1;19240:9;19236:17;19229:47;19293:78;19366:4;19357:6;19293:78;:::i;:::-;19285:86;;19065:313;;;;:::o;19384:419::-;19550:4;19588:2;19577:9;19573:18;19565:26;;19637:9;19631:4;19627:20;19623:1;19612:9;19608:17;19601:47;19665:131;19791:4;19665:131;:::i;:::-;19657:139;;19384:419;;;:::o;19809:::-;19975:4;20013:2;20002:9;19998:18;19990:26;;20062:9;20056:4;20052:20;20048:1;20037:9;20033:17;20026:47;20090:131;20216:4;20090:131;:::i;:::-;20082:139;;19809:419;;;:::o;20234:::-;20400:4;20438:2;20427:9;20423:18;20415:26;;20487:9;20481:4;20477:20;20473:1;20462:9;20458:17;20451:47;20515:131;20641:4;20515:131;:::i;:::-;20507:139;;20234:419;;;:::o;20659:::-;20825:4;20863:2;20852:9;20848:18;20840:26;;20912:9;20906:4;20902:20;20898:1;20887:9;20883:17;20876:47;20940:131;21066:4;20940:131;:::i;:::-;20932:139;;20659:419;;;:::o;21084:::-;21250:4;21288:2;21277:9;21273:18;21265:26;;21337:9;21331:4;21327:20;21323:1;21312:9;21308:17;21301:47;21365:131;21491:4;21365:131;:::i;:::-;21357:139;;21084:419;;;:::o;21509:::-;21675:4;21713:2;21702:9;21698:18;21690:26;;21762:9;21756:4;21752:20;21748:1;21737:9;21733:17;21726:47;21790:131;21916:4;21790:131;:::i;:::-;21782:139;;21509:419;;;:::o;21934:::-;22100:4;22138:2;22127:9;22123:18;22115:26;;22187:9;22181:4;22177:20;22173:1;22162:9;22158:17;22151:47;22215:131;22341:4;22215:131;:::i;:::-;22207:139;;21934:419;;;:::o;22359:::-;22525:4;22563:2;22552:9;22548:18;22540:26;;22612:9;22606:4;22602:20;22598:1;22587:9;22583:17;22576:47;22640:131;22766:4;22640:131;:::i;:::-;22632:139;;22359:419;;;:::o;22784:::-;22950:4;22988:2;22977:9;22973:18;22965:26;;23037:9;23031:4;23027:20;23023:1;23012:9;23008:17;23001:47;23065:131;23191:4;23065:131;:::i;:::-;23057:139;;22784:419;;;:::o;23209:::-;23375:4;23413:2;23402:9;23398:18;23390:26;;23462:9;23456:4;23452:20;23448:1;23437:9;23433:17;23426:47;23490:131;23616:4;23490:131;:::i;:::-;23482:139;;23209:419;;;:::o;23634:::-;23800:4;23838:2;23827:9;23823:18;23815:26;;23887:9;23881:4;23877:20;23873:1;23862:9;23858:17;23851:47;23915:131;24041:4;23915:131;:::i;:::-;23907:139;;23634:419;;;:::o;24059:::-;24225:4;24263:2;24252:9;24248:18;24240:26;;24312:9;24306:4;24302:20;24298:1;24287:9;24283:17;24276:47;24340:131;24466:4;24340:131;:::i;:::-;24332:139;;24059:419;;;:::o;24484:::-;24650:4;24688:2;24677:9;24673:18;24665:26;;24737:9;24731:4;24727:20;24723:1;24712:9;24708:17;24701:47;24765:131;24891:4;24765:131;:::i;:::-;24757:139;;24484:419;;;:::o;24909:::-;25075:4;25113:2;25102:9;25098:18;25090:26;;25162:9;25156:4;25152:20;25148:1;25137:9;25133:17;25126:47;25190:131;25316:4;25190:131;:::i;:::-;25182:139;;24909:419;;;:::o;25334:::-;25500:4;25538:2;25527:9;25523:18;25515:26;;25587:9;25581:4;25577:20;25573:1;25562:9;25558:17;25551:47;25615:131;25741:4;25615:131;:::i;:::-;25607:139;;25334:419;;;:::o;25759:::-;25925:4;25963:2;25952:9;25948:18;25940:26;;26012:9;26006:4;26002:20;25998:1;25987:9;25983:17;25976:47;26040:131;26166:4;26040:131;:::i;:::-;26032:139;;25759:419;;;:::o;26184:::-;26350:4;26388:2;26377:9;26373:18;26365:26;;26437:9;26431:4;26427:20;26423:1;26412:9;26408:17;26401:47;26465:131;26591:4;26465:131;:::i;:::-;26457:139;;26184:419;;;:::o;26609:::-;26775:4;26813:2;26802:9;26798:18;26790:26;;26862:9;26856:4;26852:20;26848:1;26837:9;26833:17;26826:47;26890:131;27016:4;26890:131;:::i;:::-;26882:139;;26609:419;;;:::o;27034:222::-;27127:4;27165:2;27154:9;27150:18;27142:26;;27178:71;27246:1;27235:9;27231:17;27222:6;27178:71;:::i;:::-;27034:222;;;;:::o;27262:831::-;27525:4;27563:3;27552:9;27548:19;27540:27;;27577:71;27645:1;27634:9;27630:17;27621:6;27577:71;:::i;:::-;27658:80;27734:2;27723:9;27719:18;27710:6;27658:80;:::i;:::-;27785:9;27779:4;27775:20;27770:2;27759:9;27755:18;27748:48;27813:108;27916:4;27907:6;27813:108;:::i;:::-;27805:116;;27931:72;27999:2;27988:9;27984:18;27975:6;27931:72;:::i;:::-;28013:73;28081:3;28070:9;28066:19;28057:6;28013:73;:::i;:::-;27262:831;;;;;;;;:::o;28099:442::-;28248:4;28286:2;28275:9;28271:18;28263:26;;28299:71;28367:1;28356:9;28352:17;28343:6;28299:71;:::i;:::-;28380:72;28448:2;28437:9;28433:18;28424:6;28380:72;:::i;:::-;28462;28530:2;28519:9;28515:18;28506:6;28462:72;:::i;:::-;28099:442;;;;;;:::o;28547:214::-;28636:4;28674:2;28663:9;28659:18;28651:26;;28687:67;28751:1;28740:9;28736:17;28727:6;28687:67;:::i;:::-;28547:214;;;;:::o;28767:129::-;28801:6;28828:20;;:::i;:::-;28818:30;;28857:33;28885:4;28877:6;28857:33;:::i;:::-;28767:129;;;:::o;28902:75::-;28935:6;28968:2;28962:9;28952:19;;28902:75;:::o;28983:311::-;29060:4;29150:18;29142:6;29139:30;29136:56;;;29172:18;;:::i;:::-;29136:56;29222:4;29214:6;29210:17;29202:25;;29282:4;29276;29272:15;29264:23;;28983:311;;;:::o;29300:132::-;29367:4;29390:3;29382:11;;29420:4;29415:3;29411:14;29403:22;;29300:132;;;:::o;29438:114::-;29505:6;29539:5;29533:12;29523:22;;29438:114;;;:::o;29558:99::-;29610:6;29644:5;29638:12;29628:22;;29558:99;;;:::o;29663:113::-;29733:4;29765;29760:3;29756:14;29748:22;;29663:113;;;:::o;29782:184::-;29881:11;29915:6;29910:3;29903:19;29955:4;29950:3;29946:14;29931:29;;29782:184;;;;:::o;29972:147::-;30073:11;30110:3;30095:18;;29972:147;;;;:::o;30125:169::-;30209:11;30243:6;30238:3;30231:19;30283:4;30278:3;30274:14;30259:29;;30125:169;;;;:::o;30300:305::-;30340:3;30359:20;30377:1;30359:20;:::i;:::-;30354:25;;30393:20;30411:1;30393:20;:::i;:::-;30388:25;;30547:1;30479:66;30475:74;30472:1;30469:81;30466:107;;;30553:18;;:::i;:::-;30466:107;30597:1;30594;30590:9;30583:16;;30300:305;;;;:::o;30611:185::-;30651:1;30668:20;30686:1;30668:20;:::i;:::-;30663:25;;30702:20;30720:1;30702:20;:::i;:::-;30697:25;;30741:1;30731:35;;30746:18;;:::i;:::-;30731:35;30788:1;30785;30781:9;30776:14;;30611:185;;;;:::o;30802:348::-;30842:7;30865:20;30883:1;30865:20;:::i;:::-;30860:25;;30899:20;30917:1;30899:20;:::i;:::-;30894:25;;31087:1;31019:66;31015:74;31012:1;31009:81;31004:1;30997:9;30990:17;30986:105;30983:131;;;31094:18;;:::i;:::-;30983:131;31142:1;31139;31135:9;31124:20;;30802:348;;;;:::o;31156:191::-;31196:4;31216:20;31234:1;31216:20;:::i;:::-;31211:25;;31250:20;31268:1;31250:20;:::i;:::-;31245:25;;31289:1;31286;31283:8;31280:34;;;31294:18;;:::i;:::-;31280:34;31339:1;31336;31332:9;31324:17;;31156:191;;;;:::o;31353:96::-;31390:7;31419:24;31437:5;31419:24;:::i;:::-;31408:35;;31353:96;;;:::o;31455:104::-;31500:7;31529:24;31547:5;31529:24;:::i;:::-;31518:35;;31455:104;;;:::o;31565:90::-;31599:7;31642:5;31635:13;31628:21;31617:32;;31565:90;;;:::o;31661:126::-;31698:7;31738:42;31731:5;31727:54;31716:65;;31661:126;;;:::o;31793:77::-;31830:7;31859:5;31848:16;;31793:77;;;:::o;31876:86::-;31911:7;31951:4;31944:5;31940:16;31929:27;;31876:86;;;:::o;31968:152::-;32044:9;32077:37;32108:5;32077:37;:::i;:::-;32064:50;;31968:152;;;:::o;32126:121::-;32184:9;32217:24;32235:5;32217:24;:::i;:::-;32204:37;;32126:121;;;:::o;32253:126::-;32303:9;32336:37;32367:5;32336:37;:::i;:::-;32323:50;;32253:126;;;:::o;32385:113::-;32435:9;32468:24;32486:5;32468:24;:::i;:::-;32455:37;;32385:113;;;:::o;32504:307::-;32572:1;32582:113;32596:6;32593:1;32590:13;32582:113;;;32681:1;32676:3;32672:11;32666:18;32662:1;32657:3;32653:11;32646:39;32618:2;32615:1;32611:10;32606:15;;32582:113;;;32713:6;32710:1;32707:13;32704:101;;;32793:1;32784:6;32779:3;32775:16;32768:27;32704:101;32553:258;32504:307;;;:::o;32817:320::-;32861:6;32898:1;32892:4;32888:12;32878:22;;32945:1;32939:4;32935:12;32966:18;32956:81;;33022:4;33014:6;33010:17;33000:27;;32956:81;33084:2;33076:6;33073:14;33053:18;33050:38;33047:84;;;33103:18;;:::i;:::-;33047:84;32868:269;32817:320;;;:::o;33143:281::-;33226:27;33248:4;33226:27;:::i;:::-;33218:6;33214:40;33356:6;33344:10;33341:22;33320:18;33308:10;33305:34;33302:62;33299:88;;;33367:18;;:::i;:::-;33299:88;33407:10;33403:2;33396:22;33186:238;33143:281;;:::o;33430:233::-;33469:3;33492:24;33510:5;33492:24;:::i;:::-;33483:33;;33538:66;33531:5;33528:77;33525:103;;;33608:18;;:::i;:::-;33525:103;33655:1;33648:5;33644:13;33637:20;;33430:233;;;:::o;33669:180::-;33717:77;33714:1;33707:88;33814:4;33811:1;33804:15;33838:4;33835:1;33828:15;33855:180;33903:77;33900:1;33893:88;34000:4;33997:1;33990:15;34024:4;34021:1;34014:15;34041:180;34089:77;34086:1;34079:88;34186:4;34183:1;34176:15;34210:4;34207:1;34200:15;34227:180;34275:77;34272:1;34265:88;34372:4;34369:1;34362:15;34396:4;34393:1;34386:15;34413:180;34461:77;34458:1;34451:88;34558:4;34555:1;34548:15;34582:4;34579:1;34572:15;34599:117;34708:1;34705;34698:12;34722:117;34831:1;34828;34821:12;34845:117;34954:1;34951;34944:12;34968:117;35077:1;35074;35067:12;35091:102;35132:6;35183:2;35179:7;35174:2;35167:5;35163:14;35159:28;35149:38;;35091:102;;;:::o;35199:222::-;35339:34;35335:1;35327:6;35323:14;35316:58;35408:5;35403:2;35395:6;35391:15;35384:30;35199:222;:::o;35427:221::-;35567:34;35563:1;35555:6;35551:14;35544:58;35636:4;35631:2;35623:6;35619:15;35612:29;35427:221;:::o;35654:225::-;35794:34;35790:1;35782:6;35778:14;35771:58;35863:8;35858:2;35850:6;35846:15;35839:33;35654:225;:::o;35885:221::-;36025:34;36021:1;36013:6;36009:14;36002:58;36094:4;36089:2;36081:6;36077:15;36070:29;35885:221;:::o;36112:243::-;36252:34;36248:1;36240:6;36236:14;36229:58;36321:26;36316:2;36308:6;36304:15;36297:51;36112:243;:::o;36361:179::-;36501:31;36497:1;36489:6;36485:14;36478:55;36361:179;:::o;36546:225::-;36686:34;36682:1;36674:6;36670:14;36663:58;36755:8;36750:2;36742:6;36738:15;36731:33;36546:225;:::o;36777:222::-;36917:34;36913:1;36905:6;36901:14;36894:58;36986:5;36981:2;36973:6;36969:15;36962:30;36777:222;:::o;37005:289::-;37145:34;37141:1;37133:6;37129:14;37122:58;37214:34;37209:2;37201:6;37197:15;37190:59;37283:3;37278:2;37270:6;37266:15;37259:28;37005:289;:::o;37300:227::-;37440:34;37436:1;37428:6;37424:14;37417:58;37509:10;37504:2;37496:6;37492:15;37485:35;37300:227;:::o;37533:169::-;37673:21;37669:1;37661:6;37657:14;37650:45;37533:169;:::o;37708:182::-;37848:34;37844:1;37836:6;37832:14;37825:58;37708:182;:::o;37896:241::-;38036:34;38032:1;38024:6;38020:14;38013:58;38105:24;38100:2;38092:6;38088:15;38081:49;37896:241;:::o;38143:220::-;38283:34;38279:1;38271:6;38267:14;38260:58;38352:3;38347:2;38339:6;38335:15;38328:28;38143:220;:::o;38369:224::-;38509:34;38505:1;38497:6;38493:14;38486:58;38578:7;38573:2;38565:6;38561:15;38554:32;38369:224;:::o;38599:114::-;;:::o;38719:223::-;38859:34;38855:1;38847:6;38843:14;38836:58;38928:6;38923:2;38915:6;38911:15;38904:31;38719:223;:::o;38948:229::-;39088:34;39084:1;39076:6;39072:14;39065:58;39157:12;39152:2;39144:6;39140:15;39133:37;38948:229;:::o;39183:224::-;39323:34;39319:1;39311:6;39307:14;39300:58;39392:7;39387:2;39379:6;39375:15;39368:32;39183:224;:::o;39413:122::-;39486:24;39504:5;39486:24;:::i;:::-;39479:5;39476:35;39466:63;;39525:1;39522;39515:12;39466:63;39413:122;:::o;39541:138::-;39622:32;39648:5;39622:32;:::i;:::-;39615:5;39612:43;39602:71;;39669:1;39666;39659:12;39602:71;39541:138;:::o;39685:116::-;39755:21;39770:5;39755:21;:::i;:::-;39748:5;39745:32;39735:60;;39791:1;39788;39781:12;39735:60;39685:116;:::o;39807:122::-;39880:24;39898:5;39880:24;:::i;:::-;39873:5;39870:35;39860:63;;39919:1;39916;39909:12;39860:63;39807:122;:::o

Swarm Source

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