ETH Price: $3,389.07 (-2.64%)
Gas: 1 Gwei

Token

MindVerse (MVERSE)
 

Overview

Max Total Supply

10,000,000 MVERSE

Holders

2,389

Market

Price

$0.03 @ 0.000010 ETH (-36.33%)

Onchain Market Cap

$338,701.40

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: MVERSE 11
Balance
1,651,122.521157107202696626 MVERSE

Value
$55,923.75 ( ~16.5012 Eth) [16.5112%]
0xebd0571f5ac7aa2c93ba5920576cd6e314d16eb3
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

MindVerse leverages AI to offer real-time crypto insights, enabling token audits, price fetching, and direct swaps on CEXs like Binance and Kucoin without KYC. Simplify your trading experience with AI-powered efficiency.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MindVerse

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-07
*/

/****

Website: https://mindverse.global/
Twitter: https://twitter.com/MindVerseERC20
Telegram: https://t.me/MindVerseERC20
Bot: https://t.me/mindverse_bot
                                                                                                   
****/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.23;

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;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {

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

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

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

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

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

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

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

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

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

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

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

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

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 MindVerse is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketerWallet;
    address public DevsWallet;

    uint256 public maxTx;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallets;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarkets;
    uint256 public tokensForDev;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTx;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketerWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    event DevsWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    constructor() ERC20("MindVerse", unicode"MVERSE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFrommaxTx(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFrommaxTx(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 5;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 5;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 10_000_000 * 1e18;

        maxTx = 100_000 * 1e18;
        maxWallets = 100_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 3) / 10000;

        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        marketerWallet = address(0x12326F39C55f5ee4Ebc5B01534918beC0b5E6C2A);
        DevsWallet = address(0x12326F39C55f5ee4Ebc5B01534918beC0b5E6C2A);

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFrommaxTx(owner(), true);
        excludeFrommaxTx(address(this), true);
        excludeFrommaxTx(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTx lower than 0.1%"
        );
        maxTx = newNum * (10**18);
    }

    function updatemaxWalletsAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallets lower than 0.5%"
        );
        maxWallets = newNum * (10**18);
    }

    function excludeFrommaxTx(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTx[updAds] = isEx;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateFees(
        uint256 _buyMarketingFee,
        uint256 _buyDevFee,
        uint256 _sellMarketingFee,
        uint256 _sellDevFee) external onlyOwner {
        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(buyTotalFees <= 75, "Must keep fees at 75% or less");
        require(sellTotalFees <= 75, "Must keep fees at 75% or less");
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 75, "Must keep fees at 75% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 75, "Must keep fees at 75% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updatemarketerWallet(address newmarketerWallet) external onlyOwner {
        emit marketerWalletUpdated(newmarketerWallet, marketerWallet);
        marketerWallet = newmarketerWallet;
    }

    function updateDevsWallet(address newWallet) external onlyOwner {
        emit DevsWalletUpdated(newWallet, DevsWallet);
        DevsWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

    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(!_isBlackList[from], "[from] black list");
        require(!_isBlackList[to], "[to] black list");

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

        if (limitsInEffect) {
            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {
            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] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarkets += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarkets += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function manualSwap(uint256 amount) external {
        require(_msgSender() == marketerWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    } 

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

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

        // 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));
        uint256 totalTokensToSwap = tokensForMarkets + tokensForDev;
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarkets = 0;
        tokensForDev = 0;

        (success, ) = address(DevsWallet).call{value: ethForDev}("");
        (success, ) = address(marketerWallet).call{ value: address(this).balance }("");
    }
}

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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olDevsWalletallet","type":"address"}],"name":"DevsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olDevsWalletallet","type":"address"}],"name":"marketerWalletUpdated","type":"event"},{"inputs":[],"name":"DevsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"disableTransferDelay","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":"excludeFrommaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallets","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":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarkets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmarketerWallet","type":"address"}],"name":"updatemarketerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxWalletsAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055505f600e5f6101000a81548160ff02191690831515021790555034801562000077575f80fd5b506040518060400160405280600981526020017f4d696e64566572736500000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d564552534500000000000000000000000000000000000000000000000000008152508160039081620000f5919062000d21565b50806004908162000107919062000d21565b5050506200012a6200011e6200059560201b60201c565b6200059c60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001558160016200065f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001f9919062000e6a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000285919062000e6a565b6040518363ffffffff1660e01b8152600401620002a492919062000eab565b6020604051808303815f875af1158015620002c1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002e7919062000e6a565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200035a60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200065f60201b60201c565b6200038e60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074660201b60201c565b5f600590505f80600590505f806a084595161401484a000000905069152d02c7e14af680000060098190555069152d02c7e14af6800000600b81905550612710600382620003dd919062000f03565b620003e9919062000f7a565b600a8190555084601081905550836011819055506011546010546200040f919062000fb1565b600f81905550826013819055508160148190555060145460135462000435919062000fb1565b6012819055507312326f39c55f5ee4ebc5b01534918bec0b5e6c2a60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507312326f39c55f5ee4ebc5b01534918bec0b5e6c2a60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000505620004f7620007e460201b60201c565b60016200080c60201b60201c565b620005183060016200080c60201b60201c565b6200052d61dead60016200080c60201b60201c565b6200054f62000541620007e460201b60201c565b60016200065f60201b60201c565b620005623060016200065f60201b60201c565b6200057761dead60016200065f60201b60201c565b6200058933826200094360201b60201c565b5050505050506200113a565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200066f6200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000695620007e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e59062001049565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200081c6200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000842620007e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200089b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008929062001049565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000937919062001085565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ab90620010ee565b60405180910390fd5b620009c75f838362000ab360201b60201c565b8060025f828254620009da919062000fb1565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a2e919062000fb1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a9491906200111f565b60405180910390a362000aaf5f838362000ab860201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b3957607f821691505b60208210810362000b4f5762000b4e62000af4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000bb37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b76565b62000bbf868362000b76565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c0962000c0362000bfd8462000bd7565b62000be0565b62000bd7565b9050919050565b5f819050919050565b62000c248362000be9565b62000c3c62000c338262000c10565b84845462000b82565b825550505050565b5f90565b62000c5262000c44565b62000c5f81848462000c19565b505050565b5b8181101562000c865762000c7a5f8262000c48565b60018101905062000c65565b5050565b601f82111562000cd55762000c9f8162000b55565b62000caa8462000b67565b8101602085101562000cba578190505b62000cd262000cc98562000b67565b83018262000c64565b50505b505050565b5f82821c905092915050565b5f62000cf75f198460080262000cda565b1980831691505092915050565b5f62000d11838362000ce6565b9150826002028217905092915050565b62000d2c8262000abd565b67ffffffffffffffff81111562000d485762000d4762000ac7565b5b62000d54825462000b21565b62000d6182828562000c8a565b5f60209050601f83116001811462000d97575f841562000d82578287015190505b62000d8e858262000d04565b86555062000dfd565b601f19841662000da78662000b55565b5f5b8281101562000dd05784890151825560018201915060208501945060208101905062000da9565b8683101562000df0578489015162000dec601f89168262000ce6565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e348262000e09565b9050919050565b62000e468162000e28565b811462000e51575f80fd5b50565b5f8151905062000e648162000e3b565b92915050565b5f6020828403121562000e825762000e8162000e05565b5b5f62000e918482850162000e54565b91505092915050565b62000ea58162000e28565b82525050565b5f60408201905062000ec05f83018562000e9a565b62000ecf602083018462000e9a565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f0f8262000bd7565b915062000f1c8362000bd7565b925082820262000f2c8162000bd7565b9150828204841483151762000f465762000f4562000ed6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f868262000bd7565b915062000f938362000bd7565b92508262000fa65762000fa562000f4d565b5b828204905092915050565b5f62000fbd8262000bd7565b915062000fca8362000bd7565b925082820190508082111562000fe55762000fe462000ed6565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200103160208362000feb565b91506200103e8262000ffb565b602082019050919050565b5f6020820190508181035f830152620010628162001023565b9050919050565b5f8115159050919050565b6200107f8162001069565b82525050565b5f6020820190506200109a5f83018462001074565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010d6601f8362000feb565b9150620010e382620010a0565b602082019050919050565b5f6020820190508181035f8301526200110781620010c8565b9050919050565b620011198162000bd7565b82525050565b5f602082019050620011345f8301846200110e565b92915050565b608051614f166200116f5f395f8181610df7015281816129fa0152818161349801528181613577015261359e0152614f165ff3fe60806040526004361061031d575f3560e01c80638a8c523c116101aa578063b70143c9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c6616ba114610a8a578063c876d0b914610ab2578063d257b34f14610adc57610324565b8063b70143c9146109e8578063b819a1a914610a10578063bbc0c74214610a3857610324565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d71461090a578063a72f458614610946578063a9059cbb14610970578063b62496f5146109ac57610324565b80639c3b4fdc1461088c5780639fccce32146108b6578063a0d82dc5146108e057610324565b80638a8c523c146107a85780638da5cb5b146107be57806392136913146107e8578063924de9b71461081257806395d89b411461083a5780639a7a23d61461086457610324565b806349bd5a5e116102695780636a486a8e11610222578063715018a6116101fc578063715018a6146107145780637437681e1461072a578063751039fc146107545780637bce5a041461077e57610324565b80636a486a8e146106845780636ddd1713146106ae57806370a08231146106d857610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634fbee193146105ce57806361528e271461060a578063644130d81461063457806366ca9b831461065c57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613af2565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613bba565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613c34565b610dd8565b6040516103ad9190613c8c565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613d00565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613d28565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613d41565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613d41565b610f31565b005b348015610465575f80fd5b50610480600480360381019061047b9190613d6c565b611040565b60405161048d9190613c8c565b60405180910390f35b3480156104a1575f80fd5b506104aa611132565b6040516104b79190613dcb565b60405180910390f35b3480156104cb575f80fd5b506104d4611138565b6040516104e19190613d28565b60405180910390f35b3480156104f5575f80fd5b506104fe61113e565b60405161050b9190613dcb565b60405180910390f35b34801561051f575f80fd5b50610528611163565b6040516105359190613dff565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613c34565b61116b565b6040516105719190613c8c565b60405180910390f35b348015610585575f80fd5b5061058e611212565b60405161059b9190613dcb565b60405180910390f35b3480156105af575f80fd5b506105b8611237565b6040516105c59190613c8c565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613e18565b611249565b6040516106019190613c8c565b60405180910390f35b348015610615575f80fd5b5061061e61129b565b60405161062b9190613d28565b60405180910390f35b34801561063f575f80fd5b5061065a60048036038101906106559190613e6d565b6112a1565b005b348015610667575f80fd5b50610682600480360381019061067d9190613af2565b611375565b005b34801561068f575f80fd5b5061069861145f565b6040516106a59190613d28565b60405180910390f35b3480156106b9575f80fd5b506106c2611465565b6040516106cf9190613c8c565b60405180910390f35b3480156106e3575f80fd5b506106fe60048036038101906106f99190613e18565b611478565b60405161070b9190613d28565b60405180910390f35b34801561071f575f80fd5b506107286114bd565b005b348015610735575f80fd5b5061073e611544565b60405161074b9190613d28565b60405180910390f35b34801561075f575f80fd5b5061076861154a565b6040516107759190613c8c565b60405180910390f35b348015610789575f80fd5b506107926115e7565b60405161079f9190613d28565b60405180910390f35b3480156107b3575f80fd5b506107bc6115ed565b005b3480156107c9575f80fd5b506107d26116a1565b6040516107df9190613dcb565b60405180910390f35b3480156107f3575f80fd5b506107fc6116c9565b6040516108099190613d28565b60405180910390f35b34801561081d575f80fd5b5061083860048036038101906108339190613eab565b6116cf565b005b348015610845575f80fd5b5061084e611768565b60405161085b9190613bba565b60405180910390f35b34801561086f575f80fd5b5061088a60048036038101906108859190613e6d565b6117f8565b005b348015610897575f80fd5b506108a0611911565b6040516108ad9190613d28565b60405180910390f35b3480156108c1575f80fd5b506108ca611917565b6040516108d79190613d28565b60405180910390f35b3480156108eb575f80fd5b506108f461191d565b6040516109019190613d28565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613c34565b611923565b60405161093d9190613c8c565b60405180910390f35b348015610951575f80fd5b5061095a611a09565b6040516109679190613dcb565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613c34565b611a2e565b6040516109a39190613c8c565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613e18565b611a4b565b6040516109df9190613c8c565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613d41565b611a68565b005b348015610a1b575f80fd5b50610a366004803603810190610a319190613e18565b611b29565b005b348015610a43575f80fd5b50610a4c611c63565b604051610a599190613c8c565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613e6d565b611c76565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613ed6565b611d98565b005b348015610abd575f80fd5b50610ac6611eee565b604051610ad39190613c8c565b60405180910390f35b348015610ae7575f80fd5b50610b026004803603810190610afd9190613d41565b611f00565b604051610b0f9190613c8c565b60405180910390f35b348015610b23575f80fd5b50610b2c612054565b604051610b399190613d28565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190613f3a565b61205a565b604051610b759190613d28565b60405180910390f35b348015610b89575f80fd5b50610b926120dc565b604051610b9f9190613d28565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613e18565b6120e2565b604051610bdb9190613c8c565b60405180910390f35b348015610bef575f80fd5b50610bf86120ff565b604051610c059190613c8c565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613e18565b61219c565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613e18565b6122d6565b005b610c666123cc565b73ffffffffffffffffffffffffffffffffffffffff16610c846116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fc2565b60405180910390fd5b8160138190555080601481905550601454601354610cf8919061400d565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b9061408a565b60405180910390fd5b5050565b606060038054610d57906140d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d83906140d5565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46123cc565b84846123d3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e2a6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e486116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613fc2565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe9190614105565b610ec89190614173565b610ed29190614173565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906141ed565b60405180910390fd5b670de0b6b3a764000081610f289190614105565b60098190555050565b610f396123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f576116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613fc2565b60405180910390fd5b670de0b6b3a76400006103e86005610fc3610e19565b610fcd9190614105565b610fd79190614173565b610fe19190614173565b811015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a9061427b565b60405180910390fd5b670de0b6b3a7640000816110379190614105565b600b8190555050565b5f61104c848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110936123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990614309565b60405180910390fd5b6111268561111e6123cc565b8584036123d3565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112086111776123cc565b848460015f6111846123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611203919061400d565b6123d3565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6112a96123cc565b73ffffffffffffffffffffffffffffffffffffffff166112c76116a1565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613fc2565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61137d6123cc565b73ffffffffffffffffffffffffffffffffffffffff1661139b6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613fc2565b60405180910390fd5b816010819055508060118190555060115460105461140f919061400d565b600f81905550604b600f54111561145b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114529061408a565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114c56123cc565b73ffffffffffffffffffffffffffffffffffffffff166114e36116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613fc2565b60405180910390fd5b6115425f61329a565b565b60095481565b5f6115536123cc565b73ffffffffffffffffffffffffffffffffffffffff166115716116a1565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be90613fc2565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6115f56123cc565b73ffffffffffffffffffffffffffffffffffffffff166116136116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613fc2565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116d76123cc565b73ffffffffffffffffffffffffffffffffffffffff166116f56116a1565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613fc2565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611777906140d5565b80601f01602080910402602001604051908101604052809291908181526020018280546117a3906140d5565b80156117ee5780601f106117c5576101008083540402835291602001916117ee565b820191905f5260205f20905b8154815290600101906020018083116117d157829003601f168201915b5050505050905090565b6118006123cc565b73ffffffffffffffffffffffffffffffffffffffff1661181e6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613fc2565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90614397565b60405180910390fd5b61190d828261335d565b5050565b60115481565b60165481565b60145481565b5f8060015f6119306123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e190614425565b60405180910390fd5b6119fe6119f56123cc565b858584036123d3565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611a41611a3a6123cc565b8484612596565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aa86123cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7575f80fd5b611ad030611478565b8111158015611ade57505f81115b611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b149061448d565b60405180910390fd5b611b26816133fb565b50565b611b316123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613fc2565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611c7e6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611c9c6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613fc2565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8c9190613c8c565b60405180910390a25050565b611da06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611dbe6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613fc2565b60405180910390fd5b8360108190555082601181905550601154601054611e32919061400d565b600f819055508160138190555080601481905550601454601354611e56919061400d565b601281905550604b600f541115611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e999061408a565b60405180910390fd5b604b6012541115611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf9061408a565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611f096123cc565b73ffffffffffffffffffffffffffffffffffffffff16611f276116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613fc2565b60405180910390fd5b620186a06001611f8b610e19565b611f959190614105565b611f9f9190614173565b821015611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd89061451b565b60405180910390fd5b6103e86005611fee610e19565b611ff89190614105565b6120029190614173565b821115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b906145a9565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6121086123cc565b73ffffffffffffffffffffffffffffffffffffffff166121266116a1565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613fc2565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6121a46123cc565b73ffffffffffffffffffffffffffffffffffffffff166121c26116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90613fc2565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122de6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122fc6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613fc2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790614637565b60405180910390fd5b6123c98161329a565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906146c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614753565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613d28565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb906147e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126699061486f565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f3906148d7565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d9061493f565b60405180910390fd5b5f810361279d5761279883835f61362e565b613295565b600c5f9054906101000a900460ff1615612e45576127b96116a1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282757506127f76116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612899575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b25750600660149054906101000a900460ff16155b15612e4457600c60019054906101000a900460ff166129a65760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612966575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c906149a7565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612b6a576129c26116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a4957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b695743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614a5b565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c07575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cae57600954811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614ae9565b60405180910390fd5b600b54612c5d83611478565b82612c68919061400d565b1115612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090614b51565b60405180910390fd5b612e43565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d4b575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d9a57600954811115612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90614bdf565b60405180910390fd5b612e42565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e4157600b54612df483611478565b82612dff919061400d565b1115612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790614b51565b60405180910390fd5b5b5b5b5b5b5f612e4f30611478565b90505f600a548210159050808015612e735750600c60029054906101000a900460ff165b8015612e8c5750600660149054906101000a900460ff16155b8015612edf5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f32575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f85575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc8576001600660146101000a81548160ff021916908315150217905550612fad6138a3565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613077575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613080575f90505b5f811561328557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130de57505f601254115b156131765761310b60646130fd60125488613a7290919063ffffffff16565b613a8790919063ffffffff16565b90506012546014548261311e9190614105565b6131289190614173565b60165f828254613138919061400d565b92505081905550601254601354826131509190614105565b61315a9190614173565b60155f82825461316a919061400d565b92505081905550613262565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131cd57505f600f54115b15613261576131fa60646131ec600f5488613a7290919063ffffffff16565b613a8790919063ffffffff16565b9050600f546011548261320d9190614105565b6132179190614173565b60165f828254613227919061400d565b92505081905550600f546010548261323f9190614105565b6132499190614173565b60155f828254613259919061400d565b925050819055505b5b5f8111156132765761327587308361362e565b5b80856132829190614bfd565b94505b61329087878761362e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561341757613416614c30565b5b6040519080825280602002602001820160405280156134455781602001602082028036833780820191505090505b50905030815f8151811061345c5761345b614c5d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135239190614c9e565b8160018151811061353757613536614c5d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061359c307f0000000000000000000000000000000000000000000000000000000000000000846123d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135fd959493929190614db9565b5f604051808303815f87803b158015613614575f80fd5b505af1158015613626573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361369c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613693906147e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361370a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137019061486f565b60405180910390fd5b613715838383613a9c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378f90614e81565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613826919061400d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388a9190613d28565b60405180910390a361389d848484613aa1565b50505050565b5f6138ad30611478565b90505f6016546015546138c0919061400d565b90505f8083036138d257505050613a70565b6014600a546138e19190614105565b8311156138fa576014600a546138f79190614105565b92505b5f479050613907846133fb565b5f61391b8247613aa690919063ffffffff16565b90505f6139458561393760165485613a7290919063ffffffff16565b613a8790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161399a90614ecc565b5f6040518083038185875af1925050503d805f81146139d4576040519150601f19603f3d011682016040523d82523d5f602084013e6139d9565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2490614ecc565b5f6040518083038185875af1925050503d805f8114613a5e576040519150601f19603f3d011682016040523d82523d5f602084013e613a63565b606091505b5050809450505050505050505b565b5f8183613a7f9190614105565b905092915050565b5f8183613a949190614173565b905092915050565b505050565b505050565b5f8183613ab39190614bfd565b905092915050565b5f80fd5b5f819050919050565b613ad181613abf565b8114613adb575f80fd5b50565b5f81359050613aec81613ac8565b92915050565b5f8060408385031215613b0857613b07613abb565b5b5f613b1585828601613ade565b9250506020613b2685828601613ade565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613b67578082015181840152602081019050613b4c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613b8c82613b30565b613b968185613b3a565b9350613ba6818560208601613b4a565b613baf81613b72565b840191505092915050565b5f6020820190508181035f830152613bd28184613b82565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613c0382613bda565b9050919050565b613c1381613bf9565b8114613c1d575f80fd5b50565b5f81359050613c2e81613c0a565b92915050565b5f8060408385031215613c4a57613c49613abb565b5b5f613c5785828601613c20565b9250506020613c6885828601613ade565b9150509250929050565b5f8115159050919050565b613c8681613c72565b82525050565b5f602082019050613c9f5f830184613c7d565b92915050565b5f819050919050565b5f613cc8613cc3613cbe84613bda565b613ca5565b613bda565b9050919050565b5f613cd982613cae565b9050919050565b5f613cea82613ccf565b9050919050565b613cfa81613ce0565b82525050565b5f602082019050613d135f830184613cf1565b92915050565b613d2281613abf565b82525050565b5f602082019050613d3b5f830184613d19565b92915050565b5f60208284031215613d5657613d55613abb565b5b5f613d6384828501613ade565b91505092915050565b5f805f60608486031215613d8357613d82613abb565b5b5f613d9086828701613c20565b9350506020613da186828701613c20565b9250506040613db286828701613ade565b9150509250925092565b613dc581613bf9565b82525050565b5f602082019050613dde5f830184613dbc565b92915050565b5f60ff82169050919050565b613df981613de4565b82525050565b5f602082019050613e125f830184613df0565b92915050565b5f60208284031215613e2d57613e2c613abb565b5b5f613e3a84828501613c20565b91505092915050565b613e4c81613c72565b8114613e56575f80fd5b50565b5f81359050613e6781613e43565b92915050565b5f8060408385031215613e8357613e82613abb565b5b5f613e9085828601613c20565b9250506020613ea185828601613e59565b9150509250929050565b5f60208284031215613ec057613ebf613abb565b5b5f613ecd84828501613e59565b91505092915050565b5f805f8060808587031215613eee57613eed613abb565b5b5f613efb87828801613ade565b9450506020613f0c87828801613ade565b9350506040613f1d87828801613ade565b9250506060613f2e87828801613ade565b91505092959194509250565b5f8060408385031215613f5057613f4f613abb565b5b5f613f5d85828601613c20565b9250506020613f6e85828601613c20565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613fac602083613b3a565b9150613fb782613f78565b602082019050919050565b5f6020820190508181035f830152613fd981613fa0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61401782613abf565b915061402283613abf565b925082820190508082111561403a57614039613fe0565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f614074601d83613b3a565b915061407f82614040565b602082019050919050565b5f6020820190508181035f8301526140a181614068565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140ec57607f821691505b6020821081036140ff576140fe6140a8565b5b50919050565b5f61410f82613abf565b915061411a83613abf565b925082820261412881613abf565b9150828204841483151761413f5761413e613fe0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61417d82613abf565b915061418883613abf565b92508261419857614197614146565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6141d7602083613b3a565b91506141e2826141a3565b602082019050919050565b5f6020820190508181035f830152614204816141cb565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f614265602583613b3a565b91506142708261420b565b604082019050919050565b5f6020820190508181035f83015261429281614259565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142f3602883613b3a565b91506142fe82614299565b604082019050919050565b5f6020820190508181035f830152614320816142e7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614381603983613b3a565b915061438c82614327565b604082019050919050565b5f6020820190508181035f8301526143ae81614375565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61440f602583613b3a565b915061441a826143b5565b604082019050919050565b5f6020820190508181035f83015261443c81614403565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f614477600c83613b3a565b915061448282614443565b602082019050919050565b5f6020820190508181035f8301526144a48161446b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614505603583613b3a565b9150614510826144ab565b604082019050919050565b5f6020820190508181035f830152614532816144f9565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614593603483613b3a565b915061459e82614539565b604082019050919050565b5f6020820190508181035f8301526145c081614587565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614621602683613b3a565b915061462c826145c7565b604082019050919050565b5f6020820190508181035f83015261464e81614615565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6146af602483613b3a565b91506146ba82614655565b604082019050919050565b5f6020820190508181035f8301526146dc816146a3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61473d602283613b3a565b9150614748826146e3565b604082019050919050565b5f6020820190508181035f83015261476a81614731565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6147cb602583613b3a565b91506147d682614771565b604082019050919050565b5f6020820190508181035f8301526147f8816147bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614859602383613b3a565b9150614864826147ff565b604082019050919050565b5f6020820190508181035f8301526148868161484d565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6148c1601183613b3a565b91506148cc8261488d565b602082019050919050565b5f6020820190508181035f8301526148ee816148b5565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614929600f83613b3a565b9150614934826148f5565b602082019050919050565b5f6020820190508181035f8301526149568161491d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614991601683613b3a565b915061499c8261495d565b602082019050919050565b5f6020820190508181035f8301526149be81614985565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614a45604983613b3a565b9150614a50826149c5565b606082019050919050565b5f6020820190508181035f830152614a7281614a39565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614ad3602683613b3a565b9150614ade82614a79565b604082019050919050565b5f6020820190508181035f830152614b0081614ac7565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614b3b601383613b3a565b9150614b4682614b07565b602082019050919050565b5f6020820190508181035f830152614b6881614b2f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614bc9602783613b3a565b9150614bd482614b6f565b604082019050919050565b5f6020820190508181035f830152614bf681614bbd565b9050919050565b5f614c0782613abf565b9150614c1283613abf565b9250828203905081811115614c2a57614c29613fe0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614c9881613c0a565b92915050565b5f60208284031215614cb357614cb2613abb565b5b5f614cc084828501614c8a565b91505092915050565b5f819050919050565b5f614cec614ce7614ce284614cc9565b613ca5565b613abf565b9050919050565b614cfc81614cd2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d3481613bf9565b82525050565b5f614d458383614d2b565b60208301905092915050565b5f602082019050919050565b5f614d6782614d02565b614d718185614d0c565b9350614d7c83614d1c565b805f5b83811015614dac578151614d938882614d3a565b9750614d9e83614d51565b925050600181019050614d7f565b5085935050505092915050565b5f60a082019050614dcc5f830188613d19565b614dd96020830187614cf3565b8181036040830152614deb8186614d5d565b9050614dfa6060830185613dbc565b614e076080830184613d19565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e6b602683613b3a565b9150614e7682614e11565b604082019050919050565b5f6020820190508181035f830152614e9881614e5f565b9050919050565b5f81905092915050565b50565b5f614eb75f83614e9f565b9150614ec282614ea9565b5f82019050919050565b5f614ed682614eac565b915081905091905056fea26469706673582212208322ff160fe8781ef112c202fc425a7cbc31ed4fcfa6355a44e6f60b1162eb0a64736f6c63430008170033

Deployed Bytecode

0x60806040526004361061031d575f3560e01c80638a8c523c116101aa578063b70143c9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c6616ba114610a8a578063c876d0b914610ab2578063d257b34f14610adc57610324565b8063b70143c9146109e8578063b819a1a914610a10578063bbc0c74214610a3857610324565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d71461090a578063a72f458614610946578063a9059cbb14610970578063b62496f5146109ac57610324565b80639c3b4fdc1461088c5780639fccce32146108b6578063a0d82dc5146108e057610324565b80638a8c523c146107a85780638da5cb5b146107be57806392136913146107e8578063924de9b71461081257806395d89b411461083a5780639a7a23d61461086457610324565b806349bd5a5e116102695780636a486a8e11610222578063715018a6116101fc578063715018a6146107145780637437681e1461072a578063751039fc146107545780637bce5a041461077e57610324565b80636a486a8e146106845780636ddd1713146106ae57806370a08231146106d857610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634fbee193146105ce57806361528e271461060a578063644130d81461063457806366ca9b831461065c57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613af2565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613bba565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613c34565b610dd8565b6040516103ad9190613c8c565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613d00565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613d28565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613d41565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613d41565b610f31565b005b348015610465575f80fd5b50610480600480360381019061047b9190613d6c565b611040565b60405161048d9190613c8c565b60405180910390f35b3480156104a1575f80fd5b506104aa611132565b6040516104b79190613dcb565b60405180910390f35b3480156104cb575f80fd5b506104d4611138565b6040516104e19190613d28565b60405180910390f35b3480156104f5575f80fd5b506104fe61113e565b60405161050b9190613dcb565b60405180910390f35b34801561051f575f80fd5b50610528611163565b6040516105359190613dff565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613c34565b61116b565b6040516105719190613c8c565b60405180910390f35b348015610585575f80fd5b5061058e611212565b60405161059b9190613dcb565b60405180910390f35b3480156105af575f80fd5b506105b8611237565b6040516105c59190613c8c565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613e18565b611249565b6040516106019190613c8c565b60405180910390f35b348015610615575f80fd5b5061061e61129b565b60405161062b9190613d28565b60405180910390f35b34801561063f575f80fd5b5061065a60048036038101906106559190613e6d565b6112a1565b005b348015610667575f80fd5b50610682600480360381019061067d9190613af2565b611375565b005b34801561068f575f80fd5b5061069861145f565b6040516106a59190613d28565b60405180910390f35b3480156106b9575f80fd5b506106c2611465565b6040516106cf9190613c8c565b60405180910390f35b3480156106e3575f80fd5b506106fe60048036038101906106f99190613e18565b611478565b60405161070b9190613d28565b60405180910390f35b34801561071f575f80fd5b506107286114bd565b005b348015610735575f80fd5b5061073e611544565b60405161074b9190613d28565b60405180910390f35b34801561075f575f80fd5b5061076861154a565b6040516107759190613c8c565b60405180910390f35b348015610789575f80fd5b506107926115e7565b60405161079f9190613d28565b60405180910390f35b3480156107b3575f80fd5b506107bc6115ed565b005b3480156107c9575f80fd5b506107d26116a1565b6040516107df9190613dcb565b60405180910390f35b3480156107f3575f80fd5b506107fc6116c9565b6040516108099190613d28565b60405180910390f35b34801561081d575f80fd5b5061083860048036038101906108339190613eab565b6116cf565b005b348015610845575f80fd5b5061084e611768565b60405161085b9190613bba565b60405180910390f35b34801561086f575f80fd5b5061088a60048036038101906108859190613e6d565b6117f8565b005b348015610897575f80fd5b506108a0611911565b6040516108ad9190613d28565b60405180910390f35b3480156108c1575f80fd5b506108ca611917565b6040516108d79190613d28565b60405180910390f35b3480156108eb575f80fd5b506108f461191d565b6040516109019190613d28565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613c34565b611923565b60405161093d9190613c8c565b60405180910390f35b348015610951575f80fd5b5061095a611a09565b6040516109679190613dcb565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613c34565b611a2e565b6040516109a39190613c8c565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613e18565b611a4b565b6040516109df9190613c8c565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613d41565b611a68565b005b348015610a1b575f80fd5b50610a366004803603810190610a319190613e18565b611b29565b005b348015610a43575f80fd5b50610a4c611c63565b604051610a599190613c8c565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613e6d565b611c76565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613ed6565b611d98565b005b348015610abd575f80fd5b50610ac6611eee565b604051610ad39190613c8c565b60405180910390f35b348015610ae7575f80fd5b50610b026004803603810190610afd9190613d41565b611f00565b604051610b0f9190613c8c565b60405180910390f35b348015610b23575f80fd5b50610b2c612054565b604051610b399190613d28565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190613f3a565b61205a565b604051610b759190613d28565b60405180910390f35b348015610b89575f80fd5b50610b926120dc565b604051610b9f9190613d28565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613e18565b6120e2565b604051610bdb9190613c8c565b60405180910390f35b348015610bef575f80fd5b50610bf86120ff565b604051610c059190613c8c565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613e18565b61219c565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613e18565b6122d6565b005b610c666123cc565b73ffffffffffffffffffffffffffffffffffffffff16610c846116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fc2565b60405180910390fd5b8160138190555080601481905550601454601354610cf8919061400d565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b9061408a565b60405180910390fd5b5050565b606060038054610d57906140d5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d83906140d5565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46123cc565b84846123d3565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e2a6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e486116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613fc2565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe9190614105565b610ec89190614173565b610ed29190614173565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906141ed565b60405180910390fd5b670de0b6b3a764000081610f289190614105565b60098190555050565b610f396123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f576116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613fc2565b60405180910390fd5b670de0b6b3a76400006103e86005610fc3610e19565b610fcd9190614105565b610fd79190614173565b610fe19190614173565b811015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a9061427b565b60405180910390fd5b670de0b6b3a7640000816110379190614105565b600b8190555050565b5f61104c848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110936123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990614309565b60405180910390fd5b6111268561111e6123cc565b8584036123d3565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112086111776123cc565b848460015f6111846123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611203919061400d565b6123d3565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6112a96123cc565b73ffffffffffffffffffffffffffffffffffffffff166112c76116a1565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613fc2565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61137d6123cc565b73ffffffffffffffffffffffffffffffffffffffff1661139b6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613fc2565b60405180910390fd5b816010819055508060118190555060115460105461140f919061400d565b600f81905550604b600f54111561145b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114529061408a565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114c56123cc565b73ffffffffffffffffffffffffffffffffffffffff166114e36116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613fc2565b60405180910390fd5b6115425f61329a565b565b60095481565b5f6115536123cc565b73ffffffffffffffffffffffffffffffffffffffff166115716116a1565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be90613fc2565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6115f56123cc565b73ffffffffffffffffffffffffffffffffffffffff166116136116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613fc2565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116d76123cc565b73ffffffffffffffffffffffffffffffffffffffff166116f56116a1565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613fc2565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611777906140d5565b80601f01602080910402602001604051908101604052809291908181526020018280546117a3906140d5565b80156117ee5780601f106117c5576101008083540402835291602001916117ee565b820191905f5260205f20905b8154815290600101906020018083116117d157829003601f168201915b5050505050905090565b6118006123cc565b73ffffffffffffffffffffffffffffffffffffffff1661181e6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613fc2565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa90614397565b60405180910390fd5b61190d828261335d565b5050565b60115481565b60165481565b60145481565b5f8060015f6119306123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e190614425565b60405180910390fd5b6119fe6119f56123cc565b858584036123d3565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611a41611a3a6123cc565b8484612596565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aa86123cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7575f80fd5b611ad030611478565b8111158015611ade57505f81115b611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b149061448d565b60405180910390fd5b611b26816133fb565b50565b611b316123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613fc2565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611c7e6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611c9c6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613fc2565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8c9190613c8c565b60405180910390a25050565b611da06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611dbe6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613fc2565b60405180910390fd5b8360108190555082601181905550601154601054611e32919061400d565b600f819055508160138190555080601481905550601454601354611e56919061400d565b601281905550604b600f541115611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e999061408a565b60405180910390fd5b604b6012541115611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf9061408a565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611f096123cc565b73ffffffffffffffffffffffffffffffffffffffff16611f276116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613fc2565b60405180910390fd5b620186a06001611f8b610e19565b611f959190614105565b611f9f9190614173565b821015611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd89061451b565b60405180910390fd5b6103e86005611fee610e19565b611ff89190614105565b6120029190614173565b821115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b906145a9565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6121086123cc565b73ffffffffffffffffffffffffffffffffffffffff166121266116a1565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613fc2565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6121a46123cc565b73ffffffffffffffffffffffffffffffffffffffff166121c26116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90613fc2565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122de6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122fc6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613fc2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790614637565b60405180910390fd5b6123c98161329a565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906146c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614753565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613d28565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb906147e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126699061486f565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f3906148d7565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d9061493f565b60405180910390fd5b5f810361279d5761279883835f61362e565b613295565b600c5f9054906101000a900460ff1615612e45576127b96116a1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282757506127f76116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612899575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b25750600660149054906101000a900460ff16155b15612e4457600c60019054906101000a900460ff166129a65760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612966575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c906149a7565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612b6a576129c26116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a4957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b695743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614a5b565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c07575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cae57600954811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614ae9565b60405180910390fd5b600b54612c5d83611478565b82612c68919061400d565b1115612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090614b51565b60405180910390fd5b612e43565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d4b575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d9a57600954811115612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90614bdf565b60405180910390fd5b612e42565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e4157600b54612df483611478565b82612dff919061400d565b1115612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790614b51565b60405180910390fd5b5b5b5b5b5b5f612e4f30611478565b90505f600a548210159050808015612e735750600c60029054906101000a900460ff165b8015612e8c5750600660149054906101000a900460ff16155b8015612edf5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f32575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f85575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc8576001600660146101000a81548160ff021916908315150217905550612fad6138a3565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613077575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613080575f90505b5f811561328557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130de57505f601254115b156131765761310b60646130fd60125488613a7290919063ffffffff16565b613a8790919063ffffffff16565b90506012546014548261311e9190614105565b6131289190614173565b60165f828254613138919061400d565b92505081905550601254601354826131509190614105565b61315a9190614173565b60155f82825461316a919061400d565b92505081905550613262565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131cd57505f600f54115b15613261576131fa60646131ec600f5488613a7290919063ffffffff16565b613a8790919063ffffffff16565b9050600f546011548261320d9190614105565b6132179190614173565b60165f828254613227919061400d565b92505081905550600f546010548261323f9190614105565b6132499190614173565b60155f828254613259919061400d565b925050819055505b5b5f8111156132765761327587308361362e565b5b80856132829190614bfd565b94505b61329087878761362e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561341757613416614c30565b5b6040519080825280602002602001820160405280156134455781602001602082028036833780820191505090505b50905030815f8151811061345c5761345b614c5d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135239190614c9e565b8160018151811061353757613536614c5d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061359c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135fd959493929190614db9565b5f604051808303815f87803b158015613614575f80fd5b505af1158015613626573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361369c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613693906147e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361370a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137019061486f565b60405180910390fd5b613715838383613a9c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378f90614e81565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613826919061400d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388a9190613d28565b60405180910390a361389d848484613aa1565b50505050565b5f6138ad30611478565b90505f6016546015546138c0919061400d565b90505f8083036138d257505050613a70565b6014600a546138e19190614105565b8311156138fa576014600a546138f79190614105565b92505b5f479050613907846133fb565b5f61391b8247613aa690919063ffffffff16565b90505f6139458561393760165485613a7290919063ffffffff16565b613a8790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161399a90614ecc565b5f6040518083038185875af1925050503d805f81146139d4576040519150601f19603f3d011682016040523d82523d5f602084013e6139d9565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2490614ecc565b5f6040518083038185875af1925050503d805f8114613a5e576040519150601f19603f3d011682016040523d82523d5f602084013e613a63565b606091505b5050809450505050505050505b565b5f8183613a7f9190614105565b905092915050565b5f8183613a949190614173565b905092915050565b505050565b505050565b5f8183613ab39190614bfd565b905092915050565b5f80fd5b5f819050919050565b613ad181613abf565b8114613adb575f80fd5b50565b5f81359050613aec81613ac8565b92915050565b5f8060408385031215613b0857613b07613abb565b5b5f613b1585828601613ade565b9250506020613b2685828601613ade565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613b67578082015181840152602081019050613b4c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613b8c82613b30565b613b968185613b3a565b9350613ba6818560208601613b4a565b613baf81613b72565b840191505092915050565b5f6020820190508181035f830152613bd28184613b82565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613c0382613bda565b9050919050565b613c1381613bf9565b8114613c1d575f80fd5b50565b5f81359050613c2e81613c0a565b92915050565b5f8060408385031215613c4a57613c49613abb565b5b5f613c5785828601613c20565b9250506020613c6885828601613ade565b9150509250929050565b5f8115159050919050565b613c8681613c72565b82525050565b5f602082019050613c9f5f830184613c7d565b92915050565b5f819050919050565b5f613cc8613cc3613cbe84613bda565b613ca5565b613bda565b9050919050565b5f613cd982613cae565b9050919050565b5f613cea82613ccf565b9050919050565b613cfa81613ce0565b82525050565b5f602082019050613d135f830184613cf1565b92915050565b613d2281613abf565b82525050565b5f602082019050613d3b5f830184613d19565b92915050565b5f60208284031215613d5657613d55613abb565b5b5f613d6384828501613ade565b91505092915050565b5f805f60608486031215613d8357613d82613abb565b5b5f613d9086828701613c20565b9350506020613da186828701613c20565b9250506040613db286828701613ade565b9150509250925092565b613dc581613bf9565b82525050565b5f602082019050613dde5f830184613dbc565b92915050565b5f60ff82169050919050565b613df981613de4565b82525050565b5f602082019050613e125f830184613df0565b92915050565b5f60208284031215613e2d57613e2c613abb565b5b5f613e3a84828501613c20565b91505092915050565b613e4c81613c72565b8114613e56575f80fd5b50565b5f81359050613e6781613e43565b92915050565b5f8060408385031215613e8357613e82613abb565b5b5f613e9085828601613c20565b9250506020613ea185828601613e59565b9150509250929050565b5f60208284031215613ec057613ebf613abb565b5b5f613ecd84828501613e59565b91505092915050565b5f805f8060808587031215613eee57613eed613abb565b5b5f613efb87828801613ade565b9450506020613f0c87828801613ade565b9350506040613f1d87828801613ade565b9250506060613f2e87828801613ade565b91505092959194509250565b5f8060408385031215613f5057613f4f613abb565b5b5f613f5d85828601613c20565b9250506020613f6e85828601613c20565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613fac602083613b3a565b9150613fb782613f78565b602082019050919050565b5f6020820190508181035f830152613fd981613fa0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61401782613abf565b915061402283613abf565b925082820190508082111561403a57614039613fe0565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f614074601d83613b3a565b915061407f82614040565b602082019050919050565b5f6020820190508181035f8301526140a181614068565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140ec57607f821691505b6020821081036140ff576140fe6140a8565b5b50919050565b5f61410f82613abf565b915061411a83613abf565b925082820261412881613abf565b9150828204841483151761413f5761413e613fe0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61417d82613abf565b915061418883613abf565b92508261419857614197614146565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6141d7602083613b3a565b91506141e2826141a3565b602082019050919050565b5f6020820190508181035f830152614204816141cb565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f614265602583613b3a565b91506142708261420b565b604082019050919050565b5f6020820190508181035f83015261429281614259565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142f3602883613b3a565b91506142fe82614299565b604082019050919050565b5f6020820190508181035f830152614320816142e7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614381603983613b3a565b915061438c82614327565b604082019050919050565b5f6020820190508181035f8301526143ae81614375565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61440f602583613b3a565b915061441a826143b5565b604082019050919050565b5f6020820190508181035f83015261443c81614403565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f614477600c83613b3a565b915061448282614443565b602082019050919050565b5f6020820190508181035f8301526144a48161446b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614505603583613b3a565b9150614510826144ab565b604082019050919050565b5f6020820190508181035f830152614532816144f9565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614593603483613b3a565b915061459e82614539565b604082019050919050565b5f6020820190508181035f8301526145c081614587565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614621602683613b3a565b915061462c826145c7565b604082019050919050565b5f6020820190508181035f83015261464e81614615565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6146af602483613b3a565b91506146ba82614655565b604082019050919050565b5f6020820190508181035f8301526146dc816146a3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61473d602283613b3a565b9150614748826146e3565b604082019050919050565b5f6020820190508181035f83015261476a81614731565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6147cb602583613b3a565b91506147d682614771565b604082019050919050565b5f6020820190508181035f8301526147f8816147bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614859602383613b3a565b9150614864826147ff565b604082019050919050565b5f6020820190508181035f8301526148868161484d565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6148c1601183613b3a565b91506148cc8261488d565b602082019050919050565b5f6020820190508181035f8301526148ee816148b5565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f614929600f83613b3a565b9150614934826148f5565b602082019050919050565b5f6020820190508181035f8301526149568161491d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614991601683613b3a565b915061499c8261495d565b602082019050919050565b5f6020820190508181035f8301526149be81614985565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614a45604983613b3a565b9150614a50826149c5565b606082019050919050565b5f6020820190508181035f830152614a7281614a39565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614ad3602683613b3a565b9150614ade82614a79565b604082019050919050565b5f6020820190508181035f830152614b0081614ac7565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614b3b601383613b3a565b9150614b4682614b07565b602082019050919050565b5f6020820190508181035f830152614b6881614b2f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614bc9602783613b3a565b9150614bd482614b6f565b604082019050919050565b5f6020820190508181035f830152614bf681614bbd565b9050919050565b5f614c0782613abf565b9150614c1283613abf565b9250828203905081811115614c2a57614c29613fe0565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614c9881613c0a565b92915050565b5f60208284031215614cb357614cb2613abb565b5b5f614cc084828501614c8a565b91505092915050565b5f819050919050565b5f614cec614ce7614ce284614cc9565b613ca5565b613abf565b9050919050565b614cfc81614cd2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d3481613bf9565b82525050565b5f614d458383614d2b565b60208301905092915050565b5f602082019050919050565b5f614d6782614d02565b614d718185614d0c565b9350614d7c83614d1c565b805f5b83811015614dac578151614d938882614d3a565b9750614d9e83614d51565b925050600181019050614d7f565b5085935050505092915050565b5f60a082019050614dcc5f830188613d19565b614dd96020830187614cf3565b8181036040830152614deb8186614d5d565b9050614dfa6060830185613dbc565b614e076080830184613d19565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e6b602683613b3a565b9150614e7682614e11565b604082019050919050565b5f6020820190508181035f830152614e9881614e5f565b9050919050565b5f81905092915050565b50565b5f614eb75f83614e9f565b9150614ec282614ea9565b5f82019050919050565b5f614ed682614eac565b915081905091905056fea26469706673582212208322ff160fe8781ef112c202fc425a7cbc31ed4fcfa6355a44e6f60b1162eb0a64736f6c63430008170033

Deployed Bytecode Sourcemap

15226:13190:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21240:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2923:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3837:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15305:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3244:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19544:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19797:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4014:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15398:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15627:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15526;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3143:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4514:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15363:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15661:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22642:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16167:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20064:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20921:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16060:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15741:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3360:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1045:103;;;;;;;;;;;;;:::i;:::-;;15560:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18767:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15990:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18647:112;;;;;;;;;;;;;:::i;:::-;;822:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16095:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20215:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3031:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21756:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16027:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16205:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16133:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4737:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15490:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3495:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16409:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26769:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22473:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15701:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21566:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20323:590;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15907:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19039:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15956:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3678:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15587:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16352:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18896:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22264:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21240:318;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21378:13:::1;21359:16;:32;;;;21415:7;21402:10;:20;;;;21468:10;;21449:16;;:29;;;;:::i;:::-;21433:13;:45;;;;21514:2;21497:13;;:19;;21489:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21240:318:::0;;:::o;2923:100::-;2977:13;3010:5;3003:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2923:100;:::o;3837:169::-;3920:4;3937:39;3946:12;:10;:12::i;:::-;3960:7;3969:6;3937:8;:39::i;:::-;3994:4;3987:11;;3837:169;;;;:::o;15305:51::-;;;:::o;3244:108::-;3305:7;3332:12;;3325:19;;3244:108;:::o;19544:245::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19681:4:::1;19673;19668:1;19652:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19651:26;;;;:::i;:::-;19650:35;;;;:::i;:::-;19640:6;:45;;19618:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;19774:6;19764;:17;;;;:::i;:::-;19756:5;:25;;;;19544:245:::0;:::o;19797:259::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19938:4:::1;19930;19925:1;19909:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19908:26;;;;:::i;:::-;19907:35;;;;:::i;:::-;19897:6;:45;;19875:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;20041:6;20031;:17;;;;:::i;:::-;20018:10;:30;;;;19797:259:::0;:::o;4014:492::-;4154:4;4171:36;4181:6;4189:9;4200:6;4171:9;:36::i;:::-;4220:24;4247:11;:19;4259:6;4247:19;;;;;;;;;;;;;;;:33;4267:12;:10;:12::i;:::-;4247:33;;;;;;;;;;;;;;;;4220:60;;4319:6;4299:16;:26;;4291:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4406:57;4415:6;4423:12;:10;:12::i;:::-;4456:6;4437:16;:25;4406:8;:57::i;:::-;4494:4;4487:11;;;4014:492;;;;;:::o;15398:53::-;15444:6;15398:53;:::o;15627:25::-;;;;:::o;15526:::-;;;;;;;;;;;;;:::o;3143:93::-;3201:5;3226:2;3219:9;;3143:93;:::o;4514:215::-;4602:4;4619:80;4628:12;:10;:12::i;:::-;4642:7;4688:10;4651:11;:25;4663:12;:10;:12::i;:::-;4651:25;;;;;;;;;;;;;;;:34;4677:7;4651:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4619:8;:80::i;:::-;4717:4;4710:11;;4514:215;;;;:::o;15363:28::-;;;;;;;;;;;;;:::o;15661:33::-;;;;;;;;;;;;;:::o;22642:126::-;22708:4;22732:19;:28;22752:7;22732:28;;;;;;;;;;;;;;;;;;;;;;;;;22725:35;;22642:126;;;:::o;16167:31::-;;;;:::o;20064:143::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20195:4:::1;20168:16;:24;20185:6;20168:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20064:143:::0;;:::o;20921:311::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21057:13:::1;21039:15;:31;;;;21093:7;21081:9;:19;;;;21144:9;;21126:15;;:27;;;;:::i;:::-;21111:12;:42;;;;21188:2;21172:12;;:18;;21164:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20921:311:::0;;:::o;16060:28::-;;;;:::o;15741:31::-;;;;;;;;;;;;;:::o;3360:127::-;3434:7;3461:9;:18;3471:7;3461:18;;;;;;;;;;;;;;;;3454:25;;3360:127;;;:::o;1045:103::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1110:30:::1;1137:1;1110:18;:30::i;:::-;1045:103::o:0;15560:20::-;;;;:::o;18767:121::-;18819:4;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18853:5:::1;18836:14;;:22;;;;;;;;;;;;;;;;;;18876:4;18869:11;;18767:121:::0;:::o;15990:30::-;;;;:::o;18647:112::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18718:4:::1;18702:13;;:20;;;;;;;;;;;;;;;;;;18747:4;18733:11;;:18;;;;;;;;;;;;;;;;;;18647:112::o:0;822:87::-;868:7;895:6;;;;;;;;;;;888:13;;822:87;:::o;16095:31::-;;;;:::o;20215:100::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20300:7:::1;20286:11;;:21;;;;;;;;;;;;;;;;;;20215:100:::0;:::o;3031:104::-;3087:13;3120:7;3113:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3031:104;:::o;21756:304::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21900:13:::1;;;;;;;;;;;21892:21;;:4;:21;;::::0;21870:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22011:41;22040:4;22046:5;22011:28;:41::i;:::-;21756:304:::0;;:::o;16027:24::-;;;;:::o;16205:27::-;;;;:::o;16133:25::-;;;;:::o;4737:413::-;4830:4;4847:24;4874:11;:25;4886:12;:10;:12::i;:::-;4874:25;;;;;;;;;;;;;;;:34;4900:7;4874:34;;;;;;;;;;;;;;;;4847:61;;4947:15;4927:16;:35;;4919:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5040:67;5049:12;:10;:12::i;:::-;5063:7;5091:15;5072:16;:34;5040:8;:67::i;:::-;5138:4;5131:11;;;4737:413;;;;:::o;15490:29::-;;;;;;;;;;;;;:::o;3495:175::-;3581:4;3598:42;3608:12;:10;:12::i;:::-;3622:9;3633:6;3598:9;:42::i;:::-;3658:4;3651:11;;3495:175;;;;:::o;16409:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26769:222::-;26849:14;;;;;;;;;;;26833:30;;:12;:10;:12::i;:::-;:30;;;26825:39;;;;;;26893:24;26911:4;26893:9;:24::i;:::-;26883:6;:34;;:48;;;;;26930:1;26921:6;:10;26883:48;26875:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26959:24;26976:6;26959:16;:24::i;:::-;26769:222;:::o;22473:161::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22582:10:::1;;;;;;;;;;;22553:40;;22571:9;22553:40;;;;;;;;;;;;22617:9;22604:10;;:22;;;;;;;;;;;;;;;;;;22473:161:::0;:::o;15701:33::-;;;;;;;;;;;;;:::o;21566:182::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21682:8:::1;21651:19;:28;21671:7;21651:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21722:7;21706:34;;;21731:8;21706:34;;;;;;:::i;:::-;;;;;;;;21566:182:::0;;:::o;20323:590::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20522:16:::1;20504:15;:34;;;;20561:10;20549:9;:22;;;;20615:9;;20597:15;;:27;;;;:::i;:::-;20582:12;:42;;;;20654:17;20635:16;:36;;;;20695:11;20682:10;:24;;;;20752:10;;20733:16;;:29;;;;:::i;:::-;20717:13;:45;;;;20797:2;20781:12;;:18;;20773:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20869:2;20852:13;;:19;;20844:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20323:590:::0;;;;:::o;15907:40::-;;;;;;;;;;;;;:::o;19039:497::-;19147:4;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19226:6:::1;19221:1;19205:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19204:28;;;;:::i;:::-;19191:9;:41;;19169:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19381:4;19376:1;19360:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19359:26;;;;:::i;:::-;19346:9;:39;;19324:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19497:9;19476:18;:30;;;;19524:4;19517:11;;19039:497:::0;;;:::o;15956:27::-;;;;:::o;3678:151::-;3767:7;3794:11;:18;3806:5;3794:18;;;;;;;;;;;;;;;:27;3813:7;3794:27;;;;;;;;;;;;;;;;3787:34;;3678:151;;;;:::o;15587:33::-;;;;:::o;16352:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;18896:135::-;18956:4;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18996:5:::1;18973:20;;:28;;;;;;;;;;;;;;;;;;19019:4;19012:11;;18896:135:::0;:::o;22264:201::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22397:14:::1;;;;;;;;;;;22356:56;;22378:17;22356:56;;;;;;;;;;;;22440:17;22423:14;;:34;;;;;;;;;;;;;;;;;;22264:201:::0;:::o;1156:::-;968:12;:10;:12::i;:::-;957:23;;:7;:5;:7::i;:::-;:23;;;949:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1265:1:::1;1245:22;;:8;:22;;::::0;1237:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1321:28;1340:8;1321:18;:28::i;:::-;1156:201:::0;:::o;368:98::-;421:7;448:10;441:17;;368:98;:::o;6905:380::-;7058:1;7041:19;;:5;:19;;;7033:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7139:1;7120:21;;:7;:21;;;7112:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7223:6;7193:11;:18;7205:5;7193:18;;;;;;;;;;;;;;;:27;7212:7;7193:27;;;;;;;;;;;;;;;:36;;;;7261:7;7245:32;;7254:5;7245:32;;;7270:6;7245:32;;;;;;:::i;:::-;;;;;;;;6905:380;;;:::o;22826:3820::-;22974:1;22958:18;;:4;:18;;;22950:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23051:1;23037:16;;:2;:16;;;23029:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23113:12;:18;23126:4;23113:18;;;;;;;;;;;;;;;;;;;;;;;;;23112:19;23104:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23173:12;:16;23186:2;23173:16;;;;;;;;;;;;;;;;;;;;;;;;;23172:17;23164:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23236:1;23226:6;:11;23222:93;;23254:28;23270:4;23276:2;23280:1;23254:15;:28::i;:::-;23297:7;;23222:93;23331:14;;;;;;;;;;;23327:1666;;;23374:7;:5;:7::i;:::-;23366:15;;:4;:15;;;;:49;;;;;23408:7;:5;:7::i;:::-;23402:13;;:2;:13;;;;23366:49;:86;;;;;23450:1;23436:16;;:2;:16;;;;23366:86;:128;;;;;23487:6;23473:21;;:2;:21;;;;23366:128;:158;;;;;23516:8;;;;;;;;;;;23515:9;23366:158;23362:1620;;;23550:13;;;;;;;;;;;23545:150;;23596:19;:25;23616:4;23596:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23625:19;:23;23645:2;23625:23;;;;;;;;;;;;;;;;;;;;;;;;;23596:52;23588:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;23545:150;23851:20;;;;;;;;;;;23847:425;;;23906:7;:5;:7::i;:::-;23900:13;;:2;:13;;;;:47;;;;;23931:15;23917:30;;:2;:30;;;;23900:47;:79;;;;;23965:13;;;;;;;;;;;23951:28;;:2;:28;;;;23900:79;23896:357;;;24058:12;24016:28;:39;24045:9;24016:39;;;;;;;;;;;;;;;;:54;24008:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24217:12;24175:28;:39;24204:9;24175:39;;;;;;;;;;;;;;;:54;;;;23896:357;23847:425;24324:25;:31;24350:4;24324:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24360:16;:20;24377:2;24360:20;;;;;;;;;;;;;;;;;;;;;;;;;24359:21;24324:56;24320:647;;;24423:5;;24413:6;:15;;24405:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24528:10;;24511:13;24521:2;24511:9;:13::i;:::-;24502:6;:22;;;;:::i;:::-;:36;;24494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24320:647;;;24638:25;:29;24664:2;24638:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24672:16;:22;24689:4;24672:22;;;;;;;;;;;;;;;;;;;;;;;;;24671:23;24638:56;24634:333;;;24737:5;;24727:6;:15;;24719:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24634:333;;;24834:16;:20;24851:2;24834:20;;;;;;;;;;;;;;;;;;;;;;;;;24829:138;;24913:10;;24896:13;24906:2;24896:9;:13::i;:::-;24887:6;:22;;;;:::i;:::-;:36;;24879:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24829:138;24634:333;24320:647;23362:1620;23327:1666;25005:28;25036:24;25054:4;25036:9;:24::i;:::-;25005:55;;25071:12;25110:18;;25086:20;:42;;25071:57;;25145:7;:35;;;;;25169:11;;;;;;;;;;;25145:35;:61;;;;;25198:8;;;;;;;;;;;25197:9;25145:61;:110;;;;;25224:25;:31;25250:4;25224:31;;;;;;;;;;;;;;;;;;;;;;;;;25223:32;25145:110;:153;;;;;25273:19;:25;25293:4;25273:25;;;;;;;;;;;;;;;;;;;;;;;;;25272:26;25145:153;:194;;;;;25316:19;:23;25336:2;25316:23;;;;;;;;;;;;;;;;;;;;;;;;;25315:24;25145:194;25141:302;;;25367:4;25356:8;;:15;;;;;;;;;;;;;;;;;;25388:10;:8;:10::i;:::-;25426:5;25415:8;;:16;;;;;;;;;;;;;;;;;;25141:302;25455:12;25471:8;;;;;;;;;;;25470:9;25455:24;;25581:19;:25;25601:4;25581:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25610:19;:23;25630:2;25610:23;;;;;;;;;;;;;;;;;;;;;;;;;25581:52;25577:100;;;25660:5;25650:15;;25577:100;25689:12;25794:7;25790:803;;;25846:25;:29;25872:2;25846:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25895:1;25879:13;;:17;25846:50;25842:602;;;25924:34;25954:3;25924:25;25935:13;;25924:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25917:41;;26015:13;;26001:10;;25994:4;:17;;;;:::i;:::-;25993:35;;;;:::i;:::-;25977:12;;:51;;;;;;;:::i;:::-;;;;;;;;26095:13;;26075:16;;26068:4;:23;;;;:::i;:::-;26067:41;;;;:::i;:::-;26047:16;;:61;;;;;;;:::i;:::-;;;;;;;;25842:602;;;26170:25;:31;26196:4;26170:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26220:1;26205:12;;:16;26170:51;26166:278;;;26249:33;26278:3;26249:24;26260:12;;26249:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26242:40;;26338:12;;26325:9;;26318:4;:16;;;;:::i;:::-;26317:33;;;;:::i;:::-;26301:12;;:49;;;;;;;:::i;:::-;;;;;;;;26416:12;;26397:15;;26390:4;:22;;;;:::i;:::-;26389:39;;;;:::i;:::-;26369:16;;:59;;;;;;;:::i;:::-;;;;;;;;26166:278;25842:602;26471:1;26464:4;:8;26460:91;;;26493:42;26509:4;26523;26530;26493:15;:42::i;:::-;26460:91;26577:4;26567:14;;;;;:::i;:::-;;;25790:803;26605:33;26621:4;26627:2;26631:6;26605:15;:33::i;:::-;22939:3707;;;;22826:3820;;;;:::o;1365:191::-;1439:16;1458:6;;;;;;;;;;;1439:25;;1484:8;1475:6;;:17;;;;;;;;;;;;;;;;;;1539:8;1508:40;;1529:8;1508:40;;;;;;;;;;;;1428:128;1365:191;:::o;22068:188::-;22185:5;22151:25;:31;22177:4;22151:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22242:5;22208:40;;22236:4;22208:40;;;;;;;;;;;;22068:188;;:::o;27000:529::-;27066:21;27104:1;27090:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27066:40;;27135:4;27117;27122:1;27117:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27161:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27151:4;27156:1;27151:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27196:62;27213:4;27228:15;27246:11;27196:8;:62::i;:::-;27297:15;:66;;;27378:11;27404:1;27448:4;27475;27495:15;27297:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27055:474;27000:529;:::o;5158:733::-;5316:1;5298:20;;:6;:20;;;5290:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5400:1;5379:23;;:9;:23;;;5371:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5455:47;5476:6;5484:9;5495:6;5455:20;:47::i;:::-;5515:21;5539:9;:17;5549:6;5539:17;;;;;;;;;;;;;;;;5515:41;;5592:6;5575:13;:23;;5567:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5713:6;5697:13;:22;5677:9;:17;5687:6;5677:17;;;;;;;;;;;;;;;:42;;;;5765:6;5741:9;:20;5751:9;5741:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5806:9;5789:35;;5798:6;5789:35;;;5817:6;5789:35;;;;;;:::i;:::-;;;;;;;;5837:46;5857:6;5865:9;5876:6;5837:19;:46::i;:::-;5279:612;5158:733;;;:::o;27537:876::-;27576:23;27602:24;27620:4;27602:9;:24::i;:::-;27576:50;;27637:25;27684:12;;27665:16;;:31;;;;:::i;:::-;27637:59;;27707:12;27755:1;27736:15;:20;27732:59;;27773:7;;;;;27732:59;27846:2;27825:18;;:23;;;;:::i;:::-;27807:15;:41;27803:115;;;27904:2;27883:18;;:23;;;;:::i;:::-;27865:41;;27803:115;27930:25;27958:21;27930:49;;27990:33;28007:15;27990:16;:33::i;:::-;28036:18;28057:44;28083:17;28057:21;:25;;:44;;;;:::i;:::-;28036:65;;28112:17;28132:51;28165:17;28132:28;28147:12;;28132:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28112:71;;28215:1;28196:16;:20;;;;28242:1;28227:12;:16;;;;28278:10;;;;;;;;;;;28270:24;;28302:9;28270:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28256:60;;;;;28349:14;;;;;;;;;;;28341:28;;28378:21;28341:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28327:78;;;;;27565:848;;;;;;27537:876;:::o;8911:98::-;8969:7;9000:1;8996;:5;;;;:::i;:::-;8989:12;;8911:98;;;;:::o;9017:::-;9075:7;9106:1;9102;:5;;;;:::i;:::-;9095:12;;9017:98;;;;:::o;7293:125::-;;;;:::o;7426:124::-;;;;:::o;8805:98::-;8863:7;8894:1;8890;:5;;;;:::i;:::-;8883:12;;8805:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:329::-;5315:6;5364:2;5352:9;5343:7;5339:23;5335:32;5332:119;;;5370:79;;:::i;:::-;5332:119;5490:1;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5461:117;5256:329;;;;:::o;5591:619::-;5668:6;5676;5684;5733:2;5721:9;5712:7;5708:23;5704:32;5701:119;;;5739:79;;:::i;:::-;5701:119;5859:1;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5830:117;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6114:2;6140:53;6185:7;6176:6;6165:9;6161:22;6140:53;:::i;:::-;6130:63;;6085:118;5591:619;;;;;:::o;6216:118::-;6303:24;6321:5;6303:24;:::i;:::-;6298:3;6291:37;6216:118;;:::o;6340:222::-;6433:4;6471:2;6460:9;6456:18;6448:26;;6484:71;6552:1;6541:9;6537:17;6528:6;6484:71;:::i;:::-;6340:222;;;;:::o;6568:86::-;6603:7;6643:4;6636:5;6632:16;6621:27;;6568:86;;;:::o;6660:112::-;6743:22;6759:5;6743:22;:::i;:::-;6738:3;6731:35;6660:112;;:::o;6778:214::-;6867:4;6905:2;6894:9;6890:18;6882:26;;6918:67;6982:1;6971:9;6967:17;6958:6;6918:67;:::i;:::-;6778:214;;;;:::o;6998:329::-;7057:6;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;6998:329;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:765::-;8483:6;8491;8499;8507;8556:3;8544:9;8535:7;8531:23;8527:33;8524:120;;;8563:79;;:::i;:::-;8524:120;8683:1;8708:53;8753:7;8744:6;8733:9;8729:22;8708:53;:::i;:::-;8698:63;;8654:117;8810:2;8836:53;8881:7;8872:6;8861:9;8857:22;8836:53;:::i;:::-;8826:63;;8781:118;8938:2;8964:53;9009:7;9000:6;8989:9;8985:22;8964:53;:::i;:::-;8954:63;;8909:118;9066:2;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9037:118;8397:765;;;;;;;:::o;9168:474::-;9236:6;9244;9293:2;9281:9;9272:7;9268:23;9264:32;9261:119;;;9299:79;;:::i;:::-;9261:119;9419:1;9444:53;9489:7;9480:6;9469:9;9465:22;9444:53;:::i;:::-;9434:63;;9390:117;9546:2;9572:53;9617:7;9608:6;9597:9;9593:22;9572:53;:::i;:::-;9562:63;;9517:118;9168:474;;;;;:::o;9648:182::-;9788:34;9784:1;9776:6;9772:14;9765:58;9648:182;:::o;9836:366::-;9978:3;9999:67;10063:2;10058:3;9999:67;:::i;:::-;9992:74;;10075:93;10164:3;10075:93;:::i;:::-;10193:2;10188:3;10184:12;10177:19;;9836:366;;;:::o;10208:419::-;10374:4;10412:2;10401:9;10397:18;10389:26;;10461:9;10455:4;10451:20;10447:1;10436:9;10432:17;10425:47;10489:131;10615:4;10489:131;:::i;:::-;10481:139;;10208:419;;;:::o;10633:180::-;10681:77;10678:1;10671:88;10778:4;10775:1;10768:15;10802:4;10799:1;10792:15;10819:191;10859:3;10878:20;10896:1;10878:20;:::i;:::-;10873:25;;10912:20;10930:1;10912:20;:::i;:::-;10907:25;;10955:1;10952;10948:9;10941:16;;10976:3;10973:1;10970:10;10967:36;;;10983:18;;:::i;:::-;10967:36;10819:191;;;;:::o;11016:179::-;11156:31;11152:1;11144:6;11140:14;11133:55;11016:179;:::o;11201:366::-;11343:3;11364:67;11428:2;11423:3;11364:67;:::i;:::-;11357:74;;11440:93;11529:3;11440:93;:::i;:::-;11558:2;11553:3;11549:12;11542:19;;11201:366;;;:::o;11573:419::-;11739:4;11777:2;11766:9;11762:18;11754:26;;11826:9;11820:4;11816:20;11812:1;11801:9;11797:17;11790:47;11854:131;11980:4;11854:131;:::i;:::-;11846:139;;11573:419;;;:::o;11998:180::-;12046:77;12043:1;12036:88;12143:4;12140:1;12133:15;12167:4;12164:1;12157:15;12184:320;12228:6;12265:1;12259:4;12255:12;12245:22;;12312:1;12306:4;12302:12;12333:18;12323:81;;12389:4;12381:6;12377:17;12367:27;;12323:81;12451:2;12443:6;12440:14;12420:18;12417:38;12414:84;;12470:18;;:::i;:::-;12414:84;12235:269;12184:320;;;:::o;12510:410::-;12550:7;12573:20;12591:1;12573:20;:::i;:::-;12568:25;;12607:20;12625:1;12607:20;:::i;:::-;12602:25;;12662:1;12659;12655:9;12684:30;12702:11;12684:30;:::i;:::-;12673:41;;12863:1;12854:7;12850:15;12847:1;12844:22;12824:1;12817:9;12797:83;12774:139;;12893:18;;:::i;:::-;12774:139;12558:362;12510:410;;;;:::o;12926:180::-;12974:77;12971:1;12964:88;13071:4;13068:1;13061:15;13095:4;13092:1;13085:15;13112:185;13152:1;13169:20;13187:1;13169:20;:::i;:::-;13164:25;;13203:20;13221:1;13203:20;:::i;:::-;13198:25;;13242:1;13232:35;;13247:18;;:::i;:::-;13232:35;13289:1;13286;13282:9;13277:14;;13112:185;;;;:::o;13303:182::-;13443:34;13439:1;13431:6;13427:14;13420:58;13303:182;:::o;13491:366::-;13633:3;13654:67;13718:2;13713:3;13654:67;:::i;:::-;13647:74;;13730:93;13819:3;13730:93;:::i;:::-;13848:2;13843:3;13839:12;13832:19;;13491:366;;;:::o;13863:419::-;14029:4;14067:2;14056:9;14052:18;14044:26;;14116:9;14110:4;14106:20;14102:1;14091:9;14087:17;14080:47;14144:131;14270:4;14144:131;:::i;:::-;14136:139;;13863:419;;;:::o;14288:224::-;14428:34;14424:1;14416:6;14412:14;14405:58;14497:7;14492:2;14484:6;14480:15;14473:32;14288:224;:::o;14518:366::-;14660:3;14681:67;14745:2;14740:3;14681:67;:::i;:::-;14674:74;;14757:93;14846:3;14757:93;:::i;:::-;14875:2;14870:3;14866:12;14859:19;;14518:366;;;:::o;14890:419::-;15056:4;15094:2;15083:9;15079:18;15071:26;;15143:9;15137:4;15133:20;15129:1;15118:9;15114:17;15107:47;15171:131;15297:4;15171:131;:::i;:::-;15163:139;;14890:419;;;:::o;15315:227::-;15455:34;15451:1;15443:6;15439:14;15432:58;15524:10;15519:2;15511:6;15507:15;15500:35;15315:227;:::o;15548:366::-;15690:3;15711:67;15775:2;15770:3;15711:67;:::i;:::-;15704:74;;15787:93;15876:3;15787:93;:::i;:::-;15905:2;15900:3;15896:12;15889:19;;15548:366;;;:::o;15920:419::-;16086:4;16124:2;16113:9;16109:18;16101:26;;16173:9;16167:4;16163:20;16159:1;16148:9;16144:17;16137:47;16201:131;16327:4;16201:131;:::i;:::-;16193:139;;15920:419;;;:::o;16345:244::-;16485:34;16481:1;16473:6;16469:14;16462:58;16554:27;16549:2;16541:6;16537:15;16530:52;16345:244;:::o;16595:366::-;16737:3;16758:67;16822:2;16817:3;16758:67;:::i;:::-;16751:74;;16834:93;16923:3;16834:93;:::i;:::-;16952:2;16947:3;16943:12;16936:19;;16595:366;;;:::o;16967:419::-;17133:4;17171:2;17160:9;17156:18;17148:26;;17220:9;17214:4;17210:20;17206:1;17195:9;17191:17;17184:47;17248:131;17374:4;17248:131;:::i;:::-;17240:139;;16967:419;;;:::o;17392:224::-;17532:34;17528:1;17520:6;17516:14;17509:58;17601:7;17596:2;17588:6;17584:15;17577:32;17392:224;:::o;17622:366::-;17764:3;17785:67;17849:2;17844:3;17785:67;:::i;:::-;17778:74;;17861:93;17950:3;17861:93;:::i;:::-;17979:2;17974:3;17970:12;17963:19;;17622:366;;;:::o;17994:419::-;18160:4;18198:2;18187:9;18183:18;18175:26;;18247:9;18241:4;18237:20;18233:1;18222:9;18218:17;18211:47;18275:131;18401:4;18275:131;:::i;:::-;18267:139;;17994:419;;;:::o;18419:162::-;18559:14;18555:1;18547:6;18543:14;18536:38;18419:162;:::o;18587:366::-;18729:3;18750:67;18814:2;18809:3;18750:67;:::i;:::-;18743:74;;18826:93;18915:3;18826:93;:::i;:::-;18944:2;18939:3;18935:12;18928:19;;18587:366;;;:::o;18959:419::-;19125:4;19163:2;19152:9;19148:18;19140:26;;19212:9;19206:4;19202:20;19198:1;19187:9;19183:17;19176:47;19240:131;19366:4;19240:131;:::i;:::-;19232:139;;18959:419;;;:::o;19384:240::-;19524:34;19520:1;19512:6;19508:14;19501:58;19593:23;19588:2;19580:6;19576:15;19569:48;19384:240;:::o;19630:366::-;19772:3;19793:67;19857:2;19852:3;19793:67;:::i;:::-;19786:74;;19869:93;19958:3;19869:93;:::i;:::-;19987:2;19982:3;19978:12;19971:19;;19630:366;;;:::o;20002:419::-;20168:4;20206:2;20195:9;20191:18;20183:26;;20255:9;20249:4;20245:20;20241:1;20230:9;20226:17;20219:47;20283:131;20409:4;20283:131;:::i;:::-;20275:139;;20002:419;;;:::o;20427:239::-;20567:34;20563:1;20555:6;20551:14;20544:58;20636:22;20631:2;20623:6;20619:15;20612:47;20427:239;:::o;20672:366::-;20814:3;20835:67;20899:2;20894:3;20835:67;:::i;:::-;20828:74;;20911:93;21000:3;20911:93;:::i;:::-;21029:2;21024:3;21020:12;21013:19;;20672:366;;;:::o;21044:419::-;21210:4;21248:2;21237:9;21233:18;21225:26;;21297:9;21291:4;21287:20;21283:1;21272:9;21268:17;21261:47;21325:131;21451:4;21325:131;:::i;:::-;21317:139;;21044:419;;;:::o;21469:225::-;21609:34;21605:1;21597:6;21593:14;21586:58;21678:8;21673:2;21665:6;21661:15;21654:33;21469:225;:::o;21700:366::-;21842:3;21863:67;21927:2;21922:3;21863:67;:::i;:::-;21856:74;;21939:93;22028:3;21939:93;:::i;:::-;22057:2;22052:3;22048:12;22041:19;;21700:366;;;:::o;22072:419::-;22238:4;22276:2;22265:9;22261:18;22253:26;;22325:9;22319:4;22315:20;22311:1;22300:9;22296:17;22289:47;22353:131;22479:4;22353:131;:::i;:::-;22345:139;;22072:419;;;:::o;22497:223::-;22637:34;22633:1;22625:6;22621:14;22614:58;22706:6;22701:2;22693:6;22689:15;22682:31;22497:223;:::o;22726:366::-;22868:3;22889:67;22953:2;22948:3;22889:67;:::i;:::-;22882:74;;22965:93;23054:3;22965:93;:::i;:::-;23083:2;23078:3;23074:12;23067:19;;22726:366;;;:::o;23098:419::-;23264:4;23302:2;23291:9;23287:18;23279:26;;23351:9;23345:4;23341:20;23337:1;23326:9;23322:17;23315:47;23379:131;23505:4;23379:131;:::i;:::-;23371:139;;23098:419;;;:::o;23523:221::-;23663:34;23659:1;23651:6;23647:14;23640:58;23732:4;23727:2;23719:6;23715:15;23708:29;23523:221;:::o;23750:366::-;23892:3;23913:67;23977:2;23972:3;23913:67;:::i;:::-;23906:74;;23989:93;24078:3;23989:93;:::i;:::-;24107:2;24102:3;24098:12;24091:19;;23750:366;;;:::o;24122:419::-;24288:4;24326:2;24315:9;24311:18;24303:26;;24375:9;24369:4;24365:20;24361:1;24350:9;24346:17;24339:47;24403:131;24529:4;24403:131;:::i;:::-;24395:139;;24122:419;;;:::o;24547:224::-;24687:34;24683:1;24675:6;24671:14;24664:58;24756:7;24751:2;24743:6;24739:15;24732:32;24547:224;:::o;24777:366::-;24919:3;24940:67;25004:2;24999:3;24940:67;:::i;:::-;24933:74;;25016:93;25105:3;25016:93;:::i;:::-;25134:2;25129:3;25125:12;25118:19;;24777:366;;;:::o;25149:419::-;25315:4;25353:2;25342:9;25338:18;25330:26;;25402:9;25396:4;25392:20;25388:1;25377:9;25373:17;25366:47;25430:131;25556:4;25430:131;:::i;:::-;25422:139;;25149:419;;;:::o;25574:222::-;25714:34;25710:1;25702:6;25698:14;25691:58;25783:5;25778:2;25770:6;25766:15;25759:30;25574:222;:::o;25802:366::-;25944:3;25965:67;26029:2;26024:3;25965:67;:::i;:::-;25958:74;;26041:93;26130:3;26041:93;:::i;:::-;26159:2;26154:3;26150:12;26143:19;;25802:366;;;:::o;26174:419::-;26340:4;26378:2;26367:9;26363:18;26355:26;;26427:9;26421:4;26417:20;26413:1;26402:9;26398:17;26391:47;26455:131;26581:4;26455:131;:::i;:::-;26447:139;;26174:419;;;:::o;26599:167::-;26739:19;26735:1;26727:6;26723:14;26716:43;26599:167;:::o;26772:366::-;26914:3;26935:67;26999:2;26994:3;26935:67;:::i;:::-;26928:74;;27011:93;27100:3;27011:93;:::i;:::-;27129:2;27124:3;27120:12;27113:19;;26772:366;;;:::o;27144:419::-;27310:4;27348:2;27337:9;27333:18;27325:26;;27397:9;27391:4;27387:20;27383:1;27372:9;27368:17;27361:47;27425:131;27551:4;27425:131;:::i;:::-;27417:139;;27144:419;;;:::o;27569:165::-;27709:17;27705:1;27697:6;27693:14;27686:41;27569:165;:::o;27740:366::-;27882:3;27903:67;27967:2;27962:3;27903:67;:::i;:::-;27896:74;;27979:93;28068:3;27979:93;:::i;:::-;28097:2;28092:3;28088:12;28081:19;;27740:366;;;:::o;28112:419::-;28278:4;28316:2;28305:9;28301:18;28293:26;;28365:9;28359:4;28355:20;28351:1;28340:9;28336:17;28329:47;28393:131;28519:4;28393:131;:::i;:::-;28385:139;;28112:419;;;:::o;28537:172::-;28677:24;28673:1;28665:6;28661:14;28654:48;28537:172;:::o;28715:366::-;28857:3;28878:67;28942:2;28937:3;28878:67;:::i;:::-;28871:74;;28954:93;29043:3;28954:93;:::i;:::-;29072:2;29067:3;29063:12;29056:19;;28715:366;;;:::o;29087:419::-;29253:4;29291:2;29280:9;29276:18;29268:26;;29340:9;29334:4;29330:20;29326:1;29315:9;29311:17;29304:47;29368:131;29494:4;29368:131;:::i;:::-;29360:139;;29087:419;;;:::o;29512:297::-;29652:34;29648:1;29640:6;29636:14;29629:58;29721:34;29716:2;29708:6;29704:15;29697:59;29790:11;29785:2;29777:6;29773:15;29766:36;29512:297;:::o;29815:366::-;29957:3;29978:67;30042:2;30037:3;29978:67;:::i;:::-;29971:74;;30054:93;30143:3;30054:93;:::i;:::-;30172:2;30167:3;30163:12;30156:19;;29815:366;;;:::o;30187:419::-;30353:4;30391:2;30380:9;30376:18;30368:26;;30440:9;30434:4;30430:20;30426:1;30415:9;30411:17;30404:47;30468:131;30594:4;30468:131;:::i;:::-;30460:139;;30187:419;;;:::o;30612:225::-;30752:34;30748:1;30740:6;30736:14;30729:58;30821:8;30816:2;30808:6;30804:15;30797:33;30612:225;:::o;30843:366::-;30985:3;31006:67;31070:2;31065:3;31006:67;:::i;:::-;30999:74;;31082:93;31171:3;31082:93;:::i;:::-;31200:2;31195:3;31191:12;31184:19;;30843:366;;;:::o;31215:419::-;31381:4;31419:2;31408:9;31404:18;31396:26;;31468:9;31462:4;31458:20;31454:1;31443:9;31439:17;31432:47;31496:131;31622:4;31496:131;:::i;:::-;31488:139;;31215:419;;;:::o;31640:169::-;31780:21;31776:1;31768:6;31764:14;31757:45;31640:169;:::o;31815:366::-;31957:3;31978:67;32042:2;32037:3;31978:67;:::i;:::-;31971:74;;32054:93;32143:3;32054:93;:::i;:::-;32172:2;32167:3;32163:12;32156:19;;31815:366;;;:::o;32187:419::-;32353:4;32391:2;32380:9;32376:18;32368:26;;32440:9;32434:4;32430:20;32426:1;32415:9;32411:17;32404:47;32468:131;32594:4;32468:131;:::i;:::-;32460:139;;32187:419;;;:::o;32612:226::-;32752:34;32748:1;32740:6;32736:14;32729:58;32821:9;32816:2;32808:6;32804:15;32797:34;32612:226;:::o;32844:366::-;32986:3;33007:67;33071:2;33066:3;33007:67;:::i;:::-;33000:74;;33083:93;33172:3;33083:93;:::i;:::-;33201:2;33196:3;33192:12;33185:19;;32844:366;;;:::o;33216:419::-;33382:4;33420:2;33409:9;33405:18;33397:26;;33469:9;33463:4;33459:20;33455:1;33444:9;33440:17;33433:47;33497:131;33623:4;33497:131;:::i;:::-;33489:139;;33216:419;;;:::o;33641:194::-;33681:4;33701:20;33719:1;33701:20;:::i;:::-;33696:25;;33735:20;33753:1;33735:20;:::i;:::-;33730:25;;33779:1;33776;33772:9;33764:17;;33803:1;33797:4;33794:11;33791:37;;;33808:18;;:::i;:::-;33791:37;33641:194;;;;:::o;33841:180::-;33889:77;33886:1;33879:88;33986:4;33983:1;33976:15;34010:4;34007:1;34000:15;34027:180;34075:77;34072:1;34065:88;34172:4;34169:1;34162:15;34196:4;34193:1;34186:15;34213:143;34270:5;34301:6;34295:13;34286:22;;34317:33;34344:5;34317:33;:::i;:::-;34213:143;;;;:::o;34362:351::-;34432:6;34481:2;34469:9;34460:7;34456:23;34452:32;34449:119;;;34487:79;;:::i;:::-;34449:119;34607:1;34632:64;34688:7;34679:6;34668:9;34664:22;34632:64;:::i;:::-;34622:74;;34578:128;34362:351;;;;:::o;34719:85::-;34764:7;34793:5;34782:16;;34719:85;;;:::o;34810:158::-;34868:9;34901:61;34919:42;34928:32;34954:5;34928:32;:::i;:::-;34919:42;:::i;:::-;34901:61;:::i;:::-;34888:74;;34810:158;;;:::o;34974:147::-;35069:45;35108:5;35069:45;:::i;:::-;35064:3;35057:58;34974:147;;:::o;35127:114::-;35194:6;35228:5;35222:12;35212:22;;35127:114;;;:::o;35247:184::-;35346:11;35380:6;35375:3;35368:19;35420:4;35415:3;35411:14;35396:29;;35247:184;;;;:::o;35437:132::-;35504:4;35527:3;35519:11;;35557:4;35552:3;35548:14;35540:22;;35437:132;;;:::o;35575:108::-;35652:24;35670:5;35652:24;:::i;:::-;35647:3;35640:37;35575:108;;:::o;35689:179::-;35758:10;35779:46;35821:3;35813:6;35779:46;:::i;:::-;35857:4;35852:3;35848:14;35834:28;;35689:179;;;;:::o;35874:113::-;35944:4;35976;35971:3;35967:14;35959:22;;35874:113;;;:::o;36023:732::-;36142:3;36171:54;36219:5;36171:54;:::i;:::-;36241:86;36320:6;36315:3;36241:86;:::i;:::-;36234:93;;36351:56;36401:5;36351:56;:::i;:::-;36430:7;36461:1;36446:284;36471:6;36468:1;36465:13;36446:284;;;36547:6;36541:13;36574:63;36633:3;36618:13;36574:63;:::i;:::-;36567:70;;36660:60;36713:6;36660:60;:::i;:::-;36650:70;;36506:224;36493:1;36490;36486:9;36481:14;;36446:284;;;36450:14;36746:3;36739:10;;36147:608;;;36023:732;;;;:::o;36761:831::-;37024:4;37062:3;37051:9;37047:19;37039:27;;37076:71;37144:1;37133:9;37129:17;37120:6;37076:71;:::i;:::-;37157:80;37233:2;37222:9;37218:18;37209:6;37157:80;:::i;:::-;37284:9;37278:4;37274:20;37269:2;37258:9;37254:18;37247:48;37312:108;37415:4;37406:6;37312:108;:::i;:::-;37304:116;;37430:72;37498:2;37487:9;37483:18;37474:6;37430:72;:::i;:::-;37512:73;37580:3;37569:9;37565:19;37556:6;37512:73;:::i;:::-;36761:831;;;;;;;;:::o;37598:225::-;37738:34;37734:1;37726:6;37722:14;37715:58;37807:8;37802:2;37794:6;37790:15;37783:33;37598:225;:::o;37829:366::-;37971:3;37992:67;38056:2;38051:3;37992:67;:::i;:::-;37985:74;;38068:93;38157:3;38068:93;:::i;:::-;38186:2;38181:3;38177:12;38170:19;;37829:366;;;:::o;38201:419::-;38367:4;38405:2;38394:9;38390:18;38382:26;;38454:9;38448:4;38444:20;38440:1;38429:9;38425:17;38418:47;38482:131;38608:4;38482:131;:::i;:::-;38474:139;;38201:419;;;:::o;38626:147::-;38727:11;38764:3;38749:18;;38626:147;;;;:::o;38779:114::-;;:::o;38899:398::-;39058:3;39079:83;39160:1;39155:3;39079:83;:::i;:::-;39072:90;;39171:93;39260:3;39171:93;:::i;:::-;39289:1;39284:3;39280:11;39273:18;;38899:398;;;:::o;39303:379::-;39487:3;39509:147;39652:3;39509:147;:::i;:::-;39502:154;;39673:3;39666:10;;39303:379;;;:::o

Swarm Source

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