ETH Price: $3,466.13 (+2.12%)
Gas: 11 Gwei

Token

GiniAI (GINI)
 

Overview

Max Total Supply

10,000,000 GINI

Holders

385 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
bigscarywolf.eth
Balance
2,450.437902114116661806 GINI

Value
$0.00
0x38e87dea8b44059c54d1f6bd7fa390bd1ab82d08
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Gini is a revolutionary AI Twitter generator that can help businesses increase their social media presence and drive engagement on Twitter.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Gini

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-10
*/

// SPDX-License-Identifier: MIT
/**
   ____ _       _              
  / ___(_)_ __ (_)  __ _  __ _ 
 | |  _| | '_ \| | / _` |/ _` |
 | |_| | | | | | || (_| | (_| |
  \____|_|_| |_|_(_)__, |\__, |
                   |___/ |___/ 

  Website  https://gini.gg
  Telegram https://t.me/giniai
  Twitter  https://twitter.com/AiScheduler
  Discord  https://discord.gg/2WRTny4FdC
*/

pragma solidity >=0.8.10 >=0.8.0 <0.9.0;

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

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

abstract contract Ownable is Context {
    address private _owner;
    address private creator;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

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

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

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

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

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

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

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

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

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

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

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

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;

    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;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    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);
    }

    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);
    }

    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);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract Gini is ERC20, Ownable {
    event SwapBackSuccess(
        uint256 tokenAmount,
        uint256 ethAmountReceived,
        bool success
    );
    bool private swapping;
    address public feeWallet = address(0x0794C082AEddd6E1d6ef42cC3e82a7c07d057941);
    uint256 _totalSupply = 10_000_000 * 1e18;

    uint256 public maxTransactionAmount = (_totalSupply * 20) / 1000; // 2% from total supply maxTransactionAmountTxn;
    uint256 public swapTokensAtAmount = (_totalSupply * 10) / 1000; // 1% swap tokens at this amount.
    uint256 public maxWallet = (_totalSupply * 20) / 1000; // 2% from total supply maxWallet

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyFees = 5; // 3%
    uint256 public sellFees = 15; // The sell fee is initially 15% but will be reduced to 5% once the removeLimits() function has been called.

    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

    constructor() ERC20("GiniAI", "GINI") {
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(feeWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(feeWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(address(this), _totalSupply);
    }

    receive() external payable {}
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
    // remove limits after token is stable (sets sell fees to 5%)
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        sellFees = 5;
        return true;
    }
    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }
    function addLiquidity() external payable onlyOwner {
        // approve token transfer to cover all possible scenarios
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        _approve(address(this), address(uniswapV2Router), totalSupply());
        // add the liquidity
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            totalSupply(),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }
    function updateFeeWallet(address newWallet) external onlyOwner {
        feeWallet = newWallet;
    }
    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(amount > 0, "Transfer amount must be greater than zero");
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not enabled yet."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        if (
            swapEnabled && //if this is true
            !swapping && //if this is false
            !automatedMarketMakerPairs[from] && //if this is false
            !_isExcludedFromFees[from] && //if this is false
            !_isExcludedFromFees[to] //if this is false
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellFees > 0) {
                fees = amount.mul(sellFees).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                fees = amount.mul(buyFees).div(100);
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        }
        super._transfer(from, to, amount);
    }
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        if (contractBalance == 0) {
            return;
        }
        if (contractBalance >= swapTokensAtAmount) {
            uint256 amountToSwapForETH = swapTokensAtAmount;
            swapTokensForEth(amountToSwapForETH);
            uint256 amountEthToSend = address(this).balance;
            (success, ) = address(feeWallet).call{value: amountEthToSend}("");
            emit SwapBackSuccess(amountToSwapForETH, amountEthToSend, success);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmountReceived","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SwapBackSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052730794c082aeddd6e1d6ef42cc3e82a7c07d057941600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a084595161401484a0000006008556103e860146008546200007c91906200078b565b62000088919062000805565b6009556103e8600a6008546200009f91906200078b565b620000ab919062000805565b600a556103e86014600854620000c291906200078b565b620000ce919062000805565b600b556001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506005600d55600f600e553480156200013957600080fd5b506040518060400160405280600681526020017f47696e69414900000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f47494e49000000000000000000000000000000000000000000000000000000008152508160039081620001b7919062000aad565b508060049081620001c9919062000aad565b505050620001ec620001e06200030460201b60201c565b6200030c60201b60201c565b6200020e62000200620003d260201b60201c565b6001620003fc60201b60201c565b62000243600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620003fc60201b60201c565b62000256306001620003fc60201b60201c565b6200026b61dead6001620003fc60201b60201c565b6200028d6200027f620003d260201b60201c565b6001620004e660201b60201c565b620002c2600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004e660201b60201c565b620002d5306001620004e660201b60201c565b620002ea61dead6001620004e660201b60201c565b620002fe30600854620005d060201b60201c565b62000cf2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200040c6200030460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000432620003d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200048b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004829062000bf5565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620004f66200030460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200051c620003d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000575576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200056c9062000bf5565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006399062000c67565b60405180910390fd5b62000656600083836200074860201b60201c565b80600260008282546200066a919062000c89565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620006c1919062000c89565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000728919062000cd5565b60405180910390a362000744600083836200074d60201b60201c565b5050565b505050565b505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007988262000752565b9150620007a58362000752565b9250828202620007b58162000752565b91508282048414831517620007cf57620007ce6200075c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620008128262000752565b91506200081f8362000752565b925082620008325762000831620007d6565b5b828204905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008bf57607f821691505b602082108103620008d557620008d462000877565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200093f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000900565b6200094b868362000900565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200098e62000988620009828462000752565b62000963565b62000752565b9050919050565b6000819050919050565b620009aa836200096d565b620009c2620009b98262000995565b8484546200090d565b825550505050565b600090565b620009d9620009ca565b620009e68184846200099f565b505050565b5b8181101562000a0e5762000a02600082620009cf565b600181019050620009ec565b5050565b601f82111562000a5d5762000a2781620008db565b62000a3284620008f0565b8101602085101562000a42578190505b62000a5a62000a5185620008f0565b830182620009eb565b50505b505050565b600082821c905092915050565b600062000a826000198460080262000a62565b1980831691505092915050565b600062000a9d838362000a6f565b9150826002028217905092915050565b62000ab8826200083d565b67ffffffffffffffff81111562000ad45762000ad362000848565b5b62000ae08254620008a6565b62000aed82828562000a12565b600060209050601f83116001811462000b25576000841562000b10578287015190505b62000b1c858262000a8f565b86555062000b8c565b601f19841662000b3586620008db565b60005b8281101562000b5f5784890151825560018201915060208501945060208101905062000b38565b8683101562000b7f578489015162000b7b601f89168262000a6f565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000bdd60208362000b94565b915062000bea8262000ba5565b602082019050919050565b6000602082019050818103600083015262000c108162000bce565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000c4f601f8362000b94565b915062000c5c8262000c17565b602082019050919050565b6000602082019050818103600083015262000c828162000c40565b9050919050565b600062000c968262000752565b915062000ca38362000752565b925082820190508082111562000cbe5762000cbd6200075c565b5b92915050565b62000ccf8162000752565b82525050565b600060208201905062000cec600083018462000cc4565b92915050565b613de98062000d026000396000f3fe60806040526004361061021e5760003560e01c80638a8c523c11610123578063c0246668116100ab578063e4748b9e1161006f578063e4748b9e1461080c578063e8078d9414610837578063f25f4b5614610841578063f2fde38b1461086c578063f8b45b051461089557610225565b8063c024666814610725578063c8c8ebe41461074e578063dd62ed3e14610779578063e0f3ccf5146107b6578063e2f45605146107e157610225565b80639a7a23d6116100f25780639a7a23d61461061a578063a457c2d714610643578063a9059cbb14610680578063b62496f5146106bd578063bbc0c742146106fa57610225565b80638a8c523c146105845780638da5cb5b1461059b578063924de9b7146105c657806395d89b41146105ef57610225565b806349bd5a5e116101a65780636ddd1713116101755780636ddd1713146104b157806370a08231146104dc578063715018a614610519578063751039fc146105305780637571336a1461055b57610225565b806349bd5a5e146103f55780634a62bb65146104205780634fbee1931461044b578063667185241461048857610225565b806318160ddd116101ed57806318160ddd146102fa57806323b872dd1461032557806327c8f83514610362578063313ce5671461038d57806339509351146103b857610225565b806306fdde031461022a578063095ea7b31461025557806310d5de53146102925780631694505e146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108c0565b60405161024c9190612d0d565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190612dc8565b610952565b6040516102899190612e23565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190612e3e565b610970565b6040516102c69190612e23565b60405180910390f35b3480156102db57600080fd5b506102e4610990565b6040516102f19190612eca565b60405180910390f35b34801561030657600080fd5b5061030f6109b6565b60405161031c9190612ef4565b60405180910390f35b34801561033157600080fd5b5061034c60048036038101906103479190612f0f565b6109c0565b6040516103599190612e23565b60405180910390f35b34801561036e57600080fd5b50610377610ab8565b6040516103849190612f71565b60405180910390f35b34801561039957600080fd5b506103a2610abe565b6040516103af9190612fa8565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190612dc8565b610ac7565b6040516103ec9190612e23565b60405180910390f35b34801561040157600080fd5b5061040a610b73565b6040516104179190612f71565b60405180910390f35b34801561042c57600080fd5b50610435610b99565b6040516104429190612e23565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190612e3e565b610bac565b60405161047f9190612e23565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190612e3e565b610c02565b005b3480156104bd57600080fd5b506104c6610cc2565b6040516104d39190612e23565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190612e3e565b610cd5565b6040516105109190612ef4565b60405180910390f35b34801561052557600080fd5b5061052e610d1d565b005b34801561053c57600080fd5b50610545610da5565b6040516105529190612e23565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190612fef565b610e4d565b005b34801561059057600080fd5b50610599610f24565b005b3480156105a757600080fd5b506105b0610fd8565b6040516105bd9190612f71565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e8919061302f565b611002565b005b3480156105fb57600080fd5b5061060461109b565b6040516106119190612d0d565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190612fef565b61112d565b005b34801561064f57600080fd5b5061066a60048036038101906106659190612dc8565b611247565b6040516106779190612e23565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190612dc8565b611332565b6040516106b49190612e23565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190612e3e565b611350565b6040516106f19190612e23565b60405180910390f35b34801561070657600080fd5b5061070f611370565b60405161071c9190612e23565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190612fef565b611383565b005b34801561075a57600080fd5b5061076361145a565b6040516107709190612ef4565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b919061305c565b611460565b6040516107ad9190612ef4565b60405180910390f35b3480156107c257600080fd5b506107cb6114e7565b6040516107d89190612ef4565b60405180910390f35b3480156107ed57600080fd5b506107f66114ed565b6040516108039190612ef4565b60405180910390f35b34801561081857600080fd5b506108216114f3565b60405161082e9190612ef4565b60405180910390f35b61083f6114f9565b005b34801561084d57600080fd5b506108566118c0565b6040516108639190612f71565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190612e3e565b6118e6565b005b3480156108a157600080fd5b506108aa6119dd565b6040516108b79190612ef4565b60405180910390f35b6060600380546108cf906130cb565b80601f01602080910402602001604051908101604052809291908181526020018280546108fb906130cb565b80156109485780601f1061091d57610100808354040283529160200191610948565b820191906000526020600020905b81548152906001019060200180831161092b57829003601f168201915b5050505050905090565b600061096661095f6119e3565b84846119eb565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109cd848484611bb4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a186119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f9061316e565b60405180910390fd5b610aac85610aa46119e3565b8584036119eb565b60019150509392505050565b61dead81565b60006012905090565b6000610b69610ad46119e3565b848460016000610ae26119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6491906131bd565b6119eb565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c0a6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610c28610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c759061323d565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d256119e3565b73ffffffffffffffffffffffffffffffffffffffff16610d43610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d909061323d565b60405180910390fd5b610da36000612558565b565b6000610daf6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610dcd610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a9061323d565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506005600e819055506001905090565b610e556119e3565b73ffffffffffffffffffffffffffffffffffffffff16610e73610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec09061323d565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610f2c6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610f4a610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f979061323d565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61100a6119e3565b73ffffffffffffffffffffffffffffffffffffffff16611028610fd8565b73ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110759061323d565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546110aa906130cb565b80601f01602080910402602001604051908101604052809291908181526020018280546110d6906130cb565b80156111235780601f106110f857610100808354040283529160200191611123565b820191906000526020600020905b81548152906001019060200180831161110657829003601f168201915b5050505050905090565b6111356119e3565b73ffffffffffffffffffffffffffffffffffffffff16611153610fd8565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061323d565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611230906132cf565b60405180910390fd5b611243828261261e565b5050565b600080600160006112566119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90613361565b60405180910390fd5b61132761131e6119e3565b858584036119eb565b600191505092915050565b600061134661133f6119e3565b8484611bb4565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b61138b6119e3565b73ffffffffffffffffffffffffffffffffffffffff166113a9610fd8565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f69061323d565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b600a5481565b600d5481565b6115016119e3565b73ffffffffffffffffffffffffffffffffffffffff1661151f610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614611575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156c9061323d565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506115da816001610e4d565b61160e30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116096109b6565b6119eb565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167d9190613396565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117089190613396565b6040518363ffffffff1660e01b81526004016117259291906133c3565b6020604051808303816000875af1158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190613396565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117d5601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610e4d565b611802601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161261e565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719343061184a6109b6565b600080611855610fd8565b426040518863ffffffff1660e01b815260040161187796959493929190613427565b60606040518083038185885af1158015611895573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118ba919061349d565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118ee6119e3565b73ffffffffffffffffffffffffffffffffffffffff1661190c610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614611962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119599061323d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613562565b60405180910390fd5b6119da81612558565b50565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a51906135f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090613686565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ba79190612ef4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90613718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c89906137aa565b60405180910390fd5b60008111611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc9061383c565b60405180910390fd5b600c60009054906101000a900460ff16156121d057611cf2610fd8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d605750611d30610fd8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d995750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dec5750600660149054906101000a900460ff16155b156121cf57600c60019054906101000a900460ff16611ee657601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ea65750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc906138a8565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611f895750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203057600954811115611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca9061393a565b60405180910390fd5b600b54611fdf83610cd5565b82611fea91906131bd565b111561202b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612022906139a6565b60405180910390fd5b6121ce565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120d35750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121225760095481111561211d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211490613a38565b60405180910390fd5b6121cd565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121cc57600b5461217f83610cd5565b8261218a91906131bd565b11156121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c2906139a6565b60405180910390fd5b5b5b5b5b5b600c60029054906101000a900460ff1680156121f95750600660149054906101000a900460ff16155b801561224f5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122a55750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122fb5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561233f576001600660146101000a81548160ff021916908315150217905550612323612679565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123f55750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123ff57600090505b6000811561254657601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561246257506000600e54115b156124965761248f6064612481600e548661278590919063ffffffff16565b61279b90919063ffffffff16565b9050612522565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124f157506000600d54115b156125215761251e6064612510600d548661278590919063ffffffff16565b61279b90919063ffffffff16565b90505b5b6000811115612537576125368530836127b1565b5b80836125439190613a58565b92505b6125518585856127b1565b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061268430610cd5565b90506000808203612696575050612783565b600a548210612780576000600a5490506126af81612a30565b6000479050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516126fa90613abd565b60006040518083038185875af1925050503d8060008114612737576040519150601f19603f3d011682016040523d82523d6000602084013e61273c565b606091505b5050809350507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff82828560405161277593929190613ad2565b60405180910390a150505b50505b565b600081836127939190613b09565b905092915050565b600081836127a99190613b7a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281790613718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361288f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612886906137aa565b60405180910390fd5b61289a838383612c73565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291790613c1d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b391906131bd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a179190612ef4565b60405180910390a3612a2a848484612c78565b50505050565b6000600267ffffffffffffffff811115612a4d57612a4c613c3d565b5b604051908082528060200260200182016040528015612a7b5781602001602082028036833780820191505090505b5090503081600081518110612a9357612a92613c6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5e9190613396565b81600181518110612b7257612b71613c6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612bd930600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119eb565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c3d959493929190613d59565b600060405180830381600087803b158015612c5757600080fd5b505af1158015612c6b573d6000803e3d6000fd5b505050505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cb7578082015181840152602081019050612c9c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612cdf82612c7d565b612ce98185612c88565b9350612cf9818560208601612c99565b612d0281612cc3565b840191505092915050565b60006020820190508181036000830152612d278184612cd4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d5f82612d34565b9050919050565b612d6f81612d54565b8114612d7a57600080fd5b50565b600081359050612d8c81612d66565b92915050565b6000819050919050565b612da581612d92565b8114612db057600080fd5b50565b600081359050612dc281612d9c565b92915050565b60008060408385031215612ddf57612dde612d2f565b5b6000612ded85828601612d7d565b9250506020612dfe85828601612db3565b9150509250929050565b60008115159050919050565b612e1d81612e08565b82525050565b6000602082019050612e386000830184612e14565b92915050565b600060208284031215612e5457612e53612d2f565b5b6000612e6284828501612d7d565b91505092915050565b6000819050919050565b6000612e90612e8b612e8684612d34565b612e6b565b612d34565b9050919050565b6000612ea282612e75565b9050919050565b6000612eb482612e97565b9050919050565b612ec481612ea9565b82525050565b6000602082019050612edf6000830184612ebb565b92915050565b612eee81612d92565b82525050565b6000602082019050612f096000830184612ee5565b92915050565b600080600060608486031215612f2857612f27612d2f565b5b6000612f3686828701612d7d565b9350506020612f4786828701612d7d565b9250506040612f5886828701612db3565b9150509250925092565b612f6b81612d54565b82525050565b6000602082019050612f866000830184612f62565b92915050565b600060ff82169050919050565b612fa281612f8c565b82525050565b6000602082019050612fbd6000830184612f99565b92915050565b612fcc81612e08565b8114612fd757600080fd5b50565b600081359050612fe981612fc3565b92915050565b6000806040838503121561300657613005612d2f565b5b600061301485828601612d7d565b925050602061302585828601612fda565b9150509250929050565b60006020828403121561304557613044612d2f565b5b600061305384828501612fda565b91505092915050565b6000806040838503121561307357613072612d2f565b5b600061308185828601612d7d565b925050602061309285828601612d7d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130e357607f821691505b6020821081036130f6576130f561309c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613158602883612c88565b9150613163826130fc565b604082019050919050565b600060208201905081810360008301526131878161314b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131c882612d92565b91506131d383612d92565b92508282019050808211156131eb576131ea61318e565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613227602083612c88565b9150613232826131f1565b602082019050919050565b600060208201905081810360008301526132568161321a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006132b9603983612c88565b91506132c48261325d565b604082019050919050565b600060208201905081810360008301526132e8816132ac565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061334b602583612c88565b9150613356826132ef565b604082019050919050565b6000602082019050818103600083015261337a8161333e565b9050919050565b60008151905061339081612d66565b92915050565b6000602082840312156133ac576133ab612d2f565b5b60006133ba84828501613381565b91505092915050565b60006040820190506133d86000830185612f62565b6133e56020830184612f62565b9392505050565b6000819050919050565b600061341161340c613407846133ec565b612e6b565b612d92565b9050919050565b613421816133f6565b82525050565b600060c08201905061343c6000830189612f62565b6134496020830188612ee5565b6134566040830187613418565b6134636060830186613418565b6134706080830185612f62565b61347d60a0830184612ee5565b979650505050505050565b60008151905061349781612d9c565b92915050565b6000806000606084860312156134b6576134b5612d2f565b5b60006134c486828701613488565b93505060206134d586828701613488565b92505060406134e686828701613488565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061354c602683612c88565b9150613557826134f0565b604082019050919050565b6000602082019050818103600083015261357b8161353f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006135de602483612c88565b91506135e982613582565b604082019050919050565b6000602082019050818103600083015261360d816135d1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613670602283612c88565b915061367b82613614565b604082019050919050565b6000602082019050818103600083015261369f81613663565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613702602583612c88565b915061370d826136a6565b604082019050919050565b60006020820190508181036000830152613731816136f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613794602383612c88565b915061379f82613738565b604082019050919050565b600060208201905081810360008301526137c381613787565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613826602983612c88565b9150613831826137ca565b604082019050919050565b6000602082019050818103600083015261385581613819565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b6000613892601b83612c88565b915061389d8261385c565b602082019050919050565b600060208201905081810360008301526138c181613885565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613924603583612c88565b915061392f826138c8565b604082019050919050565b6000602082019050818103600083015261395381613917565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613990601383612c88565b915061399b8261395a565b602082019050919050565b600060208201905081810360008301526139bf81613983565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613a22603683612c88565b9150613a2d826139c6565b604082019050919050565b60006020820190508181036000830152613a5181613a15565b9050919050565b6000613a6382612d92565b9150613a6e83612d92565b9250828203905081811115613a8657613a8561318e565b5b92915050565b600081905092915050565b50565b6000613aa7600083613a8c565b9150613ab282613a97565b600082019050919050565b6000613ac882613a9a565b9150819050919050565b6000606082019050613ae76000830186612ee5565b613af46020830185612ee5565b613b016040830184612e14565b949350505050565b6000613b1482612d92565b9150613b1f83612d92565b9250828202613b2d81612d92565b91508282048414831517613b4457613b4361318e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613b8582612d92565b9150613b9083612d92565b925082613ba057613b9f613b4b565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613c07602683612c88565b9150613c1282613bab565b604082019050919050565b60006020820190508181036000830152613c3681613bfa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cd081612d54565b82525050565b6000613ce28383613cc7565b60208301905092915050565b6000602082019050919050565b6000613d0682613c9b565b613d108185613ca6565b9350613d1b83613cb7565b8060005b83811015613d4c578151613d338882613cd6565b9750613d3e83613cee565b925050600181019050613d1f565b5085935050505092915050565b600060a082019050613d6e6000830188612ee5565b613d7b6020830187613418565b8181036040830152613d8d8186613cfb565b9050613d9c6060830185612f62565b613da96080830184612ee5565b969550505050505056fea264697066735822122041f85f2c8259a1f9bd1e0bc2103a3722ee6d047582b43acfc9fd9fccc2a731ad64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80638a8c523c11610123578063c0246668116100ab578063e4748b9e1161006f578063e4748b9e1461080c578063e8078d9414610837578063f25f4b5614610841578063f2fde38b1461086c578063f8b45b051461089557610225565b8063c024666814610725578063c8c8ebe41461074e578063dd62ed3e14610779578063e0f3ccf5146107b6578063e2f45605146107e157610225565b80639a7a23d6116100f25780639a7a23d61461061a578063a457c2d714610643578063a9059cbb14610680578063b62496f5146106bd578063bbc0c742146106fa57610225565b80638a8c523c146105845780638da5cb5b1461059b578063924de9b7146105c657806395d89b41146105ef57610225565b806349bd5a5e116101a65780636ddd1713116101755780636ddd1713146104b157806370a08231146104dc578063715018a614610519578063751039fc146105305780637571336a1461055b57610225565b806349bd5a5e146103f55780634a62bb65146104205780634fbee1931461044b578063667185241461048857610225565b806318160ddd116101ed57806318160ddd146102fa57806323b872dd1461032557806327c8f83514610362578063313ce5671461038d57806339509351146103b857610225565b806306fdde031461022a578063095ea7b31461025557806310d5de53146102925780631694505e146102cf57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108c0565b60405161024c9190612d0d565b60405180910390f35b34801561026157600080fd5b5061027c60048036038101906102779190612dc8565b610952565b6040516102899190612e23565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190612e3e565b610970565b6040516102c69190612e23565b60405180910390f35b3480156102db57600080fd5b506102e4610990565b6040516102f19190612eca565b60405180910390f35b34801561030657600080fd5b5061030f6109b6565b60405161031c9190612ef4565b60405180910390f35b34801561033157600080fd5b5061034c60048036038101906103479190612f0f565b6109c0565b6040516103599190612e23565b60405180910390f35b34801561036e57600080fd5b50610377610ab8565b6040516103849190612f71565b60405180910390f35b34801561039957600080fd5b506103a2610abe565b6040516103af9190612fa8565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190612dc8565b610ac7565b6040516103ec9190612e23565b60405180910390f35b34801561040157600080fd5b5061040a610b73565b6040516104179190612f71565b60405180910390f35b34801561042c57600080fd5b50610435610b99565b6040516104429190612e23565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190612e3e565b610bac565b60405161047f9190612e23565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190612e3e565b610c02565b005b3480156104bd57600080fd5b506104c6610cc2565b6040516104d39190612e23565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190612e3e565b610cd5565b6040516105109190612ef4565b60405180910390f35b34801561052557600080fd5b5061052e610d1d565b005b34801561053c57600080fd5b50610545610da5565b6040516105529190612e23565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d9190612fef565b610e4d565b005b34801561059057600080fd5b50610599610f24565b005b3480156105a757600080fd5b506105b0610fd8565b6040516105bd9190612f71565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e8919061302f565b611002565b005b3480156105fb57600080fd5b5061060461109b565b6040516106119190612d0d565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190612fef565b61112d565b005b34801561064f57600080fd5b5061066a60048036038101906106659190612dc8565b611247565b6040516106779190612e23565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190612dc8565b611332565b6040516106b49190612e23565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190612e3e565b611350565b6040516106f19190612e23565b60405180910390f35b34801561070657600080fd5b5061070f611370565b60405161071c9190612e23565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190612fef565b611383565b005b34801561075a57600080fd5b5061076361145a565b6040516107709190612ef4565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b919061305c565b611460565b6040516107ad9190612ef4565b60405180910390f35b3480156107c257600080fd5b506107cb6114e7565b6040516107d89190612ef4565b60405180910390f35b3480156107ed57600080fd5b506107f66114ed565b6040516108039190612ef4565b60405180910390f35b34801561081857600080fd5b506108216114f3565b60405161082e9190612ef4565b60405180910390f35b61083f6114f9565b005b34801561084d57600080fd5b506108566118c0565b6040516108639190612f71565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e9190612e3e565b6118e6565b005b3480156108a157600080fd5b506108aa6119dd565b6040516108b79190612ef4565b60405180910390f35b6060600380546108cf906130cb565b80601f01602080910402602001604051908101604052809291908181526020018280546108fb906130cb565b80156109485780601f1061091d57610100808354040283529160200191610948565b820191906000526020600020905b81548152906001019060200180831161092b57829003601f168201915b5050505050905090565b600061096661095f6119e3565b84846119eb565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109cd848484611bb4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a186119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8f9061316e565b60405180910390fd5b610aac85610aa46119e3565b8584036119eb565b60019150509392505050565b61dead81565b60006012905090565b6000610b69610ad46119e3565b848460016000610ae26119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6491906131bd565b6119eb565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c0a6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610c28610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c759061323d565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d256119e3565b73ffffffffffffffffffffffffffffffffffffffff16610d43610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d909061323d565b60405180910390fd5b610da36000612558565b565b6000610daf6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610dcd610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a9061323d565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506005600e819055506001905090565b610e556119e3565b73ffffffffffffffffffffffffffffffffffffffff16610e73610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec09061323d565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610f2c6119e3565b73ffffffffffffffffffffffffffffffffffffffff16610f4a610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f979061323d565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61100a6119e3565b73ffffffffffffffffffffffffffffffffffffffff16611028610fd8565b73ffffffffffffffffffffffffffffffffffffffff161461107e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110759061323d565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546110aa906130cb565b80601f01602080910402602001604051908101604052809291908181526020018280546110d6906130cb565b80156111235780601f106110f857610100808354040283529160200191611123565b820191906000526020600020905b81548152906001019060200180831161110657829003601f168201915b5050505050905090565b6111356119e3565b73ffffffffffffffffffffffffffffffffffffffff16611153610fd8565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061323d565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611230906132cf565b60405180910390fd5b611243828261261e565b5050565b600080600160006112566119e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90613361565b60405180910390fd5b61132761131e6119e3565b858584036119eb565b600191505092915050565b600061134661133f6119e3565b8484611bb4565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b61138b6119e3565b73ffffffffffffffffffffffffffffffffffffffff166113a9610fd8565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f69061323d565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b600a5481565b600d5481565b6115016119e3565b73ffffffffffffffffffffffffffffffffffffffff1661151f610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614611575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156c9061323d565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506115da816001610e4d565b61160e30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116096109b6565b6119eb565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167d9190613396565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117089190613396565b6040518363ffffffff1660e01b81526004016117259291906133c3565b6020604051808303816000875af1158015611744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117689190613396565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117d5601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610e4d565b611802601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161261e565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719343061184a6109b6565b600080611855610fd8565b426040518863ffffffff1660e01b815260040161187796959493929190613427565b60606040518083038185885af1158015611895573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118ba919061349d565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118ee6119e3565b73ffffffffffffffffffffffffffffffffffffffff1661190c610fd8565b73ffffffffffffffffffffffffffffffffffffffff1614611962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119599061323d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613562565b60405180910390fd5b6119da81612558565b50565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a51906135f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090613686565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ba79190612ef4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90613718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c89906137aa565b60405180910390fd5b60008111611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc9061383c565b60405180910390fd5b600c60009054906101000a900460ff16156121d057611cf2610fd8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d605750611d30610fd8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d995750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dec5750600660149054906101000a900460ff16155b156121cf57600c60019054906101000a900460ff16611ee657601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ea65750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edc906138a8565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611f895750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203057600954811115611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca9061393a565b60405180910390fd5b600b54611fdf83610cd5565b82611fea91906131bd565b111561202b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612022906139a6565b60405180910390fd5b6121ce565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120d35750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121225760095481111561211d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211490613a38565b60405180910390fd5b6121cd565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121cc57600b5461217f83610cd5565b8261218a91906131bd565b11156121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c2906139a6565b60405180910390fd5b5b5b5b5b5b600c60029054906101000a900460ff1680156121f95750600660149054906101000a900460ff16155b801561224f5750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122a55750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122fb5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561233f576001600660146101000a81548160ff021916908315150217905550612323612679565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123f55750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123ff57600090505b6000811561254657601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561246257506000600e54115b156124965761248f6064612481600e548661278590919063ffffffff16565b61279b90919063ffffffff16565b9050612522565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124f157506000600d54115b156125215761251e6064612510600d548661278590919063ffffffff16565b61279b90919063ffffffff16565b90505b5b6000811115612537576125368530836127b1565b5b80836125439190613a58565b92505b6125518585856127b1565b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061268430610cd5565b90506000808203612696575050612783565b600a548210612780576000600a5490506126af81612a30565b6000479050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516126fa90613abd565b60006040518083038185875af1925050503d8060008114612737576040519150601f19603f3d011682016040523d82523d6000602084013e61273c565b606091505b5050809350507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff82828560405161277593929190613ad2565b60405180910390a150505b50505b565b600081836127939190613b09565b905092915050565b600081836127a99190613b7a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281790613718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361288f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612886906137aa565b60405180910390fd5b61289a838383612c73565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291790613c1d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b391906131bd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a179190612ef4565b60405180910390a3612a2a848484612c78565b50505050565b6000600267ffffffffffffffff811115612a4d57612a4c613c3d565b5b604051908082528060200260200182016040528015612a7b5781602001602082028036833780820191505090505b5090503081600081518110612a9357612a92613c6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5e9190613396565b81600181518110612b7257612b71613c6c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612bd930600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846119eb565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c3d959493929190613d59565b600060405180830381600087803b158015612c5757600080fd5b505af1158015612c6b573d6000803e3d6000fd5b505050505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cb7578082015181840152602081019050612c9c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612cdf82612c7d565b612ce98185612c88565b9350612cf9818560208601612c99565b612d0281612cc3565b840191505092915050565b60006020820190508181036000830152612d278184612cd4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d5f82612d34565b9050919050565b612d6f81612d54565b8114612d7a57600080fd5b50565b600081359050612d8c81612d66565b92915050565b6000819050919050565b612da581612d92565b8114612db057600080fd5b50565b600081359050612dc281612d9c565b92915050565b60008060408385031215612ddf57612dde612d2f565b5b6000612ded85828601612d7d565b9250506020612dfe85828601612db3565b9150509250929050565b60008115159050919050565b612e1d81612e08565b82525050565b6000602082019050612e386000830184612e14565b92915050565b600060208284031215612e5457612e53612d2f565b5b6000612e6284828501612d7d565b91505092915050565b6000819050919050565b6000612e90612e8b612e8684612d34565b612e6b565b612d34565b9050919050565b6000612ea282612e75565b9050919050565b6000612eb482612e97565b9050919050565b612ec481612ea9565b82525050565b6000602082019050612edf6000830184612ebb565b92915050565b612eee81612d92565b82525050565b6000602082019050612f096000830184612ee5565b92915050565b600080600060608486031215612f2857612f27612d2f565b5b6000612f3686828701612d7d565b9350506020612f4786828701612d7d565b9250506040612f5886828701612db3565b9150509250925092565b612f6b81612d54565b82525050565b6000602082019050612f866000830184612f62565b92915050565b600060ff82169050919050565b612fa281612f8c565b82525050565b6000602082019050612fbd6000830184612f99565b92915050565b612fcc81612e08565b8114612fd757600080fd5b50565b600081359050612fe981612fc3565b92915050565b6000806040838503121561300657613005612d2f565b5b600061301485828601612d7d565b925050602061302585828601612fda565b9150509250929050565b60006020828403121561304557613044612d2f565b5b600061305384828501612fda565b91505092915050565b6000806040838503121561307357613072612d2f565b5b600061308185828601612d7d565b925050602061309285828601612d7d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130e357607f821691505b6020821081036130f6576130f561309c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613158602883612c88565b9150613163826130fc565b604082019050919050565b600060208201905081810360008301526131878161314b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131c882612d92565b91506131d383612d92565b92508282019050808211156131eb576131ea61318e565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613227602083612c88565b9150613232826131f1565b602082019050919050565b600060208201905081810360008301526132568161321a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006132b9603983612c88565b91506132c48261325d565b604082019050919050565b600060208201905081810360008301526132e8816132ac565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061334b602583612c88565b9150613356826132ef565b604082019050919050565b6000602082019050818103600083015261337a8161333e565b9050919050565b60008151905061339081612d66565b92915050565b6000602082840312156133ac576133ab612d2f565b5b60006133ba84828501613381565b91505092915050565b60006040820190506133d86000830185612f62565b6133e56020830184612f62565b9392505050565b6000819050919050565b600061341161340c613407846133ec565b612e6b565b612d92565b9050919050565b613421816133f6565b82525050565b600060c08201905061343c6000830189612f62565b6134496020830188612ee5565b6134566040830187613418565b6134636060830186613418565b6134706080830185612f62565b61347d60a0830184612ee5565b979650505050505050565b60008151905061349781612d9c565b92915050565b6000806000606084860312156134b6576134b5612d2f565b5b60006134c486828701613488565b93505060206134d586828701613488565b92505060406134e686828701613488565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061354c602683612c88565b9150613557826134f0565b604082019050919050565b6000602082019050818103600083015261357b8161353f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006135de602483612c88565b91506135e982613582565b604082019050919050565b6000602082019050818103600083015261360d816135d1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613670602283612c88565b915061367b82613614565b604082019050919050565b6000602082019050818103600083015261369f81613663565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613702602583612c88565b915061370d826136a6565b604082019050919050565b60006020820190508181036000830152613731816136f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613794602383612c88565b915061379f82613738565b604082019050919050565b600060208201905081810360008301526137c381613787565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613826602983612c88565b9150613831826137ca565b604082019050919050565b6000602082019050818103600083015261385581613819565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e0000000000600082015250565b6000613892601b83612c88565b915061389d8261385c565b602082019050919050565b600060208201905081810360008301526138c181613885565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613924603583612c88565b915061392f826138c8565b604082019050919050565b6000602082019050818103600083015261395381613917565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613990601383612c88565b915061399b8261395a565b602082019050919050565b600060208201905081810360008301526139bf81613983565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613a22603683612c88565b9150613a2d826139c6565b604082019050919050565b60006020820190508181036000830152613a5181613a15565b9050919050565b6000613a6382612d92565b9150613a6e83612d92565b9250828203905081811115613a8657613a8561318e565b5b92915050565b600081905092915050565b50565b6000613aa7600083613a8c565b9150613ab282613a97565b600082019050919050565b6000613ac882613a9a565b9150819050919050565b6000606082019050613ae76000830186612ee5565b613af46020830185612ee5565b613b016040830184612e14565b949350505050565b6000613b1482612d92565b9150613b1f83612d92565b9250828202613b2d81612d92565b91508282048414831517613b4457613b4361318e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613b8582612d92565b9150613b9083612d92565b925082613ba057613b9f613b4b565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613c07602683612c88565b9150613c1282613bab565b604082019050919050565b60006020820190508181036000830152613c3681613bfa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613cd081612d54565b82525050565b6000613ce28383613cc7565b60208301905092915050565b6000602082019050919050565b6000613d0682613c9b565b613d108185613ca6565b9350613d1b83613cb7565b8060005b83811015613d4c578151613d338882613cd6565b9750613d3e83613cee565b925050600181019050613d1f565b5085935050505092915050565b600060a082019050613d6e6000830188612ee5565b613d7b6020830187613418565b8181036040830152613d8d8186613cfb565b9050613d9c6060830185612f62565b613da96080830184612ee5565b969550505050505056fea264697066735822122041f85f2c8259a1f9bd1e0bc2103a3722ee6d047582b43acfc9fd9fccc2a731ad64736f6c63430008120033

Deployed Bytecode Sourcemap

18678:9114:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5049:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6651:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19919:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19662:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5538:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6853:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19745:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5380:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7390:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19710:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19322:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23131:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23022:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19402:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5709:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1797:103;;;;;;;;;;;;;:::i;:::-;;20890:144;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21040:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20705:112;;;;;;;;;;;;;:::i;:::-;;1146:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21303:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5268:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21547:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7688:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6065:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19989:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19362:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21409:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19003:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6328:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19481:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19123:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19442:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21859:1021;;;:::i;:::-;;18869:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2055:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19226:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5049:100;5103:13;5136:5;5129:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5049:100;:::o;6651:194::-;6759:4;6776:39;6785:12;:10;:12::i;:::-;6799:7;6808:6;6776:8;:39::i;:::-;6833:4;6826:11;;6651:194;;;;:::o;19919:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19662:41::-;;;;;;;;;;;;;:::o;5538:108::-;5599:7;5626:12;;5619:19;;5538:108;:::o;6853:529::-;6993:4;7010:36;7020:6;7028:9;7039:6;7010:9;:36::i;:::-;7059:24;7086:11;:19;7098:6;7086:19;;;;;;;;;;;;;;;:33;7106:12;:10;:12::i;:::-;7086:33;;;;;;;;;;;;;;;;7059:60;;7172:6;7152:16;:26;;7130:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;7282:57;7291:6;7299:12;:10;:12::i;:::-;7332:6;7313:16;:25;7282:8;:57::i;:::-;7370:4;7363:11;;;6853:529;;;;;:::o;19745:53::-;19791:6;19745:53;:::o;5380:93::-;5438:5;5463:2;5456:9;;5380:93;:::o;7390:290::-;7503:4;7520:130;7543:12;:10;:12::i;:::-;7570:7;7629:10;7592:11;:25;7604:12;:10;:12::i;:::-;7592:25;;;;;;;;;;;;;;;:34;7618:7;7592:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7520:8;:130::i;:::-;7668:4;7661:11;;7390:290;;;;:::o;19710:28::-;;;;;;;;;;;;;:::o;19322:33::-;;;;;;;;;;;;;:::o;23131:126::-;23197:4;23221:19;:28;23241:7;23221:28;;;;;;;;;;;;;;;;;;;;;;;;;23214:35;;23131:126;;;:::o;23022:103::-;1377:12;:10;:12::i;:::-;1366:23;;:7;:5;:7::i;:::-;:23;;;1358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23108:9:::1;23096;;:21;;;;;;;;;;;;;;;;;;23022:103:::0;:::o;19402:31::-;;;;;;;;;;;;;:::o;5709:143::-;5799:7;5826:9;:18;5836:7;5826:18;;;;;;;;;;;;;;;;5819:25;;5709:143;;;:::o;1797:103::-;1377:12;:10;:12::i;:::-;1366:23;;:7;:5;:7::i;:::-;:23;;;1358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1862:30:::1;1889:1;1862:18;:30::i;:::-;1797:103::o:0;20890:144::-;20942:4;1377:12;:10;:12::i;:::-;1366:23;;:7;:5;:7::i;:::-;:23;;;1358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20976:5:::1;20959:14;;:22;;;;;;;;;;;;;;;;;;21003:1;20992:8;:12;;;;21022:4;21015:11;;20890:144:::0;:::o;21040:169::-;1377:12;:10;:12::i;:::-;1366:23;;:7;:5;:7::i;:::-;:23;;;1358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21197:4:::1;21155:31;:39;21187:6;21155:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21040:169:::0;;:::o;20705:112::-;1377:12;:10;:12::i;:::-;1366:23;;:7;:5;:7::i;:::-;:23;;;1358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20776:4:::1;20760:13;;:20;;;;;;;;;;;;;;;;;;20805:4;20791:11;;:18;;;;;;;;;;;;;;;;;;20705:112::o:0;1146:87::-;1192:7;1219:6;;;;;;;;;;;1212:13;;1146:87;:::o;21303:100::-;1377:12;:10;:12::i;:::-;1366:23;;:7;:5;:7::i;:::-;:23;;;1358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21388:7:::1;21374:11;;:21;;;;;;;;;;;;;;;;;;21303:100:::0;:::o;5268:104::-;5324:13;5357:7;5350:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5268:104;:::o;21547:306::-;1377:12;:10;:12::i;:::-;1366:23;;:7;:5;:7::i;:::-;:23;;;1358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21693:13:::1;;;;;;;;;;;21685:21;;:4;:21;;::::0;21663:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21804:41;21833:4;21839:5;21804:28;:41::i;:::-;21547:306:::0;;:::o;7688:475::-;7806:4;7823:24;7850:11;:25;7862:12;:10;:12::i;:::-;7850:25;;;;;;;;;;;;;;;:34;7876:7;7850:34;;;;;;;;;;;;;;;;7823:61;;7937:15;7917:16;:35;;7895:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;8053:67;8062:12;:10;:12::i;:::-;8076:7;8104:15;8085:16;:34;8053:8;:67::i;:::-;8151:4;8144:11;;;7688:475;;;;:::o;6065:200::-;6176:4;6193:42;6203:12;:10;:12::i;:::-;6217:9;6228:6;6193:9;:42::i;:::-;6253:4;6246:11;;6065:200;;;;:::o;19989:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19362:33::-;;;;;;;;;;;;;:::o;21409:132::-;1377:12;:10;:12::i;:::-;1366:23;;:7;:5;:7::i;:::-;:23;;;1358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21525:8:::1;21494:19;:28;21514:7;21494:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21409:132:::0;;:::o;19003:64::-;;;;:::o;6328:176::-;6442:7;6469:11;:18;6481:5;6469:18;;;;;;;;;;;;;;;:27;6488:7;6469:27;;;;;;;;;;;;;;;;6462:34;;6328:176;;;;:::o;19481:28::-;;;;:::o;19123:62::-;;;;:::o;19442:26::-;;;;:::o;21859:1021::-;1377:12;:10;:12::i;:::-;1366:23;;:7;:5;:7::i;:::-;:23;;;1358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21988:35:::1;22059:42;21988:124;;22143:16;22125:15;;:34;;;;;;;;;;;;;;;;;;22170:58;22204:16;22223:4;22170:25;:58::i;:::-;22239:64;22256:4;22271:15;;;;;;;;;;;22289:13;:11;:13::i;:::-;22239:8;:64::i;:::-;22378:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22360:70;;;22439:4;22446:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22360:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22344:13;;:126;;;;;;;;;;;;;;;;;;22481:55;22515:13;;;;;;;;;;;22531:4;22481:25;:55::i;:::-;22547:58;22584:13;;;;;;;;;;;22600:4;22547:28;:58::i;:::-;22618:15;;;;;;;;;;;:31;;;22657:9;22690:4;22710:13;:11;:13::i;:::-;22738:1;22781::::0;22824:7:::1;:5;:7::i;:::-;22846:15;22618:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21910:970;21859:1021::o:0;18869:78::-;;;;;;;;;;;;;:::o;2055:238::-;1377:12;:10;:12::i;:::-;1366:23;;:7;:5;:7::i;:::-;:23;;;1358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2178:1:::1;2158:22;;:8;:22;;::::0;2136:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2257:28;2276:8;2257:18;:28::i;:::-;2055:238:::0;:::o;19226:53::-;;;;:::o;467:98::-;520:7;547:10;540:17;;467:98;:::o;9955:380::-;10108:1;10091:19;;:5;:19;;;10083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10189:1;10170:21;;:7;:21;;;10162:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10273:6;10243:11;:18;10255:5;10243:18;;;;;;;;;;;;;;;:27;10262:7;10243:27;;;;;;;;;;;;;;;:36;;;;10311:7;10295:32;;10304:5;10295:32;;;10320:6;10295:32;;;;;;:::i;:::-;;;;;;;;9955:380;;;:::o;23263:3339::-;23411:1;23395:18;;:4;:18;;;23387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23488:1;23474:16;;:2;:16;;;23466:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23558:1;23549:6;:10;23541:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23620:14;;;;;;;;;;;23616:1699;;;23681:7;:5;:7::i;:::-;23673:15;;:4;:15;;;;:49;;;;;23715:7;:5;:7::i;:::-;23709:13;;:2;:13;;;;23673:49;:86;;;;;23757:1;23743:16;;:2;:16;;;;23673:86;:128;;;;;23794:6;23780:21;;:2;:21;;;;23673:128;:158;;;;;23823:8;;;;;;;;;;;23822:9;23673:158;23651:1653;;;23871:13;;;;;;;;;;;23866:228;;23943:19;:25;23963:4;23943:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23972:19;:23;23992:2;23972:23;;;;;;;;;;;;;;;;;;;;;;;;;23943:52;23909:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;23866:228;24168:25;:31;24194:4;24168:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24225:31;:35;24257:2;24225:35;;;;;;;;;;;;;;;;;;;;;;;;;24224:36;24168:92;24142:1147;;;24347:20;;24337:6;:30;;24303:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;24555:9;;24538:13;24548:2;24538:9;:13::i;:::-;24529:6;:22;;;;:::i;:::-;:35;;24495:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24142:1147;;;24733:25;:29;24759:2;24733:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24788:31;:37;24820:4;24788:37;;;;;;;;;;;;;;;;;;;;;;;;;24787:38;24733:92;24707:582;;;24912:20;;24902:6;:30;;24868:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;24707:582;;;25069:31;:35;25101:2;25069:35;;;;;;;;;;;;;;;;;;;;;;;;;25064:225;;25189:9;;25172:13;25182:2;25172:9;:13::i;:::-;25163:6;:22;;;;:::i;:::-;:35;;25129:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25064:225;24707:582;24142:1147;23651:1653;23616:1699;25345:11;;;;;;;;;;;:55;;;;;25392:8;;;;;;;;;;;25391:9;25345:55;:123;;;;;25437:25;:31;25463:4;25437:31;;;;;;;;;;;;;;;;;;;;;;;;;25436:32;25345:123;:185;;;;;25505:19;:25;25525:4;25505:25;;;;;;;;;;;;;;;;;;;;;;;;;25504:26;25345:185;:245;;;;;25567:19;:23;25587:2;25567:23;;;;;;;;;;;;;;;;;;;;;;;;;25566:24;25345:245;25327:392;;;25647:4;25636:8;;:15;;;;;;;;;;;;;;;;;;25666:10;:8;:10::i;:::-;25702:5;25691:8;;:16;;;;;;;;;;;;;;;;;;25327:392;25731:12;25747:8;;;;;;;;;;;25746:9;25731:24;;25857:19;:25;25877:4;25857:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25886:19;:23;25906:2;25886:23;;;;;;;;;;;;;;;;;;;;;;;;;25857:52;25853:100;;;25936:5;25926:15;;25853:100;25965:12;26070:7;26066:485;;;26122:25;:29;26148:2;26122:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26166:1;26155:8;;:12;26122:45;26118:286;;;26195:29;26220:3;26195:20;26206:8;;26195:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;26188:36;;26118:286;;;26286:25;:31;26312:4;26286:31;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;26331:1;26321:7;;:11;26286:46;26282:122;;;26360:28;26384:3;26360:19;26371:7;;26360:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;26353:35;;26282:122;26118:286;26431:1;26424:4;:8;26420:91;;;26453:42;26469:4;26483;26490;26453:15;:42::i;:::-;26420:91;26535:4;26525:14;;;;;:::i;:::-;;;26066:485;26561:33;26577:4;26583:2;26587:6;26561:15;:33::i;:::-;23376:3226;;23263:3339;;;:::o;2453:191::-;2527:16;2546:6;;;;;;;;;;;2527:25;;2572:8;2563:6;;:17;;;;;;;;;;;;;;;;;;2627:8;2596:40;;2617:8;2596:40;;;;;;;;;;;;2516:128;2453:191;:::o;22886:130::-;23003:5;22969:25;:31;22995:4;22969:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22886:130;;:::o;27199:590::-;27238:23;27264:24;27282:4;27264:9;:24::i;:::-;27238:50;;27299:12;27345:1;27326:15;:20;27322:59;;27363:7;;;;27322:59;27414:18;;27395:15;:37;27391:391;;27449:26;27478:18;;27449:47;;27511:36;27528:18;27511:16;:36::i;:::-;27562:23;27588:21;27562:47;;27646:9;;;;;;;;;;;27638:23;;27669:15;27638:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27624:65;;;;;27709:61;27725:18;27745:15;27762:7;27709:61;;;;;;;;:::i;:::-;;;;;;;;27434:348;;27391:391;27227:562;;27199:590;:::o;12317:98::-;12375:7;12406:1;12402;:5;;;;:::i;:::-;12395:12;;12317:98;;;;:::o;12423:::-;12481:7;12512:1;12508;:5;;;;:::i;:::-;12501:12;;12423:98;;;;:::o;8171:770::-;8329:1;8311:20;;:6;:20;;;8303:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8413:1;8392:23;;:9;:23;;;8384:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8468:47;8489:6;8497:9;8508:6;8468:20;:47::i;:::-;8528:21;8552:9;:17;8562:6;8552:17;;;;;;;;;;;;;;;;8528:41;;8619:6;8602:13;:23;;8580:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8763:6;8747:13;:22;8727:9;:17;8737:6;8727:17;;;;;;;;;;;;;;;:42;;;;8815:6;8791:9;:20;8801:9;8791:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8856:9;8839:35;;8848:6;8839:35;;;8867:6;8839:35;;;;;;:::i;:::-;;;;;;;;8887:46;8907:6;8915:9;8926:6;8887:19;:46::i;:::-;8292:649;8171:770;;;:::o;26608:585::-;26734:21;26772:1;26758:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26734:40;;26803:4;26785;26790:1;26785:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26829:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26819:4;26824:1;26819:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26862:62;26879:4;26894:15;;;;;;;;;;;26912:11;26862:8;:62::i;:::-;26961:15;;;;;;;;;;;:66;;;27042:11;27068:1;27112:4;27139;27159:15;26961:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26663:530;26608:585;:::o;10343:125::-;;;;:::o;10476:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:118::-;5823:24;5841:5;5823:24;:::i;:::-;5818:3;5811:37;5736:118;;:::o;5860:222::-;5953:4;5991:2;5980:9;5976:18;5968:26;;6004:71;6072:1;6061:9;6057:17;6048:6;6004:71;:::i;:::-;5860:222;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:323::-;7309:6;7358:2;7346:9;7337:7;7333:23;7329:32;7326:119;;;7364:79;;:::i;:::-;7326:119;7484:1;7509:50;7551:7;7542:6;7531:9;7527:22;7509:50;:::i;:::-;7499:60;;7455:114;7253:323;;;;:::o;7582:474::-;7650:6;7658;7707:2;7695:9;7686:7;7682:23;7678:32;7675:119;;;7713:79;;:::i;:::-;7675:119;7833:1;7858:53;7903:7;7894:6;7883:9;7879:22;7858:53;:::i;:::-;7848:63;;7804:117;7960:2;7986:53;8031:7;8022:6;8011:9;8007:22;7986:53;:::i;:::-;7976:63;;7931:118;7582:474;;;;;:::o;8062:180::-;8110:77;8107:1;8100:88;8207:4;8204:1;8197:15;8231:4;8228:1;8221:15;8248:320;8292:6;8329:1;8323:4;8319:12;8309:22;;8376:1;8370:4;8366:12;8397:18;8387:81;;8453:4;8445:6;8441:17;8431:27;;8387:81;8515:2;8507:6;8504:14;8484:18;8481:38;8478:84;;8534:18;;:::i;:::-;8478:84;8299:269;8248:320;;;:::o;8574:227::-;8714:34;8710:1;8702:6;8698:14;8691:58;8783:10;8778:2;8770:6;8766:15;8759:35;8574:227;:::o;8807:366::-;8949:3;8970:67;9034:2;9029:3;8970:67;:::i;:::-;8963:74;;9046:93;9135:3;9046:93;:::i;:::-;9164:2;9159:3;9155:12;9148:19;;8807:366;;;:::o;9179:419::-;9345:4;9383:2;9372:9;9368:18;9360:26;;9432:9;9426:4;9422:20;9418:1;9407:9;9403:17;9396:47;9460:131;9586:4;9460:131;:::i;:::-;9452:139;;9179:419;;;:::o;9604:180::-;9652:77;9649:1;9642:88;9749:4;9746:1;9739:15;9773:4;9770:1;9763:15;9790:191;9830:3;9849:20;9867:1;9849:20;:::i;:::-;9844:25;;9883:20;9901:1;9883:20;:::i;:::-;9878:25;;9926:1;9923;9919:9;9912:16;;9947:3;9944:1;9941:10;9938:36;;;9954:18;;:::i;:::-;9938:36;9790:191;;;;:::o;9987:182::-;10127:34;10123:1;10115:6;10111:14;10104:58;9987:182;:::o;10175:366::-;10317:3;10338:67;10402:2;10397:3;10338:67;:::i;:::-;10331:74;;10414:93;10503:3;10414:93;:::i;:::-;10532:2;10527:3;10523:12;10516:19;;10175:366;;;:::o;10547:419::-;10713:4;10751:2;10740:9;10736:18;10728:26;;10800:9;10794:4;10790:20;10786:1;10775:9;10771:17;10764:47;10828:131;10954:4;10828:131;:::i;:::-;10820:139;;10547:419;;;:::o;10972:244::-;11112:34;11108:1;11100:6;11096:14;11089:58;11181:27;11176:2;11168:6;11164:15;11157:52;10972:244;:::o;11222:366::-;11364:3;11385:67;11449:2;11444:3;11385:67;:::i;:::-;11378:74;;11461:93;11550:3;11461:93;:::i;:::-;11579:2;11574:3;11570:12;11563:19;;11222:366;;;:::o;11594:419::-;11760:4;11798:2;11787:9;11783:18;11775:26;;11847:9;11841:4;11837:20;11833:1;11822:9;11818:17;11811:47;11875:131;12001:4;11875:131;:::i;:::-;11867:139;;11594:419;;;:::o;12019:224::-;12159:34;12155:1;12147:6;12143:14;12136:58;12228:7;12223:2;12215:6;12211:15;12204:32;12019:224;:::o;12249:366::-;12391:3;12412:67;12476:2;12471:3;12412:67;:::i;:::-;12405:74;;12488:93;12577:3;12488:93;:::i;:::-;12606:2;12601:3;12597:12;12590:19;;12249:366;;;:::o;12621:419::-;12787:4;12825:2;12814:9;12810:18;12802:26;;12874:9;12868:4;12864:20;12860:1;12849:9;12845:17;12838:47;12902:131;13028:4;12902:131;:::i;:::-;12894:139;;12621:419;;;:::o;13046:143::-;13103:5;13134:6;13128:13;13119:22;;13150:33;13177:5;13150:33;:::i;:::-;13046:143;;;;:::o;13195:351::-;13265:6;13314:2;13302:9;13293:7;13289:23;13285:32;13282:119;;;13320:79;;:::i;:::-;13282:119;13440:1;13465:64;13521:7;13512:6;13501:9;13497:22;13465:64;:::i;:::-;13455:74;;13411:128;13195:351;;;;:::o;13552:332::-;13673:4;13711:2;13700:9;13696:18;13688:26;;13724:71;13792:1;13781:9;13777:17;13768:6;13724:71;:::i;:::-;13805:72;13873:2;13862:9;13858:18;13849:6;13805:72;:::i;:::-;13552:332;;;;;:::o;13890:85::-;13935:7;13964:5;13953:16;;13890:85;;;:::o;13981:158::-;14039:9;14072:61;14090:42;14099:32;14125:5;14099:32;:::i;:::-;14090:42;:::i;:::-;14072:61;:::i;:::-;14059:74;;13981:158;;;:::o;14145:147::-;14240:45;14279:5;14240:45;:::i;:::-;14235:3;14228:58;14145:147;;:::o;14298:807::-;14547:4;14585:3;14574:9;14570:19;14562:27;;14599:71;14667:1;14656:9;14652:17;14643:6;14599:71;:::i;:::-;14680:72;14748:2;14737:9;14733:18;14724:6;14680:72;:::i;:::-;14762:80;14838:2;14827:9;14823:18;14814:6;14762:80;:::i;:::-;14852;14928:2;14917:9;14913:18;14904:6;14852:80;:::i;:::-;14942:73;15010:3;14999:9;14995:19;14986:6;14942:73;:::i;:::-;15025;15093:3;15082:9;15078:19;15069:6;15025:73;:::i;:::-;14298:807;;;;;;;;;:::o;15111:143::-;15168:5;15199:6;15193:13;15184:22;;15215:33;15242:5;15215:33;:::i;:::-;15111:143;;;;:::o;15260:663::-;15348:6;15356;15364;15413:2;15401:9;15392:7;15388:23;15384:32;15381:119;;;15419:79;;:::i;:::-;15381:119;15539:1;15564:64;15620:7;15611:6;15600:9;15596:22;15564:64;:::i;:::-;15554:74;;15510:128;15677:2;15703:64;15759:7;15750:6;15739:9;15735:22;15703:64;:::i;:::-;15693:74;;15648:129;15816:2;15842:64;15898:7;15889:6;15878:9;15874:22;15842:64;:::i;:::-;15832:74;;15787:129;15260:663;;;;;:::o;15929:225::-;16069:34;16065:1;16057:6;16053:14;16046:58;16138:8;16133:2;16125:6;16121:15;16114:33;15929:225;:::o;16160:366::-;16302:3;16323:67;16387:2;16382:3;16323:67;:::i;:::-;16316:74;;16399:93;16488:3;16399:93;:::i;:::-;16517:2;16512:3;16508:12;16501:19;;16160:366;;;:::o;16532:419::-;16698:4;16736:2;16725:9;16721:18;16713:26;;16785:9;16779:4;16775:20;16771:1;16760:9;16756:17;16749:47;16813:131;16939:4;16813:131;:::i;:::-;16805:139;;16532:419;;;:::o;16957:223::-;17097:34;17093:1;17085:6;17081:14;17074:58;17166:6;17161:2;17153:6;17149:15;17142:31;16957:223;:::o;17186:366::-;17328:3;17349:67;17413:2;17408:3;17349:67;:::i;:::-;17342:74;;17425:93;17514:3;17425:93;:::i;:::-;17543:2;17538:3;17534:12;17527:19;;17186:366;;;:::o;17558:419::-;17724:4;17762:2;17751:9;17747:18;17739:26;;17811:9;17805:4;17801:20;17797:1;17786:9;17782:17;17775:47;17839:131;17965:4;17839:131;:::i;:::-;17831:139;;17558:419;;;:::o;17983:221::-;18123:34;18119:1;18111:6;18107:14;18100:58;18192:4;18187:2;18179:6;18175:15;18168:29;17983:221;:::o;18210:366::-;18352:3;18373:67;18437:2;18432:3;18373:67;:::i;:::-;18366:74;;18449:93;18538:3;18449:93;:::i;:::-;18567:2;18562:3;18558:12;18551:19;;18210:366;;;:::o;18582:419::-;18748:4;18786:2;18775:9;18771:18;18763:26;;18835:9;18829:4;18825:20;18821:1;18810:9;18806:17;18799:47;18863:131;18989:4;18863:131;:::i;:::-;18855:139;;18582:419;;;:::o;19007:224::-;19147:34;19143:1;19135:6;19131:14;19124:58;19216:7;19211:2;19203:6;19199:15;19192:32;19007:224;:::o;19237:366::-;19379:3;19400:67;19464:2;19459:3;19400:67;:::i;:::-;19393:74;;19476:93;19565:3;19476:93;:::i;:::-;19594:2;19589:3;19585:12;19578:19;;19237:366;;;:::o;19609:419::-;19775:4;19813:2;19802:9;19798:18;19790:26;;19862:9;19856:4;19852:20;19848:1;19837:9;19833:17;19826:47;19890:131;20016:4;19890:131;:::i;:::-;19882:139;;19609:419;;;:::o;20034:222::-;20174:34;20170:1;20162:6;20158:14;20151:58;20243:5;20238:2;20230:6;20226:15;20219:30;20034:222;:::o;20262:366::-;20404:3;20425:67;20489:2;20484:3;20425:67;:::i;:::-;20418:74;;20501:93;20590:3;20501:93;:::i;:::-;20619:2;20614:3;20610:12;20603:19;;20262:366;;;:::o;20634:419::-;20800:4;20838:2;20827:9;20823:18;20815:26;;20887:9;20881:4;20877:20;20873:1;20862:9;20858:17;20851:47;20915:131;21041:4;20915:131;:::i;:::-;20907:139;;20634:419;;;:::o;21059:228::-;21199:34;21195:1;21187:6;21183:14;21176:58;21268:11;21263:2;21255:6;21251:15;21244:36;21059:228;:::o;21293:366::-;21435:3;21456:67;21520:2;21515:3;21456:67;:::i;:::-;21449:74;;21532:93;21621:3;21532:93;:::i;:::-;21650:2;21645:3;21641:12;21634:19;;21293:366;;;:::o;21665:419::-;21831:4;21869:2;21858:9;21854:18;21846:26;;21918:9;21912:4;21908:20;21904:1;21893:9;21889:17;21882:47;21946:131;22072:4;21946:131;:::i;:::-;21938:139;;21665:419;;;:::o;22090:177::-;22230:29;22226:1;22218:6;22214:14;22207:53;22090:177;:::o;22273:366::-;22415:3;22436:67;22500:2;22495:3;22436:67;:::i;:::-;22429:74;;22512:93;22601:3;22512:93;:::i;:::-;22630:2;22625:3;22621:12;22614:19;;22273:366;;;:::o;22645:419::-;22811:4;22849:2;22838:9;22834:18;22826:26;;22898:9;22892:4;22888:20;22884:1;22873:9;22869:17;22862:47;22926:131;23052:4;22926:131;:::i;:::-;22918:139;;22645:419;;;:::o;23070:240::-;23210:34;23206:1;23198:6;23194:14;23187:58;23279:23;23274:2;23266:6;23262:15;23255:48;23070:240;:::o;23316:366::-;23458:3;23479:67;23543:2;23538:3;23479:67;:::i;:::-;23472:74;;23555:93;23644:3;23555:93;:::i;:::-;23673:2;23668:3;23664:12;23657:19;;23316:366;;;:::o;23688:419::-;23854:4;23892:2;23881:9;23877:18;23869:26;;23941:9;23935:4;23931:20;23927:1;23916:9;23912:17;23905:47;23969:131;24095:4;23969:131;:::i;:::-;23961:139;;23688:419;;;:::o;24113:169::-;24253:21;24249:1;24241:6;24237:14;24230:45;24113:169;:::o;24288:366::-;24430:3;24451:67;24515:2;24510:3;24451:67;:::i;:::-;24444:74;;24527:93;24616:3;24527:93;:::i;:::-;24645:2;24640:3;24636:12;24629:19;;24288:366;;;:::o;24660:419::-;24826:4;24864:2;24853:9;24849:18;24841:26;;24913:9;24907:4;24903:20;24899:1;24888:9;24884:17;24877:47;24941:131;25067:4;24941:131;:::i;:::-;24933:139;;24660:419;;;:::o;25085:241::-;25225:34;25221:1;25213:6;25209:14;25202:58;25294:24;25289:2;25281:6;25277:15;25270:49;25085:241;:::o;25332:366::-;25474:3;25495:67;25559:2;25554:3;25495:67;:::i;:::-;25488:74;;25571:93;25660:3;25571:93;:::i;:::-;25689:2;25684:3;25680:12;25673:19;;25332:366;;;:::o;25704:419::-;25870:4;25908:2;25897:9;25893:18;25885:26;;25957:9;25951:4;25947:20;25943:1;25932:9;25928:17;25921:47;25985:131;26111:4;25985:131;:::i;:::-;25977:139;;25704:419;;;:::o;26129:194::-;26169:4;26189:20;26207:1;26189:20;:::i;:::-;26184:25;;26223:20;26241:1;26223:20;:::i;:::-;26218:25;;26267:1;26264;26260:9;26252:17;;26291:1;26285:4;26282:11;26279:37;;;26296:18;;:::i;:::-;26279:37;26129:194;;;;:::o;26329:147::-;26430:11;26467:3;26452:18;;26329:147;;;;:::o;26482:114::-;;:::o;26602:398::-;26761:3;26782:83;26863:1;26858:3;26782:83;:::i;:::-;26775:90;;26874:93;26963:3;26874:93;:::i;:::-;26992:1;26987:3;26983:11;26976:18;;26602:398;;;:::o;27006:379::-;27190:3;27212:147;27355:3;27212:147;:::i;:::-;27205:154;;27376:3;27369:10;;27006:379;;;:::o;27391:430::-;27534:4;27572:2;27561:9;27557:18;27549:26;;27585:71;27653:1;27642:9;27638:17;27629:6;27585:71;:::i;:::-;27666:72;27734:2;27723:9;27719:18;27710:6;27666:72;:::i;:::-;27748:66;27810:2;27799:9;27795:18;27786:6;27748:66;:::i;:::-;27391:430;;;;;;:::o;27827:410::-;27867:7;27890:20;27908:1;27890:20;:::i;:::-;27885:25;;27924:20;27942:1;27924:20;:::i;:::-;27919:25;;27979:1;27976;27972:9;28001:30;28019:11;28001:30;:::i;:::-;27990:41;;28180:1;28171:7;28167:15;28164:1;28161:22;28141:1;28134:9;28114:83;28091:139;;28210:18;;:::i;:::-;28091:139;27875:362;27827:410;;;;:::o;28243:180::-;28291:77;28288:1;28281:88;28388:4;28385:1;28378:15;28412:4;28409:1;28402:15;28429:185;28469:1;28486:20;28504:1;28486:20;:::i;:::-;28481:25;;28520:20;28538:1;28520:20;:::i;:::-;28515:25;;28559:1;28549:35;;28564:18;;:::i;:::-;28549:35;28606:1;28603;28599:9;28594:14;;28429:185;;;;:::o;28620:225::-;28760:34;28756:1;28748:6;28744:14;28737:58;28829:8;28824:2;28816:6;28812:15;28805:33;28620:225;:::o;28851:366::-;28993:3;29014:67;29078:2;29073:3;29014:67;:::i;:::-;29007:74;;29090:93;29179:3;29090:93;:::i;:::-;29208:2;29203:3;29199:12;29192:19;;28851:366;;;:::o;29223:419::-;29389:4;29427:2;29416:9;29412:18;29404:26;;29476:9;29470:4;29466:20;29462:1;29451:9;29447:17;29440:47;29504:131;29630:4;29504:131;:::i;:::-;29496:139;;29223:419;;;:::o;29648:180::-;29696:77;29693:1;29686:88;29793:4;29790:1;29783:15;29817:4;29814:1;29807:15;29834:180;29882:77;29879:1;29872:88;29979:4;29976:1;29969:15;30003:4;30000:1;29993:15;30020:114;30087:6;30121:5;30115:12;30105:22;;30020:114;;;:::o;30140:184::-;30239:11;30273:6;30268:3;30261:19;30313:4;30308:3;30304:14;30289:29;;30140:184;;;;:::o;30330:132::-;30397:4;30420:3;30412:11;;30450:4;30445:3;30441:14;30433:22;;30330:132;;;:::o;30468:108::-;30545:24;30563:5;30545:24;:::i;:::-;30540:3;30533:37;30468:108;;:::o;30582:179::-;30651:10;30672:46;30714:3;30706:6;30672:46;:::i;:::-;30750:4;30745:3;30741:14;30727:28;;30582:179;;;;:::o;30767:113::-;30837:4;30869;30864:3;30860:14;30852:22;;30767:113;;;:::o;30916:732::-;31035:3;31064:54;31112:5;31064:54;:::i;:::-;31134:86;31213:6;31208:3;31134:86;:::i;:::-;31127:93;;31244:56;31294:5;31244:56;:::i;:::-;31323:7;31354:1;31339:284;31364:6;31361:1;31358:13;31339:284;;;31440:6;31434:13;31467:63;31526:3;31511:13;31467:63;:::i;:::-;31460:70;;31553:60;31606:6;31553:60;:::i;:::-;31543:70;;31399:224;31386:1;31383;31379:9;31374:14;;31339:284;;;31343:14;31639:3;31632:10;;31040:608;;;30916:732;;;;:::o;31654:831::-;31917:4;31955:3;31944:9;31940:19;31932:27;;31969:71;32037:1;32026:9;32022:17;32013:6;31969:71;:::i;:::-;32050:80;32126:2;32115:9;32111:18;32102:6;32050:80;:::i;:::-;32177:9;32171:4;32167:20;32162:2;32151:9;32147:18;32140:48;32205:108;32308:4;32299:6;32205:108;:::i;:::-;32197:116;;32323:72;32391:2;32380:9;32376:18;32367:6;32323:72;:::i;:::-;32405:73;32473:3;32462:9;32458:19;32449:6;32405:73;:::i;:::-;31654:831;;;;;;;;:::o

Swarm Source

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