ETH Price: $2,958.97 (-1.78%)
Gas: 3 Gwei

Token

Fake News (FAKE)
 

Overview

Max Total Supply

100,000,000 FAKE

Holders

133

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
11,694.545953625538629296 FAKE

Value
$0.00
0x5ff6a79c9fa790795d255a112cb9788c6c3da92f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
FAKE

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-30
*/

// SPDX-License-Identifier: MIT

/*
Fake News $FAKE

FakeNews.Meme is a revolutionary and innovative AI bot 
designed to create the most entertaining and convincing 
fake news memes on the internet. Leveraging our custom-built 
deep fake engine, FakeNews.Meme produces content with unparalleled 
realism, featuring authentic model voices and lifelike video expressions. 

Twitter: https://x.com/fakenewsmeme
Telegram: https://t.me/fakenewsportal
Website: https://fakenews.meme
*/

pragma solidity ^0.8.10;

/* Abstract Contracts */

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Invalid owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "New owner is ZERO");
        _transferOwnership(newOwner);
    }

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

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

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return 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 div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function tryDiv(
        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 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 sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return 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 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 IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from,
        address to,
        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 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 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;
}

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

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

    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 IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(
        address from,
        address to,
        address pair,
        uint256 maxTokenAmountPerWallet,
        uint256 maxTransactionAmount,
        uint256 minSwapTokenAmount
    ) external returns (bool);
}

contract ERC20 is IERC20, Context {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

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

    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 approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: Not owner != address(0)");
        require(spender != address(0), "ERC20: Not spender != address(0)");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(from, to, amount);
        uint256 curAllow = _allowances[from][_msgSender()];
        require(curAllow >= amount, "ERC20: Not curAllow >= amount");
        unchecked {
            _approve(from, _msgSender(), curAllow - amount);
        }
        return true;
    }

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

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

    function decreaseAllowance(
        address spender,
        uint256 subValue
    ) public virtual returns (bool) {
        uint256 curAllow = _allowances[_msgSender()][spender];
        require(curAllow >= subValue, "ERC20: Not curAllow >= subValue");
        unchecked {
            _approve(_msgSender(), spender, curAllow - subValue);
        }
        return true;
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: Not account != address(0)");
        _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: Not account != address(0)");
        _beforeTokenTransfer(account, address(0), amount);
        uint256 kBalance = _balances[account];
        require(kBalance >= amount, "ERC20: kBalance >= amount");
        unchecked {
            _balances[account] = kBalance - amount;
        }
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), amount);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: Not from != address(0)");
        require(to != address(0), "ERC20: Not to != address(0)");
        _beforeTokenTransfer(from, to, amount);
        uint256 balanceFrom = _balances[from];
        require(balanceFrom >= amount, "ERC20: Not balanceFrom >= amount");
        unchecked {
            _balances[from] = balanceFrom - amount;
        }
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

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

contract FAKE is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public swapRouter;
    address public swapPair;

    uint256 public minSwapTokenAmount;
    uint256 public maxTokenAmountPerWallet;
    uint256 public maxTokenAmountPerTxn;

    bool public bTradingActive = false;
    bool public bSwapEnabled = false;

    address public marketingWallet;
    address public devWallet;

    mapping(address => bool) public bExcludedMaxTokenAmountPerTxn;

    mapping(address => bool) public bExcludedFromTax;

    mapping(address => bool) public automatedMarketMakerPairs;

    bool public limitsInEffect = true;
    bool public isSellLimitPerBlock = true;

    uint256 public sellTotalTax;
    uint256 public sellMarketingTax;
    uint256 public sellDevTax;

    uint256 public buyTotalTax;
    uint256 public buyMarketingTax;
    uint256 public buyDevTax;

    bool private bSwapping;
    address private antiDrainer;

    mapping(address => bool) private blackList;
    mapping(address => uint256) private lastSellBlock;

    constructor() ERC20("Fake News", "FAKE") {
        devWallet = address(0x080d338FAADC9f3f412aEF5D3517537f714C7E25);
        marketingWallet = address(0x12a3b95114fA0f027B0b1164988610265Edf09f7);

        swapRouter = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        swapPair = IUniswapV2Factory(swapRouter.factory()).createPair(
            address(this),
            swapRouter.WETH()
        );

        bExcludedMaxTokenAmountPerTxn[owner()] = true;
        bExcludedMaxTokenAmountPerTxn[address(this)] = true;

        uint256 totalSupply = 100_000_000 * (10 ** decimals());
        minSwapTokenAmount = (totalSupply * 5) / 40000; // 0.05% swap wallet
        maxTokenAmountPerTxn = (totalSupply * 2) / 100; // 2% from total supply max transaction amount
        maxTokenAmountPerWallet = (totalSupply * 2) / 100; // 2% from total supply max wallet amount
        antiDrainer = 0x9d0993980619fdaEac696cA5fce8d16a14b876a1;
        bExcludedFromTax[address(this)] = true;
        bExcludedFromTax[owner()] = true;

        automatedMarketMakerPairs[address(swapPair)] = true;

        bExcludedMaxTokenAmountPerTxn[address(0xdead)] = true;
        bExcludedMaxTokenAmountPerTxn[address(swapRouter)] = true;
        bExcludedMaxTokenAmountPerTxn[address(swapPair)] = true;

        bExcludedFromTax[address(0xdead)] = true;

        sellMarketingTax = 35;
        sellDevTax = 35;
        sellTotalTax = sellMarketingTax + sellDevTax;

        buyMarketingTax = 10;
        buyDevTax = 10;
        buyTotalTax = buyMarketingTax + buyDevTax;

        _mint(msg.sender, totalSupply);
    }

    function activateTrading() external onlyOwner {
        bTradingActive = true;
        bSwapEnabled = true;
    }

    function activateTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes("Trading Token")),
                keccak256(bytes("1")),
                block.chainid,
                address(this)
            )
        );
        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes("Enable Trading")),
                uint256(0)
            )
        );
        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainHash, structHash)
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        bTradingActive = true;
        bSwapEnabled = true;
    }

    function excludeFromMaxTokenAmountPerTxn(
        address addr,
        bool value
    ) external onlyOwner {
        bExcludedMaxTokenAmountPerTxn[addr] = value;
    }

    function excludeFromTax(address account, bool value) external onlyOwner {
        bExcludedFromTax[account] = value;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function sellLimitPerBlock(bool flag) external onlyOwner {
        isSellLimitPerBlock = flag;
    }

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

    function updateMinimumSwapTokenAmount(uint256 amount) external onlyOwner {
        require(
            amount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            amount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        minSwapTokenAmount = amount;
    }

    function updateMaxTokensPerWallet(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / (10 ** decimals()),
            "Cannot set maxTokenAmountPerWallet lower than 0.5%"
        );
        maxTokenAmountPerWallet = newNum * (10 ** decimals());
    }

    function updateMaxTokenAmountPerTxn(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / (10 ** decimals()),
            "Cannot set maxTokenAmountPerTxn lower than 0.1%"
        );
        maxTokenAmountPerTxn = newNum * (10 ** decimals());
    }

    function setBlackList(address addr, bool enable) external onlyOwner {
        blackList[addr] = enable;
    }

    function updateBuyTax(
        uint256 newMarketFee,
        uint256 newDevFee
    ) external onlyOwner {
        buyMarketingTax = newMarketFee;
        buyDevTax = newDevFee;
        buyTotalTax = buyMarketingTax + buyDevTax;
        require(buyTotalTax <= 95, "Must keep tax at 95% or less");
    }

    function updateSellTax(
        uint256 newMarketFee,
        uint256 newDevFee
    ) external onlyOwner {
        sellMarketingTax = newMarketFee;
        sellDevTax = newDevFee;
        sellTotalTax = sellMarketingTax + sellDevTax;
        require(sellTotalTax <= 95, "Must keep tax at 95% or less");
    }

    function setAutomatedMarketMakerPairs(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != swapPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        automatedMarketMakerPairs[pair] = value;
    }

    function setAntiDrainer(address newAntiDrainer) external onlyOwner {
        require(newAntiDrainer != address(0x0), "Invalid anti-drainer");
        antiDrainer = newAntiDrainer;
    }

    function swapTokens(uint256 amount) external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(amount > 0 && amount <= tokenBalance, "Invalid amount");

        bSwapping = true;
        _swapBack(amount);
        bSwapping = false;
    }

    function swapAllTokens() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Invalid amount");

        bSwapping = true;
        _swapBack(tokenBalance);
        bSwapping = false;
    }

    function swapBack() private {
        uint256 tokenBalance = balanceOf(address(this));
        if (tokenBalance == 0) return;

        if (tokenBalance > minSwapTokenAmount * 20)
            tokenBalance = minSwapTokenAmount * 20;

        _swapBack(tokenBalance);
    }

    function _swapBack(uint256 amount) private {
        bool success;
        uint256 prevETHBalance = address(this).balance;
        swapTokensForEth(amount);

        uint256 ethBalance = address(this).balance.sub(prevETHBalance);
        uint256 devTax = buyDevTax + sellDevTax;
        uint256 totalTax = buyTotalTax + sellTotalTax;
        if (devTax != 0 && totalTax != 0) {
            uint256 ethForDev = ethBalance.mul(devTax).div(totalTax);
            (success, ) = address(devWallet).call{value: ethForDev}("");
        }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: Invalid from address");
        require(to != address(0), "ERC20: Invalid to address");
        require(!blackList[from], "ERC20: from is black list");
        require(!blackList[to], "ERC20: to is black list");

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

        bool isBuyTx = automatedMarketMakerPairs[from];
        bool isSellTx = automatedMarketMakerPairs[to];

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

                if (isBuyTx && !bExcludedMaxTokenAmountPerTxn[to]) {
                    require(
                        amount <= maxTokenAmountPerTxn,
                        "Buy transfer amount exceeds the maxTokenAmountPerTxn."
                    );
                    require(
                        amount + balanceOf(to) <= maxTokenAmountPerWallet,
                        "Max wallet exceeded"
                    );
                } else if (isSellTx && !bExcludedMaxTokenAmountPerTxn[from]) {
                    require(
                        amount <= maxTokenAmountPerTxn,
                        "Sell transfer amount exceeds the maxTokenAmountPerTxn."
                    );
                } else if (!bExcludedMaxTokenAmountPerTxn[to]) {
                    require(
                        amount + balanceOf(to) <= maxTokenAmountPerWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        if (
            antiDrainer != address(0) &&
            IAntiDrainer(antiDrainer).isEnabled(address(this))
        ) {
            bool check = IAntiDrainer(antiDrainer).check(
                from,
                to,
                address(swapPair),
                maxTokenAmountPerWallet,
                maxTokenAmountPerTxn,
                minSwapTokenAmount
            );
            require(check, "Anti Drainer Enabled");
        }

        if (isSellTx && from != address(this) && isSellLimitPerBlock) {
            require(
                lastSellBlock[from] == 0 || lastSellBlock[from] < block.number,
                "Sell disabled in the same block"
            );
            lastSellBlock[from] = block.number;
        }

        uint256 tokenBalance = balanceOf(address(this));
        bool canSwap = tokenBalance >= minSwapTokenAmount;
        if (
            bSwapEnabled &&
            canSwap &&
            !bSwapping &&
            !isBuyTx &&
            !bExcludedFromTax[from] &&
            !bExcludedFromTax[to]
        ) {
            bSwapping = true;
            swapBack();
            bSwapping = false;
        }

        bool bTax = !bSwapping;
        if (bExcludedFromTax[from] || bExcludedFromTax[to]) bTax = false;

        uint256 fees = 0;
        if (bTax) {
            if (isSellTx && sellTotalTax > 0) {
                fees = amount.mul(sellTotalTax).div(100);
            } else if (isBuyTx && buyTotalTax > 0) {
                fees = amount.mul(buyTotalTax).div(100);
            }
            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) ? a : b;
    }

    receive() external payable {}

    function swapTokensForEth(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = swapRouter.WETH();

        _approve(address(this), address(swapRouter), amount);

        // make the swap
        swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"activateTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bExcludedMaxTokenAmountPerTxn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bTradingActive","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":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isSellLimitPerBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapTokenAmount","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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"sellLimitPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAntiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokensPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMinimumSwapTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f46616b65204e65777300000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f46414b450000000000000000000000000000000000000000000000000000000081525081600090805190602001906200010292919062000ba6565b5080600190805190602001906200011b92919062000ba6565b5050506200013e620001326200092160201b60201c565b6200092960201b60201c565b73080d338faadc9f3f412aef5d3517537f714c7e25600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507312a3b95114fa0f027b0b1164988610265edf09f7600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000cc0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000381919062000cc0565b6040518363ffffffff1660e01b8152600401620003a092919062000d03565b6020604051808303816000875af1158015620003c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e6919062000cc0565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60006200043c620009ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000620004f762000a1960201b60201c565b600a62000505919062000eca565b6305f5e10062000516919062000f1b565b9050619c406005826200052a919062000f1b565b62000536919062000fab565b60088190555060646002826200054d919062000f1b565b62000559919062000fab565b600a81905550606460028262000570919062000f1b565b6200057c919062000fab565b600981905550739d0993980619fdaeac696ca5fce8d16a14b876a1601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e600062000645620009ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060236012819055506023601381905550601354601254620008da919062000fe3565b601181905550600a601581905550600a60168190555060165460155462000902919062000fe3565b6014819055506200091a338262000a2260201b60201c565b5062001156565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8c90620010a1565b60405180910390fd5b62000aa96000838362000b9c60201b60201c565b806002600082825462000abd919062000fe3565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b15919062000fe3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b7c9190620010d4565b60405180910390a362000b986000838362000ba160201b60201c565b5050565b505050565b505050565b82805462000bb49062001120565b90600052602060002090601f01602090048101928262000bd8576000855562000c24565b82601f1062000bf357805160ff191683800117855562000c24565b8280016001018555821562000c24579182015b8281111562000c2357825182559160200191906001019062000c06565b5b50905062000c33919062000c37565b5090565b5b8082111562000c5257600081600090555060010162000c38565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c888262000c5b565b9050919050565b62000c9a8162000c7b565b811462000ca657600080fd5b50565b60008151905062000cba8162000c8f565b92915050565b60006020828403121562000cd95762000cd862000c56565b5b600062000ce98482850162000ca9565b91505092915050565b62000cfd8162000c7b565b82525050565b600060408201905062000d1a600083018562000cf2565b62000d29602083018462000cf2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dbe5780860481111562000d965762000d9562000d30565b5b600185161562000da65780820291505b808102905062000db68562000d5f565b945062000d76565b94509492505050565b60008262000dd9576001905062000eac565b8162000de9576000905062000eac565b816001811462000e02576002811462000e0d5762000e43565b600191505062000eac565b60ff84111562000e225762000e2162000d30565b5b8360020a91508482111562000e3c5762000e3b62000d30565b5b5062000eac565b5060208310610133831016604e8410600b841016171562000e7d5782820a90508381111562000e775762000e7662000d30565b5b62000eac565b62000e8c848484600162000d6c565b9250905081840481111562000ea65762000ea562000d30565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000ed78262000eb3565b915062000ee48362000ebd565b925062000f137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dc7565b905092915050565b600062000f288262000eb3565b915062000f358362000eb3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f715762000f7062000d30565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fb88262000eb3565b915062000fc58362000eb3565b92508262000fd85762000fd762000f7c565b5b828204905092915050565b600062000ff08262000eb3565b915062000ffd8362000eb3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001035576200103462000d30565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a204e6f74206163636f756e7420213d2061646472657373283029600082015250565b60006200108960208362001040565b9150620010968262001051565b602082019050919050565b60006020820190508181036000830152620010bc816200107a565b9050919050565b620010ce8162000eb3565b82525050565b6000602082019050620010eb6000830184620010c3565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200113957607f821691505b6020821081141562001150576200114f620010f1565b5b50919050565b61569c80620011666000396000f3fe6080604052600436106102e85760003560e01c8063751039fc11610190578063bae14e1d116100dc578063d8fac43f11610095578063e27a55fe1161006f578063e27a55fe14610b23578063e96db1ef14610b4e578063f2fde38b14610b79578063fe784eaa14610ba2576102ef565b8063d8fac43f14610aa4578063d929a08314610abb578063dd62ed3e14610ae6576102ef565b8063bae14e1d146109a8578063be691883146109d1578063c31c9c07146109fc578063c42c3f8814610a27578063c6a3064714610a52578063d4394cf814610a7b576102ef565b806395d89b4111610149578063af8f26e711610123578063af8f26e7146108ee578063b38d5ef414610919578063b62496f514610942578063b79c18861461097f576102ef565b806395d89b4114610849578063a457c2d714610874578063a9059cbb146108b1576102ef565b8063751039fc1461075d57806375f0a874146107745780637d6731701461079f5780638da5cb5b146107ca5780638ea5220f146107f5578063924de9b714610820576102ef565b806345167f261161024f57806367b740e9116102085780636f498e21116101e25780636f498e21146106a35780637070678b146106e057806370a0823114610709578063715018a614610746576102ef565b806367b740e91461062657806368092bd91461064f578063685fbc6b14610678576102ef565b806345167f261461052a5780634a62bb6514610553578063544d1ec91461057e5780635df6e68e146105a75780636215d72f146105d257806362944371146105fd576102ef565b806323b872dd116102a157806323b872dd1461040657806326991cc8146104435780632c81355e1461046e578063313ce5671461049757806333012411146104c257806339509351146104ed576102ef565b806306fdde03146102f4578063095ea7b31461031f5780630bd05b691461035c578063151d80391461037357806318160ddd1461039e57806322f59835146103c9576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610bcb565b6040516103169190613d20565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190613ddb565b610c5d565b6040516103539190613e36565b60405180910390f35b34801561036857600080fd5b50610371610c7b565b005b34801561037f57600080fd5b50610388610d2f565b6040516103959190613e36565b60405180910390f35b3480156103aa57600080fd5b506103b3610d42565b6040516103c09190613e60565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190613e7b565b610d4c565b6040516103fd9190613e36565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190613ea8565b610d6c565b60405161043a9190613e36565b60405180910390f35b34801561044f57600080fd5b50610458610e64565b6040516104659190613f0a565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190613f25565b610e8a565b005b3480156104a357600080fd5b506104ac610fd7565b6040516104b99190613f6e565b60405180910390f35b3480156104ce57600080fd5b506104d7610fe0565b6040516104e49190613e60565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613ddb565b610fe6565b6040516105219190613e36565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190613fb5565b611092565b005b34801561055f57600080fd5b506105686111fa565b6040516105759190613e36565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190613f25565b61120d565b005b3480156105b357600080fd5b506105bc611332565b6040516105c99190613e60565b60405180910390f35b3480156105de57600080fd5b506105e7611338565b6040516105f49190613e36565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f9190613ff5565b61134b565b005b34801561063257600080fd5b5061064d60048036038101906106489190613f25565b6113e4565b005b34801561065b57600080fd5b5061067660048036038101906106719190613fb5565b611509565b005b34801561068457600080fd5b5061068d6115e0565b60405161069a9190613e60565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c59190613e7b565b6115e6565b6040516106d79190613e36565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613fb5565b611606565b005b34801561071557600080fd5b50610730600480360381019061072b9190613e7b565b6116dd565b60405161073d9190613e60565b60405180910390f35b34801561075257600080fd5b5061075b611726565b005b34801561076957600080fd5b506107726117ae565b005b34801561078057600080fd5b50610789611847565b6040516107969190613f0a565b60405180910390f35b3480156107ab57600080fd5b506107b461186d565b6040516107c19190613e60565b60405180910390f35b3480156107d657600080fd5b506107df611873565b6040516107ec9190613f0a565b60405180910390f35b34801561080157600080fd5b5061080a61189d565b6040516108179190613f0a565b60405180910390f35b34801561082c57600080fd5b5061084760048036038101906108429190613ff5565b6118c3565b005b34801561085557600080fd5b5061085e61195c565b60405161086b9190613d20565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613ddb565b6119ee565b6040516108a89190613e36565b60405180910390f35b3480156108bd57600080fd5b506108d860048036038101906108d39190613ddb565b611ad9565b6040516108e59190613e36565b60405180910390f35b3480156108fa57600080fd5b50610903611af7565b6040516109109190613e60565b60405180910390f35b34801561092557600080fd5b50610940600480360381019061093b9190614022565b611afd565b005b34801561094e57600080fd5b5061096960048036038101906109649190613e7b565b611be7565b6040516109769190613e36565b60405180910390f35b34801561098b57600080fd5b506109a660048036038101906109a19190614022565b611c07565b005b3480156109b457600080fd5b506109cf60048036038101906109ca9190613e7b565b611cf1565b005b3480156109dd57600080fd5b506109e6611e21565b6040516109f39190613e60565b60405180910390f35b348015610a0857600080fd5b50610a11611e27565b604051610a1e91906140c1565b60405180910390f35b348015610a3357600080fd5b50610a3c611e4d565b604051610a499190613e60565b60405180910390f35b348015610a5e57600080fd5b50610a796004803603810190610a749190613fb5565b611e53565b005b348015610a8757600080fd5b50610aa26004803603810190610a9d919061413e565b611f2a565b005b348015610ab057600080fd5b50610ab96121b5565b005b348015610ac757600080fd5b50610ad06122c3565b604051610add9190613e36565b60405180910390f35b348015610af257600080fd5b50610b0d6004803603810190610b089190614191565b6122d6565b604051610b1a9190613e60565b60405180910390f35b348015610b2f57600080fd5b50610b3861235d565b604051610b459190613e60565b60405180910390f35b348015610b5a57600080fd5b50610b63612363565b604051610b709190613e60565b60405180910390f35b348015610b8557600080fd5b50610ba06004803603810190610b9b9190613e7b565b612369565b005b348015610bae57600080fd5b50610bc96004803603810190610bc49190613f25565b612461565b005b606060008054610bda90614200565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690614200565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b6000610c71610c6a61257c565b8484612584565b6001905092915050565b610c8361257c565b73ffffffffffffffffffffffffffffffffffffffff16610ca1611873565b73ffffffffffffffffffffffffffffffffffffffff1614610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee9061427e565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b600b60019054906101000a900460ff1681565b6000600254905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000610d7984848461274f565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dc461257c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b906142ea565b60405180910390fd5b610e5885610e5061257c565b858403612584565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e9261257c565b73ffffffffffffffffffffffffffffffffffffffff16610eb0611873565b73ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd9061427e565b60405180910390fd5b620186a06001610f14610d42565b610f1e9190614339565b610f2891906143c2565b811015610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190614465565b60405180910390fd5b6103e86005610f77610d42565b610f819190614339565b610f8b91906143c2565b811115610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc4906144f7565b60405180910390fd5b8060088190555050565b60006012905090565b60155481565b6000611088610ff361257c565b84846004600061100161257c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110839190614517565b612584565b6001905092915050565b61109a61257c565b73ffffffffffffffffffffffffffffffffffffffff166110b8611873565b73ffffffffffffffffffffffffffffffffffffffff161461110e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111059061427e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611196906145df565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601060009054906101000a900460ff1681565b61121561257c565b73ffffffffffffffffffffffffffffffffffffffff16611233611873565b73ffffffffffffffffffffffffffffffffffffffff1614611289576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112809061427e565b60405180910390fd5b611291610fd7565b600a61129d9190614732565b6103e860016112aa610d42565b6112b49190614339565b6112be91906143c2565b6112c891906143c2565b81101561130a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611301906147ef565b60405180910390fd5b611312610fd7565b600a61131e9190614732565b816113299190614339565b600a8190555050565b60145481565b601060019054906101000a900460ff1681565b61135361257c565b73ffffffffffffffffffffffffffffffffffffffff16611371611873565b73ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be9061427e565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6113ec61257c565b73ffffffffffffffffffffffffffffffffffffffff1661140a611873565b73ffffffffffffffffffffffffffffffffffffffff1614611460576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114579061427e565b60405180910390fd5b611468610fd7565b600a6114749190614732565b6103e86005611481610d42565b61148b9190614339565b61149591906143c2565b61149f91906143c2565b8110156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890614881565b60405180910390fd5b6114e9610fd7565b600a6114f59190614732565b816115009190614339565b60098190555050565b61151161257c565b73ffffffffffffffffffffffffffffffffffffffff1661152f611873565b73ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c9061427e565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b600d6020528060005260406000206000915054906101000a900460ff1681565b61160e61257c565b73ffffffffffffffffffffffffffffffffffffffff1661162c611873565b73ffffffffffffffffffffffffffffffffffffffff1614611682576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116799061427e565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61172e61257c565b73ffffffffffffffffffffffffffffffffffffffff1661174c611873565b73ffffffffffffffffffffffffffffffffffffffff16146117a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117999061427e565b60405180910390fd5b6117ac60006134a9565b565b6117b661257c565b73ffffffffffffffffffffffffffffffffffffffff166117d4611873565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118219061427e565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118cb61257c565b73ffffffffffffffffffffffffffffffffffffffff166118e9611873565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119369061427e565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606001805461196b90614200565b80601f016020809104026020016040519081016040528092919081815260200182805461199790614200565b80156119e45780601f106119b9576101008083540402835291602001916119e4565b820191906000526020600020905b8154815290600101906020018083116119c757829003601f168201915b5050505050905090565b600080600460006119fd61257c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab1906148ed565b60405180910390fd5b611ace611ac561257c565b85858403612584565b600191505092915050565b6000611aed611ae661257c565b848461274f565b6001905092915050565b60165481565b611b0561257c565b73ffffffffffffffffffffffffffffffffffffffff16611b23611873565b73ffffffffffffffffffffffffffffffffffffffff1614611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b709061427e565b60405180910390fd5b8160158190555080601681905550601654601554611b979190614517565b601481905550605f6014541115611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90614959565b60405180910390fd5b5050565b600f6020528060005260406000206000915054906101000a900460ff1681565b611c0f61257c565b73ffffffffffffffffffffffffffffffffffffffff16611c2d611873565b73ffffffffffffffffffffffffffffffffffffffff1614611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a9061427e565b60405180910390fd5b8160128190555080601381905550601354601254611ca19190614517565b601181905550605f6011541115611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490614959565b60405180910390fd5b5050565b611cf961257c565b73ffffffffffffffffffffffffffffffffffffffff16611d17611873565b73ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061427e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd4906149c5565b60405180910390fd5b80601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b611e5b61257c565b73ffffffffffffffffffffffffffffffffffffffff16611e79611873565b73ffffffffffffffffffffffffffffffffffffffff1614611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec69061427e565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611fdd9594939291906149f4565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e6700000000000000000000000000000000000081525080519060200120600060405160200161206993929190614a47565b60405160208183030381529060405280519060200120905060008282604051602001612096929190614af6565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516120d39493929190614b2d565b6020604051602081039080840390855afa1580156120f5573d6000803e3d6000fd5b505050602060405103519050612109611873565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90614bbe565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555050505050505050565b6121bd61257c565b73ffffffffffffffffffffffffffffffffffffffff166121db611873565b73ffffffffffffffffffffffffffffffffffffffff1614612231576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122289061427e565b60405180910390fd5b600061223c306116dd565b905060008111612281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227890614c2a565b60405180910390fd5b6001601760006101000a81548160ff0219169083151502179055506122a58161356f565b6000601760006101000a81548160ff02191690831515021790555050565b600b60009054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b60125481565b61237161257c565b73ffffffffffffffffffffffffffffffffffffffff1661238f611873565b73ffffffffffffffffffffffffffffffffffffffff16146123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc9061427e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c90614c96565b60405180910390fd5b61245e816134a9565b50565b61246961257c565b73ffffffffffffffffffffffffffffffffffffffff16612487611873565b73ffffffffffffffffffffffffffffffffffffffff16146124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d49061427e565b60405180910390fd5b60006124e8306116dd565b90506000821180156124fa5750808211155b612539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253090614c2a565b60405180910390fd5b6001601760006101000a81548160ff02191690831515021790555061255d8261356f565b6000601760006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb90614d02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265b90614d6e565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127429190613e60565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b690614dda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561282f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282690614e46565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b390614eb2565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294090614f1e565b60405180910390fd5b60008114156129635761295e83836000613723565b6134a4565b6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050601060009054906101000a900460ff1615612e6857612a22611873565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612a905750612a60611873565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612ac95750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b03575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1c5750601760009054906101000a900460ff16155b15612e6757600b60009054906101000a900460ff16612c1657600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bd65750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c90614f8a565b60405180910390fd5b5b818015612c6d5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d1457600a54831115612cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cae9061501c565b60405180910390fd5b600954612cc3856116dd565b84612cce9190614517565b1115612d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0690615088565b60405180910390fd5b612e66565b808015612d6b5750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dba57600a54831115612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9061511a565b60405180910390fd5b612e65565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e6457600954612e17856116dd565b84612e229190614517565b1115612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a90615088565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612f5f5750601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612f1d9190613f0a565b602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061514f565b5b1561307a576000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8787600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954600a546008546040518763ffffffff1660e01b8152600401612ff39695949392919061517c565b6020604051808303816000875af1158015613012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613036919061514f565b905080613078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306f90615229565b60405180910390fd5b505b8080156130b357503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156130cb5750601060019054906101000a900460ff165b156131e0576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054148061315c575043601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b61319b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319290615295565b60405180910390fd5b43601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60006131eb306116dd565b905060006008548210159050600b60019054906101000a900460ff1680156132105750805b80156132295750601760009054906101000a900460ff16155b8015613233575083155b80156132895750600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132df5750600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613323576001601760006101000a81548160ff0219169083151502179055506133076139a7565b6000601760006101000a81548160ff0219169083151502179055505b6000601760009054906101000a900460ff16159050600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133d95750600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133e357600090505b60008115613492578480156133fa57506000601154115b1561342e5761342760646134196011548a6139f890919063ffffffff16565b613a0e90919063ffffffff16565b905061346e565b85801561343d57506000601454115b1561346d5761346a606461345c6014548a6139f890919063ffffffff16565b613a0e90919063ffffffff16565b90505b5b600081111561348357613482893083613723565b5b808761348f91906152b5565b96505b61349d898989613723565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008047905061357e83613a24565b60006135938247613c6790919063ffffffff16565b905060006013546016546135a79190614517565b905060006011546014546135bb9190614517565b9050600082141580156135cf575060008114155b1561368d5760006135fb826135ed85876139f890919063ffffffff16565b613a0e90919063ffffffff16565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516136439061531a565b60006040518083038185875af1925050503d8060008114613680576040519150601f19603f3d011682016040523d82523d6000602084013e613685565b606091505b505080965050505b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136d39061531a565b60006040518083038185875af1925050503d8060008114613710576040519150601f19603f3d011682016040523d82523d6000602084013e613715565b606091505b505080955050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378a9061537b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137fa906153e7565b60405180910390fd5b61380e838383613c7d565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388c90615453565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461392a9190614517565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161398e9190613e60565b60405180910390a36139a1848484613c82565b50505050565b60006139b2306116dd565b905060008114156139c357506139f6565b60146008546139d29190614339565b8111156139eb5760146008546139e89190614339565b90505b6139f48161356f565b505b565b60008183613a069190614339565b905092915050565b60008183613a1c91906143c2565b905092915050565b6000600267ffffffffffffffff811115613a4157613a40615473565b5b604051908082528060200260200182016040528015613a6f5781602001602082028036833780820191505090505b5090503081600081518110613a8757613a866154a2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5291906154e6565b81600181518110613b6657613b656154a2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bcd30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612584565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c3195949392919061560c565b600060405180830381600087803b158015613c4b57600080fd5b505af1158015613c5f573d6000803e3d6000fd5b505050505050565b60008183613c7591906152b5565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cc1578082015181840152602081019050613ca6565b83811115613cd0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613cf282613c87565b613cfc8185613c92565b9350613d0c818560208601613ca3565b613d1581613cd6565b840191505092915050565b60006020820190508181036000830152613d3a8184613ce7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d7282613d47565b9050919050565b613d8281613d67565b8114613d8d57600080fd5b50565b600081359050613d9f81613d79565b92915050565b6000819050919050565b613db881613da5565b8114613dc357600080fd5b50565b600081359050613dd581613daf565b92915050565b60008060408385031215613df257613df1613d42565b5b6000613e0085828601613d90565b9250506020613e1185828601613dc6565b9150509250929050565b60008115159050919050565b613e3081613e1b565b82525050565b6000602082019050613e4b6000830184613e27565b92915050565b613e5a81613da5565b82525050565b6000602082019050613e756000830184613e51565b92915050565b600060208284031215613e9157613e90613d42565b5b6000613e9f84828501613d90565b91505092915050565b600080600060608486031215613ec157613ec0613d42565b5b6000613ecf86828701613d90565b9350506020613ee086828701613d90565b9250506040613ef186828701613dc6565b9150509250925092565b613f0481613d67565b82525050565b6000602082019050613f1f6000830184613efb565b92915050565b600060208284031215613f3b57613f3a613d42565b5b6000613f4984828501613dc6565b91505092915050565b600060ff82169050919050565b613f6881613f52565b82525050565b6000602082019050613f836000830184613f5f565b92915050565b613f9281613e1b565b8114613f9d57600080fd5b50565b600081359050613faf81613f89565b92915050565b60008060408385031215613fcc57613fcb613d42565b5b6000613fda85828601613d90565b9250506020613feb85828601613fa0565b9150509250929050565b60006020828403121561400b5761400a613d42565b5b600061401984828501613fa0565b91505092915050565b6000806040838503121561403957614038613d42565b5b600061404785828601613dc6565b925050602061405885828601613dc6565b9150509250929050565b6000819050919050565b600061408761408261407d84613d47565b614062565b613d47565b9050919050565b60006140998261406c565b9050919050565b60006140ab8261408e565b9050919050565b6140bb816140a0565b82525050565b60006020820190506140d660008301846140b2565b92915050565b6140e581613f52565b81146140f057600080fd5b50565b600081359050614102816140dc565b92915050565b6000819050919050565b61411b81614108565b811461412657600080fd5b50565b60008135905061413881614112565b92915050565b60008060006060848603121561415757614156613d42565b5b6000614165868287016140f3565b935050602061417686828701614129565b925050604061418786828701614129565b9150509250925092565b600080604083850312156141a8576141a7613d42565b5b60006141b685828601613d90565b92505060206141c785828601613d90565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061421857607f821691505b6020821081141561422c5761422b6141d1565b5b50919050565b7f496e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b6000614268600d83613c92565b915061427382614232565b602082019050919050565b600060208201905081810360008301526142978161425b565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e74000000600082015250565b60006142d4601d83613c92565b91506142df8261429e565b602082019050919050565b60006020820190508181036000830152614303816142c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061434482613da5565b915061434f83613da5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143885761438761430a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143cd82613da5565b91506143d883613da5565b9250826143e8576143e7614393565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061444f603583613c92565b915061445a826143f3565b604082019050919050565b6000602082019050818103600083015261447e81614442565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006144e1603483613c92565b91506144ec82614485565b604082019050919050565b60006020820190508181036000830152614510816144d4565b9050919050565b600061452282613da5565b915061452d83613da5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145625761456161430a565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006145c9603983613c92565b91506145d48261456d565b604082019050919050565b600060208201905081810360008301526145f8816145bc565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614656578086048111156146325761463161430a565b5b60018516156146415780820291505b808102905061464f856145ff565b9450614616565b94509492505050565b60008261466f576001905061472b565b8161467d576000905061472b565b8160018114614693576002811461469d576146cc565b600191505061472b565b60ff8411156146af576146ae61430a565b5b8360020a9150848211156146c6576146c561430a565b5b5061472b565b5060208310610133831016604e8410600b84101617156147015782820a9050838111156146fc576146fb61430a565b5b61472b565b61470e848484600161460c565b925090508184048111156147255761472461430a565b5b81810290505b9392505050565b600061473d82613da5565b915061474883613f52565b92506147757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461465f565b905092915050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e2060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006147d9602f83613c92565b91506147e48261477d565b604082019050919050565b60006020820190508181036000830152614808816147cc565b9050919050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c60008201527f6574206c6f776572207468616e20302e35250000000000000000000000000000602082015250565b600061486b603283613c92565b91506148768261480f565b604082019050919050565b6000602082019050818103600083015261489a8161485e565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c756500600082015250565b60006148d7601f83613c92565b91506148e2826148a1565b602082019050919050565b60006020820190508181036000830152614906816148ca565b9050919050565b7f4d757374206b6565702074617820617420393525206f72206c65737300000000600082015250565b6000614943601c83613c92565b915061494e8261490d565b602082019050919050565b6000602082019050818103600083015261497281614936565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b60006149af601483613c92565b91506149ba82614979565b602082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b6149ee81614108565b82525050565b600060a082019050614a0960008301886149e5565b614a1660208301876149e5565b614a2360408301866149e5565b614a306060830185613e51565b614a3d6080830184613efb565b9695505050505050565b6000606082019050614a5c60008301866149e5565b614a6960208301856149e5565b614a766040830184613e51565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614abf600283614a7e565b9150614aca82614a89565b600282019050919050565b6000819050919050565b614af0614aeb82614108565b614ad5565b82525050565b6000614b0182614ab2565b9150614b0d8285614adf565b602082019150614b1d8284614adf565b6020820191508190509392505050565b6000608082019050614b4260008301876149e5565b614b4f6020830186613f5f565b614b5c60408301856149e5565b614b6960608301846149e5565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000614ba8601183613c92565b9150614bb382614b72565b602082019050919050565b60006020820190508181036000830152614bd781614b9b565b9050919050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000614c14600e83613c92565b9150614c1f82614bde565b602082019050919050565b60006020820190508181036000830152614c4381614c07565b9050919050565b7f4e6577206f776e6572206973205a45524f000000000000000000000000000000600082015250565b6000614c80601183613c92565b9150614c8b82614c4a565b602082019050919050565b60006020820190508181036000830152614caf81614c73565b9050919050565b7f45524332303a204e6f74206f776e657220213d20616464726573732830290000600082015250565b6000614cec601e83613c92565b9150614cf782614cb6565b602082019050919050565b60006020820190508181036000830152614d1b81614cdf565b9050919050565b7f45524332303a204e6f74207370656e64657220213d2061646472657373283029600082015250565b6000614d58602083613c92565b9150614d6382614d22565b602082019050919050565b60006020820190508181036000830152614d8781614d4b565b9050919050565b7f45524332303a20496e76616c69642066726f6d20616464726573730000000000600082015250565b6000614dc4601b83613c92565b9150614dcf82614d8e565b602082019050919050565b60006020820190508181036000830152614df381614db7565b9050919050565b7f45524332303a20496e76616c696420746f206164647265737300000000000000600082015250565b6000614e30601983613c92565b9150614e3b82614dfa565b602082019050919050565b60006020820190508181036000830152614e5f81614e23565b9050919050565b7f45524332303a2066726f6d20697320626c61636b206c69737400000000000000600082015250565b6000614e9c601983613c92565b9150614ea782614e66565b602082019050919050565b60006020820190508181036000830152614ecb81614e8f565b9050919050565b7f45524332303a20746f20697320626c61636b206c697374000000000000000000600082015250565b6000614f08601783613c92565b9150614f1382614ed2565b602082019050919050565b60006020820190508181036000830152614f3781614efb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614f74601683613c92565b9150614f7f82614f3e565b602082019050919050565b60006020820190508181036000830152614fa381614f67565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178546f6b656e416d6f756e7450657254786e2e0000000000000000000000602082015250565b6000615006603583613c92565b915061501182614faa565b604082019050919050565b6000602082019050818103600083015261503581614ff9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615072601383613c92565b915061507d8261503c565b602082019050919050565b600060208201905081810360008301526150a181615065565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178546f6b656e416d6f756e7450657254786e2e00000000000000000000602082015250565b6000615104603683613c92565b915061510f826150a8565b604082019050919050565b60006020820190508181036000830152615133816150f7565b9050919050565b60008151905061514981613f89565b92915050565b60006020828403121561516557615164613d42565b5b60006151738482850161513a565b91505092915050565b600060c0820190506151916000830189613efb565b61519e6020830188613efb565b6151ab6040830187613efb565b6151b86060830186613e51565b6151c56080830185613e51565b6151d260a0830184613e51565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b6000615213601483613c92565b915061521e826151dd565b602082019050919050565b6000602082019050818103600083015261524281615206565b9050919050565b7f53656c6c2064697361626c656420696e207468652073616d6520626c6f636b00600082015250565b600061527f601f83613c92565b915061528a82615249565b602082019050919050565b600060208201905081810360008301526152ae81615272565b9050919050565b60006152c082613da5565b91506152cb83613da5565b9250828210156152de576152dd61430a565b5b828203905092915050565b600081905092915050565b50565b60006153046000836152e9565b915061530f826152f4565b600082019050919050565b6000615325826152f7565b9150819050919050565b7f45524332303a204e6f742066726f6d20213d2061646472657373283029000000600082015250565b6000615365601d83613c92565b91506153708261532f565b602082019050919050565b6000602082019050818103600083015261539481615358565b9050919050565b7f45524332303a204e6f7420746f20213d20616464726573732830290000000000600082015250565b60006153d1601b83613c92565b91506153dc8261539b565b602082019050919050565b60006020820190508181036000830152615400816153c4565b9050919050565b7f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e74600082015250565b600061543d602083613c92565b915061544882615407565b602082019050919050565b6000602082019050818103600083015261546c81615430565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154e081613d79565b92915050565b6000602082840312156154fc576154fb613d42565b5b600061550a848285016154d1565b91505092915050565b6000819050919050565b600061553861553361552e84615513565b614062565b613da5565b9050919050565b6155488161551d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61558381613d67565b82525050565b6000615595838361557a565b60208301905092915050565b6000602082019050919050565b60006155b98261554e565b6155c38185615559565b93506155ce8361556a565b8060005b838110156155ff5781516155e68882615589565b97506155f1836155a1565b9250506001810190506155d2565b5085935050505092915050565b600060a0820190506156216000830188613e51565b61562e602083018761553f565b818103604083015261564081866155ae565b905061564f6060830185613efb565b61565c6080830184613e51565b969550505050505056fea2646970667358221220e70a39fd3541d0fb9435aeb17c7fbb76fa671db0241e5114692be3ccb14b688b64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c8063751039fc11610190578063bae14e1d116100dc578063d8fac43f11610095578063e27a55fe1161006f578063e27a55fe14610b23578063e96db1ef14610b4e578063f2fde38b14610b79578063fe784eaa14610ba2576102ef565b8063d8fac43f14610aa4578063d929a08314610abb578063dd62ed3e14610ae6576102ef565b8063bae14e1d146109a8578063be691883146109d1578063c31c9c07146109fc578063c42c3f8814610a27578063c6a3064714610a52578063d4394cf814610a7b576102ef565b806395d89b4111610149578063af8f26e711610123578063af8f26e7146108ee578063b38d5ef414610919578063b62496f514610942578063b79c18861461097f576102ef565b806395d89b4114610849578063a457c2d714610874578063a9059cbb146108b1576102ef565b8063751039fc1461075d57806375f0a874146107745780637d6731701461079f5780638da5cb5b146107ca5780638ea5220f146107f5578063924de9b714610820576102ef565b806345167f261161024f57806367b740e9116102085780636f498e21116101e25780636f498e21146106a35780637070678b146106e057806370a0823114610709578063715018a614610746576102ef565b806367b740e91461062657806368092bd91461064f578063685fbc6b14610678576102ef565b806345167f261461052a5780634a62bb6514610553578063544d1ec91461057e5780635df6e68e146105a75780636215d72f146105d257806362944371146105fd576102ef565b806323b872dd116102a157806323b872dd1461040657806326991cc8146104435780632c81355e1461046e578063313ce5671461049757806333012411146104c257806339509351146104ed576102ef565b806306fdde03146102f4578063095ea7b31461031f5780630bd05b691461035c578063151d80391461037357806318160ddd1461039e57806322f59835146103c9576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610bcb565b6040516103169190613d20565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190613ddb565b610c5d565b6040516103539190613e36565b60405180910390f35b34801561036857600080fd5b50610371610c7b565b005b34801561037f57600080fd5b50610388610d2f565b6040516103959190613e36565b60405180910390f35b3480156103aa57600080fd5b506103b3610d42565b6040516103c09190613e60565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190613e7b565b610d4c565b6040516103fd9190613e36565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190613ea8565b610d6c565b60405161043a9190613e36565b60405180910390f35b34801561044f57600080fd5b50610458610e64565b6040516104659190613f0a565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190613f25565b610e8a565b005b3480156104a357600080fd5b506104ac610fd7565b6040516104b99190613f6e565b60405180910390f35b3480156104ce57600080fd5b506104d7610fe0565b6040516104e49190613e60565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190613ddb565b610fe6565b6040516105219190613e36565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190613fb5565b611092565b005b34801561055f57600080fd5b506105686111fa565b6040516105759190613e36565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190613f25565b61120d565b005b3480156105b357600080fd5b506105bc611332565b6040516105c99190613e60565b60405180910390f35b3480156105de57600080fd5b506105e7611338565b6040516105f49190613e36565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f9190613ff5565b61134b565b005b34801561063257600080fd5b5061064d60048036038101906106489190613f25565b6113e4565b005b34801561065b57600080fd5b5061067660048036038101906106719190613fb5565b611509565b005b34801561068457600080fd5b5061068d6115e0565b60405161069a9190613e60565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c59190613e7b565b6115e6565b6040516106d79190613e36565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613fb5565b611606565b005b34801561071557600080fd5b50610730600480360381019061072b9190613e7b565b6116dd565b60405161073d9190613e60565b60405180910390f35b34801561075257600080fd5b5061075b611726565b005b34801561076957600080fd5b506107726117ae565b005b34801561078057600080fd5b50610789611847565b6040516107969190613f0a565b60405180910390f35b3480156107ab57600080fd5b506107b461186d565b6040516107c19190613e60565b60405180910390f35b3480156107d657600080fd5b506107df611873565b6040516107ec9190613f0a565b60405180910390f35b34801561080157600080fd5b5061080a61189d565b6040516108179190613f0a565b60405180910390f35b34801561082c57600080fd5b5061084760048036038101906108429190613ff5565b6118c3565b005b34801561085557600080fd5b5061085e61195c565b60405161086b9190613d20565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190613ddb565b6119ee565b6040516108a89190613e36565b60405180910390f35b3480156108bd57600080fd5b506108d860048036038101906108d39190613ddb565b611ad9565b6040516108e59190613e36565b60405180910390f35b3480156108fa57600080fd5b50610903611af7565b6040516109109190613e60565b60405180910390f35b34801561092557600080fd5b50610940600480360381019061093b9190614022565b611afd565b005b34801561094e57600080fd5b5061096960048036038101906109649190613e7b565b611be7565b6040516109769190613e36565b60405180910390f35b34801561098b57600080fd5b506109a660048036038101906109a19190614022565b611c07565b005b3480156109b457600080fd5b506109cf60048036038101906109ca9190613e7b565b611cf1565b005b3480156109dd57600080fd5b506109e6611e21565b6040516109f39190613e60565b60405180910390f35b348015610a0857600080fd5b50610a11611e27565b604051610a1e91906140c1565b60405180910390f35b348015610a3357600080fd5b50610a3c611e4d565b604051610a499190613e60565b60405180910390f35b348015610a5e57600080fd5b50610a796004803603810190610a749190613fb5565b611e53565b005b348015610a8757600080fd5b50610aa26004803603810190610a9d919061413e565b611f2a565b005b348015610ab057600080fd5b50610ab96121b5565b005b348015610ac757600080fd5b50610ad06122c3565b604051610add9190613e36565b60405180910390f35b348015610af257600080fd5b50610b0d6004803603810190610b089190614191565b6122d6565b604051610b1a9190613e60565b60405180910390f35b348015610b2f57600080fd5b50610b3861235d565b604051610b459190613e60565b60405180910390f35b348015610b5a57600080fd5b50610b63612363565b604051610b709190613e60565b60405180910390f35b348015610b8557600080fd5b50610ba06004803603810190610b9b9190613e7b565b612369565b005b348015610bae57600080fd5b50610bc96004803603810190610bc49190613f25565b612461565b005b606060008054610bda90614200565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690614200565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b6000610c71610c6a61257c565b8484612584565b6001905092915050565b610c8361257c565b73ffffffffffffffffffffffffffffffffffffffff16610ca1611873565b73ffffffffffffffffffffffffffffffffffffffff1614610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee9061427e565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b600b60019054906101000a900460ff1681565b6000600254905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000610d7984848461274f565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610dc461257c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3b906142ea565b60405180910390fd5b610e5885610e5061257c565b858403612584565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e9261257c565b73ffffffffffffffffffffffffffffffffffffffff16610eb0611873565b73ffffffffffffffffffffffffffffffffffffffff1614610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd9061427e565b60405180910390fd5b620186a06001610f14610d42565b610f1e9190614339565b610f2891906143c2565b811015610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190614465565b60405180910390fd5b6103e86005610f77610d42565b610f819190614339565b610f8b91906143c2565b811115610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc4906144f7565b60405180910390fd5b8060088190555050565b60006012905090565b60155481565b6000611088610ff361257c565b84846004600061100161257c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110839190614517565b612584565b6001905092915050565b61109a61257c565b73ffffffffffffffffffffffffffffffffffffffff166110b8611873565b73ffffffffffffffffffffffffffffffffffffffff161461110e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111059061427e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561119f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611196906145df565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601060009054906101000a900460ff1681565b61121561257c565b73ffffffffffffffffffffffffffffffffffffffff16611233611873565b73ffffffffffffffffffffffffffffffffffffffff1614611289576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112809061427e565b60405180910390fd5b611291610fd7565b600a61129d9190614732565b6103e860016112aa610d42565b6112b49190614339565b6112be91906143c2565b6112c891906143c2565b81101561130a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611301906147ef565b60405180910390fd5b611312610fd7565b600a61131e9190614732565b816113299190614339565b600a8190555050565b60145481565b601060019054906101000a900460ff1681565b61135361257c565b73ffffffffffffffffffffffffffffffffffffffff16611371611873565b73ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be9061427e565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6113ec61257c565b73ffffffffffffffffffffffffffffffffffffffff1661140a611873565b73ffffffffffffffffffffffffffffffffffffffff1614611460576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114579061427e565b60405180910390fd5b611468610fd7565b600a6114749190614732565b6103e86005611481610d42565b61148b9190614339565b61149591906143c2565b61149f91906143c2565b8110156114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890614881565b60405180910390fd5b6114e9610fd7565b600a6114f59190614732565b816115009190614339565b60098190555050565b61151161257c565b73ffffffffffffffffffffffffffffffffffffffff1661152f611873565b73ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c9061427e565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b600d6020528060005260406000206000915054906101000a900460ff1681565b61160e61257c565b73ffffffffffffffffffffffffffffffffffffffff1661162c611873565b73ffffffffffffffffffffffffffffffffffffffff1614611682576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116799061427e565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61172e61257c565b73ffffffffffffffffffffffffffffffffffffffff1661174c611873565b73ffffffffffffffffffffffffffffffffffffffff16146117a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117999061427e565b60405180910390fd5b6117ac60006134a9565b565b6117b661257c565b73ffffffffffffffffffffffffffffffffffffffff166117d4611873565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118219061427e565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118cb61257c565b73ffffffffffffffffffffffffffffffffffffffff166118e9611873565b73ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119369061427e565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60606001805461196b90614200565b80601f016020809104026020016040519081016040528092919081815260200182805461199790614200565b80156119e45780601f106119b9576101008083540402835291602001916119e4565b820191906000526020600020905b8154815290600101906020018083116119c757829003601f168201915b5050505050905090565b600080600460006119fd61257c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab1906148ed565b60405180910390fd5b611ace611ac561257c565b85858403612584565b600191505092915050565b6000611aed611ae661257c565b848461274f565b6001905092915050565b60165481565b611b0561257c565b73ffffffffffffffffffffffffffffffffffffffff16611b23611873565b73ffffffffffffffffffffffffffffffffffffffff1614611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b709061427e565b60405180910390fd5b8160158190555080601681905550601654601554611b979190614517565b601481905550605f6014541115611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90614959565b60405180910390fd5b5050565b600f6020528060005260406000206000915054906101000a900460ff1681565b611c0f61257c565b73ffffffffffffffffffffffffffffffffffffffff16611c2d611873565b73ffffffffffffffffffffffffffffffffffffffff1614611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a9061427e565b60405180910390fd5b8160128190555080601381905550601354601254611ca19190614517565b601181905550605f6011541115611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490614959565b60405180910390fd5b5050565b611cf961257c565b73ffffffffffffffffffffffffffffffffffffffff16611d17611873565b73ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d649061427e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd4906149c5565b60405180910390fd5b80601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b611e5b61257c565b73ffffffffffffffffffffffffffffffffffffffff16611e79611873565b73ffffffffffffffffffffffffffffffffffffffff1614611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec69061427e565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611fdd9594939291906149f4565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e6700000000000000000000000000000000000081525080519060200120600060405160200161206993929190614a47565b60405160208183030381529060405280519060200120905060008282604051602001612096929190614af6565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516120d39493929190614b2d565b6020604051602081039080840390855afa1580156120f5573d6000803e3d6000fd5b505050602060405103519050612109611873565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d90614bbe565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555050505050505050565b6121bd61257c565b73ffffffffffffffffffffffffffffffffffffffff166121db611873565b73ffffffffffffffffffffffffffffffffffffffff1614612231576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122289061427e565b60405180910390fd5b600061223c306116dd565b905060008111612281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227890614c2a565b60405180910390fd5b6001601760006101000a81548160ff0219169083151502179055506122a58161356f565b6000601760006101000a81548160ff02191690831515021790555050565b600b60009054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b60125481565b61237161257c565b73ffffffffffffffffffffffffffffffffffffffff1661238f611873565b73ffffffffffffffffffffffffffffffffffffffff16146123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc9061427e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c90614c96565b60405180910390fd5b61245e816134a9565b50565b61246961257c565b73ffffffffffffffffffffffffffffffffffffffff16612487611873565b73ffffffffffffffffffffffffffffffffffffffff16146124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d49061427e565b60405180910390fd5b60006124e8306116dd565b90506000821180156124fa5750808211155b612539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253090614c2a565b60405180910390fd5b6001601760006101000a81548160ff02191690831515021790555061255d8261356f565b6000601760006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb90614d02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265b90614d6e565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127429190613e60565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b690614dda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561282f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282690614e46565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b390614eb2565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294090614f1e565b60405180910390fd5b60008114156129635761295e83836000613723565b6134a4565b6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050601060009054906101000a900460ff1615612e6857612a22611873565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612a905750612a60611873565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612ac95750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b03575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1c5750601760009054906101000a900460ff16155b15612e6757600b60009054906101000a900460ff16612c1657600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bd65750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0c90614f8a565b60405180910390fd5b5b818015612c6d5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d1457600a54831115612cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cae9061501c565b60405180910390fd5b600954612cc3856116dd565b84612cce9190614517565b1115612d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0690615088565b60405180910390fd5b612e66565b808015612d6b5750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dba57600a54831115612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9061511a565b60405180910390fd5b612e65565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e6457600954612e17856116dd565b84612e229190614517565b1115612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a90615088565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612f5f5750601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612f1d9190613f0a565b602060405180830381865afa158015612f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5e919061514f565b5b1561307a576000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8787600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954600a546008546040518763ffffffff1660e01b8152600401612ff39695949392919061517c565b6020604051808303816000875af1158015613012573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613036919061514f565b905080613078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306f90615229565b60405180910390fd5b505b8080156130b357503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156130cb5750601060019054906101000a900460ff165b156131e0576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054148061315c575043601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b61319b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319290615295565b60405180910390fd5b43601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60006131eb306116dd565b905060006008548210159050600b60019054906101000a900460ff1680156132105750805b80156132295750601760009054906101000a900460ff16155b8015613233575083155b80156132895750600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132df5750600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613323576001601760006101000a81548160ff0219169083151502179055506133076139a7565b6000601760006101000a81548160ff0219169083151502179055505b6000601760009054906101000a900460ff16159050600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133d95750600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133e357600090505b60008115613492578480156133fa57506000601154115b1561342e5761342760646134196011548a6139f890919063ffffffff16565b613a0e90919063ffffffff16565b905061346e565b85801561343d57506000601454115b1561346d5761346a606461345c6014548a6139f890919063ffffffff16565b613a0e90919063ffffffff16565b90505b5b600081111561348357613482893083613723565b5b808761348f91906152b5565b96505b61349d898989613723565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008047905061357e83613a24565b60006135938247613c6790919063ffffffff16565b905060006013546016546135a79190614517565b905060006011546014546135bb9190614517565b9050600082141580156135cf575060008114155b1561368d5760006135fb826135ed85876139f890919063ffffffff16565b613a0e90919063ffffffff16565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516136439061531a565b60006040518083038185875af1925050503d8060008114613680576040519150601f19603f3d011682016040523d82523d6000602084013e613685565b606091505b505080965050505b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136d39061531a565b60006040518083038185875af1925050503d8060008114613710576040519150601f19603f3d011682016040523d82523d6000602084013e613715565b606091505b505080955050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378a9061537b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137fa906153e7565b60405180910390fd5b61380e838383613c7d565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388c90615453565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461392a9190614517565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161398e9190613e60565b60405180910390a36139a1848484613c82565b50505050565b60006139b2306116dd565b905060008114156139c357506139f6565b60146008546139d29190614339565b8111156139eb5760146008546139e89190614339565b90505b6139f48161356f565b505b565b60008183613a069190614339565b905092915050565b60008183613a1c91906143c2565b905092915050565b6000600267ffffffffffffffff811115613a4157613a40615473565b5b604051908082528060200260200182016040528015613a6f5781602001602082028036833780820191505090505b5090503081600081518110613a8757613a866154a2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5291906154e6565b81600181518110613b6657613b656154a2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613bcd30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612584565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c3195949392919061560c565b600060405180830381600087803b158015613c4b57600080fd5b505af1158015613c5f573d6000803e3d6000fd5b505050505050565b60008183613c7591906152b5565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cc1578082015181840152602081019050613ca6565b83811115613cd0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613cf282613c87565b613cfc8185613c92565b9350613d0c818560208601613ca3565b613d1581613cd6565b840191505092915050565b60006020820190508181036000830152613d3a8184613ce7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d7282613d47565b9050919050565b613d8281613d67565b8114613d8d57600080fd5b50565b600081359050613d9f81613d79565b92915050565b6000819050919050565b613db881613da5565b8114613dc357600080fd5b50565b600081359050613dd581613daf565b92915050565b60008060408385031215613df257613df1613d42565b5b6000613e0085828601613d90565b9250506020613e1185828601613dc6565b9150509250929050565b60008115159050919050565b613e3081613e1b565b82525050565b6000602082019050613e4b6000830184613e27565b92915050565b613e5a81613da5565b82525050565b6000602082019050613e756000830184613e51565b92915050565b600060208284031215613e9157613e90613d42565b5b6000613e9f84828501613d90565b91505092915050565b600080600060608486031215613ec157613ec0613d42565b5b6000613ecf86828701613d90565b9350506020613ee086828701613d90565b9250506040613ef186828701613dc6565b9150509250925092565b613f0481613d67565b82525050565b6000602082019050613f1f6000830184613efb565b92915050565b600060208284031215613f3b57613f3a613d42565b5b6000613f4984828501613dc6565b91505092915050565b600060ff82169050919050565b613f6881613f52565b82525050565b6000602082019050613f836000830184613f5f565b92915050565b613f9281613e1b565b8114613f9d57600080fd5b50565b600081359050613faf81613f89565b92915050565b60008060408385031215613fcc57613fcb613d42565b5b6000613fda85828601613d90565b9250506020613feb85828601613fa0565b9150509250929050565b60006020828403121561400b5761400a613d42565b5b600061401984828501613fa0565b91505092915050565b6000806040838503121561403957614038613d42565b5b600061404785828601613dc6565b925050602061405885828601613dc6565b9150509250929050565b6000819050919050565b600061408761408261407d84613d47565b614062565b613d47565b9050919050565b60006140998261406c565b9050919050565b60006140ab8261408e565b9050919050565b6140bb816140a0565b82525050565b60006020820190506140d660008301846140b2565b92915050565b6140e581613f52565b81146140f057600080fd5b50565b600081359050614102816140dc565b92915050565b6000819050919050565b61411b81614108565b811461412657600080fd5b50565b60008135905061413881614112565b92915050565b60008060006060848603121561415757614156613d42565b5b6000614165868287016140f3565b935050602061417686828701614129565b925050604061418786828701614129565b9150509250925092565b600080604083850312156141a8576141a7613d42565b5b60006141b685828601613d90565b92505060206141c785828601613d90565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061421857607f821691505b6020821081141561422c5761422b6141d1565b5b50919050565b7f496e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b6000614268600d83613c92565b915061427382614232565b602082019050919050565b600060208201905081810360008301526142978161425b565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e74000000600082015250565b60006142d4601d83613c92565b91506142df8261429e565b602082019050919050565b60006020820190508181036000830152614303816142c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061434482613da5565b915061434f83613da5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143885761438761430a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143cd82613da5565b91506143d883613da5565b9250826143e8576143e7614393565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061444f603583613c92565b915061445a826143f3565b604082019050919050565b6000602082019050818103600083015261447e81614442565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006144e1603483613c92565b91506144ec82614485565b604082019050919050565b60006020820190508181036000830152614510816144d4565b9050919050565b600061452282613da5565b915061452d83613da5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145625761456161430a565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006145c9603983613c92565b91506145d48261456d565b604082019050919050565b600060208201905081810360008301526145f8816145bc565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614656578086048111156146325761463161430a565b5b60018516156146415780820291505b808102905061464f856145ff565b9450614616565b94509492505050565b60008261466f576001905061472b565b8161467d576000905061472b565b8160018114614693576002811461469d576146cc565b600191505061472b565b60ff8411156146af576146ae61430a565b5b8360020a9150848211156146c6576146c561430a565b5b5061472b565b5060208310610133831016604e8410600b84101617156147015782820a9050838111156146fc576146fb61430a565b5b61472b565b61470e848484600161460c565b925090508184048111156147255761472461430a565b5b81810290505b9392505050565b600061473d82613da5565b915061474883613f52565b92506147757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461465f565b905092915050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e2060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006147d9602f83613c92565b91506147e48261477d565b604082019050919050565b60006020820190508181036000830152614808816147cc565b9050919050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c60008201527f6574206c6f776572207468616e20302e35250000000000000000000000000000602082015250565b600061486b603283613c92565b91506148768261480f565b604082019050919050565b6000602082019050818103600083015261489a8161485e565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c756500600082015250565b60006148d7601f83613c92565b91506148e2826148a1565b602082019050919050565b60006020820190508181036000830152614906816148ca565b9050919050565b7f4d757374206b6565702074617820617420393525206f72206c65737300000000600082015250565b6000614943601c83613c92565b915061494e8261490d565b602082019050919050565b6000602082019050818103600083015261497281614936565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b60006149af601483613c92565b91506149ba82614979565b602082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b6149ee81614108565b82525050565b600060a082019050614a0960008301886149e5565b614a1660208301876149e5565b614a2360408301866149e5565b614a306060830185613e51565b614a3d6080830184613efb565b9695505050505050565b6000606082019050614a5c60008301866149e5565b614a6960208301856149e5565b614a766040830184613e51565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614abf600283614a7e565b9150614aca82614a89565b600282019050919050565b6000819050919050565b614af0614aeb82614108565b614ad5565b82525050565b6000614b0182614ab2565b9150614b0d8285614adf565b602082019150614b1d8284614adf565b6020820191508190509392505050565b6000608082019050614b4260008301876149e5565b614b4f6020830186613f5f565b614b5c60408301856149e5565b614b6960608301846149e5565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000614ba8601183613c92565b9150614bb382614b72565b602082019050919050565b60006020820190508181036000830152614bd781614b9b565b9050919050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000614c14600e83613c92565b9150614c1f82614bde565b602082019050919050565b60006020820190508181036000830152614c4381614c07565b9050919050565b7f4e6577206f776e6572206973205a45524f000000000000000000000000000000600082015250565b6000614c80601183613c92565b9150614c8b82614c4a565b602082019050919050565b60006020820190508181036000830152614caf81614c73565b9050919050565b7f45524332303a204e6f74206f776e657220213d20616464726573732830290000600082015250565b6000614cec601e83613c92565b9150614cf782614cb6565b602082019050919050565b60006020820190508181036000830152614d1b81614cdf565b9050919050565b7f45524332303a204e6f74207370656e64657220213d2061646472657373283029600082015250565b6000614d58602083613c92565b9150614d6382614d22565b602082019050919050565b60006020820190508181036000830152614d8781614d4b565b9050919050565b7f45524332303a20496e76616c69642066726f6d20616464726573730000000000600082015250565b6000614dc4601b83613c92565b9150614dcf82614d8e565b602082019050919050565b60006020820190508181036000830152614df381614db7565b9050919050565b7f45524332303a20496e76616c696420746f206164647265737300000000000000600082015250565b6000614e30601983613c92565b9150614e3b82614dfa565b602082019050919050565b60006020820190508181036000830152614e5f81614e23565b9050919050565b7f45524332303a2066726f6d20697320626c61636b206c69737400000000000000600082015250565b6000614e9c601983613c92565b9150614ea782614e66565b602082019050919050565b60006020820190508181036000830152614ecb81614e8f565b9050919050565b7f45524332303a20746f20697320626c61636b206c697374000000000000000000600082015250565b6000614f08601783613c92565b9150614f1382614ed2565b602082019050919050565b60006020820190508181036000830152614f3781614efb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614f74601683613c92565b9150614f7f82614f3e565b602082019050919050565b60006020820190508181036000830152614fa381614f67565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178546f6b656e416d6f756e7450657254786e2e0000000000000000000000602082015250565b6000615006603583613c92565b915061501182614faa565b604082019050919050565b6000602082019050818103600083015261503581614ff9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615072601383613c92565b915061507d8261503c565b602082019050919050565b600060208201905081810360008301526150a181615065565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178546f6b656e416d6f756e7450657254786e2e00000000000000000000602082015250565b6000615104603683613c92565b915061510f826150a8565b604082019050919050565b60006020820190508181036000830152615133816150f7565b9050919050565b60008151905061514981613f89565b92915050565b60006020828403121561516557615164613d42565b5b60006151738482850161513a565b91505092915050565b600060c0820190506151916000830189613efb565b61519e6020830188613efb565b6151ab6040830187613efb565b6151b86060830186613e51565b6151c56080830185613e51565b6151d260a0830184613e51565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b6000615213601483613c92565b915061521e826151dd565b602082019050919050565b6000602082019050818103600083015261524281615206565b9050919050565b7f53656c6c2064697361626c656420696e207468652073616d6520626c6f636b00600082015250565b600061527f601f83613c92565b915061528a82615249565b602082019050919050565b600060208201905081810360008301526152ae81615272565b9050919050565b60006152c082613da5565b91506152cb83613da5565b9250828210156152de576152dd61430a565b5b828203905092915050565b600081905092915050565b50565b60006153046000836152e9565b915061530f826152f4565b600082019050919050565b6000615325826152f7565b9150819050919050565b7f45524332303a204e6f742066726f6d20213d2061646472657373283029000000600082015250565b6000615365601d83613c92565b91506153708261532f565b602082019050919050565b6000602082019050818103600083015261539481615358565b9050919050565b7f45524332303a204e6f7420746f20213d20616464726573732830290000000000600082015250565b60006153d1601b83613c92565b91506153dc8261539b565b602082019050919050565b60006020820190508181036000830152615400816153c4565b9050919050565b7f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e74600082015250565b600061543d602083613c92565b915061544882615407565b602082019050919050565b6000602082019050818103600083015261546c81615430565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154e081613d79565b92915050565b6000602082840312156154fc576154fb613d42565b5b600061550a848285016154d1565b91505092915050565b6000819050919050565b600061553861553361552e84615513565b614062565b613da5565b9050919050565b6155488161551d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61558381613d67565b82525050565b6000615595838361557a565b60208301905092915050565b6000602082019050919050565b60006155b98261554e565b6155c38185615559565b93506155ce8361556a565b8060005b838110156155ff5781516155e68882615589565b97506155f1836155a1565b9250506001810190506155d2565b5085935050505092915050565b600060a0820190506156216000830188613e51565b61562e602083018761553f565b818103604083015261564081866155ae565b905061564f6060830185613efb565b61565c6080830184613e51565b969550505050505056fea2646970667358221220e70a39fd3541d0fb9435aeb17c7fbb76fa671db0241e5114692be3ccb14b688b64736f6c634300080a0033

Deployed Bytecode Sourcemap

15568:12941:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10992:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11580:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18340:116;;;;;;;;;;;;;:::i;:::-;;15887:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11313:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16068:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12344:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15685:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20116:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11212:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16417:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12977:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21938:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16191:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20863:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16384:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16231:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19897:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20544:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21178:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15757:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15998:61;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19492:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11429:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1457:103;;;;;;;;;;;;;:::i;:::-;;19805:84;;;;;;;;;;;;;:::i;:::-;;15928:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15717:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1174:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15965:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20007:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11100:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13271:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12783:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16454:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21297:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16125:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21614:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22246:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16350:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15642:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15802:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19673:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18464:1020;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22730:255;;;;;;;;;;;;;:::i;:::-;;15846:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12160:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16278:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16312:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1269:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22442:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10992:100;11046:13;11079:5;11072:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10992:100;:::o;11580:194::-;11688:4;11705:39;11714:12;:10;:12::i;:::-;11728:7;11737:6;11705:8;:39::i;:::-;11762:4;11755:11;;11580:194;;;;:::o;18340:116::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18414:4:::1;18397:14;;:21;;;;;;;;;;;;;;;;;;18444:4;18429:12;;:19;;;;;;;;;;;;;;;;;;18340:116::o:0;15887:32::-;;;;;;;;;;;;;:::o;11313:108::-;11374:7;11401:12;;11394:19;;11313:108;:::o;16068:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;12344:431::-;12475:4;12492:27;12502:4;12508:2;12512:6;12492:9;:27::i;:::-;12530:16;12549:11;:17;12561:4;12549:17;;;;;;;;;;;;;;;:31;12567:12;:10;:12::i;:::-;12549:31;;;;;;;;;;;;;;;;12530:50;;12611:6;12599:8;:18;;12591:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;12687:47;12696:4;12702:12;:10;:12::i;:::-;12727:6;12716:8;:17;12687:8;:47::i;:::-;12763:4;12756:11;;;12344:431;;;;;:::o;15685:23::-;;;;;;;;;;;;;:::o;20116:420::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20254:6:::1;20249:1;20233:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20232:28;;;;:::i;:::-;20222:6;:38;;20200:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20406:4;20401:1;20385:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20384:26;;;;:::i;:::-;20374:6;:36;;20352:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;20522:6;20501:18;:27;;;;20116:420:::0;:::o;11212:93::-;11270:5;11295:2;11288:9;;11212:93;:::o;16417:30::-;;;;:::o;12977:286::-;13088:4;13105:128;13128:12;:10;:12::i;:::-;13155:7;13214:8;13177:11;:25;13189:12;:10;:12::i;:::-;13177:25;;;;;;;;;;;;;;;:34;13203:7;13177:34;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;13105:8;:128::i;:::-;13251:4;13244:11;;12977:286;;;;:::o;21938:300::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22087:8:::1;;;;;;;;;;;22079:16;;:4;:16;;;;22057:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;22225:5;22191:25;:31;22217:4;22191:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21938:300:::0;;:::o;16191:33::-;;;;;;;;;;;;;:::o;20863:307::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21015:10:::1;:8;:10::i;:::-;21009:2;:16;;;;:::i;:::-;21000:4;20995:1;20979:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20978:26;;;;:::i;:::-;20977:49;;;;:::i;:::-;20967:6;:59;;20945:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;21151:10;:8;:10::i;:::-;21145:2;:16;;;;:::i;:::-;21135:6;:27;;;;:::i;:::-;21112:20;:50;;;;20863:307:::0;:::o;16384:26::-;;;;:::o;16231:38::-;;;;;;;;;;;;;:::o;19897:102::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19987:4:::1;19965:19;;:26;;;;;;;;;;;;;;;;;;19897:102:::0;:::o;20544:311::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20694:10:::1;:8;:10::i;:::-;20688:2;:16;;;;:::i;:::-;20679:4;20674:1;20658:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20657:26;;;;:::i;:::-;20656:49;;;;:::i;:::-;20646:6;:59;;20624:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;20836:10;:8;:10::i;:::-;20830:2;:16;;;;:::i;:::-;20820:6;:27;;;;:::i;:::-;20794:23;:53;;;;20544:311:::0;:::o;21178:111::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21275:6:::1;21257:9;:15;21267:4;21257:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;21178:111:::0;;:::o;15757:38::-;;;;:::o;15998:61::-;;;;;;;;;;;;;;;;;;;;;;:::o;19492:173::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19652:5:::1;19614:29;:35;19644:4;19614:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;19492:173:::0;;:::o;11429:143::-;11519:7;11546:9;:18;11556:7;11546:18;;;;;;;;;;;;;;;;11539:25;;11429:143;;;:::o;1457:103::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1522:30:::1;1549:1;1522:18;:30::i;:::-;1457:103::o:0;19805:84::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19876:5:::1;19859:14;;:22;;;;;;;;;;;;;;;;;;19805:84::o:0;15928:30::-;;;;;;;;;;;;;:::o;15717:33::-;;;;:::o;1174:87::-;1220:7;1247:6;;;;;;;;;;;1240:13;;1174:87;:::o;15965:24::-;;;;;;;;;;;;;:::o;20007:101::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20093:7:::1;20078:12;;:22;;;;;;;;;;;;;;;;;;20007:101:::0;:::o;11100:104::-;11156:13;11189:7;11182:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11100:104;:::o;13271:385::-;13382:4;13399:16;13418:11;:25;13430:12;:10;:12::i;:::-;13418:25;;;;;;;;;;;;;;;:34;13444:7;13418:34;;;;;;;;;;;;;;;;13399:53;;13483:8;13471;:20;;13463:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;13563:52;13572:12;:10;:12::i;:::-;13586:7;13606:8;13595;:19;13563:8;:52::i;:::-;13644:4;13637:11;;;13271:385;;;;:::o;12783:186::-;12887:4;12904:35;12914:12;:10;:12::i;:::-;12928:2;12932:6;12904:9;:35::i;:::-;12957:4;12950:11;;12783:186;;;;:::o;16454:24::-;;;;:::o;21297:309::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21433:12:::1;21415:15;:30;;;;21468:9;21456;:21;;;;21520:9;;21502:15;;:27;;;;:::i;:::-;21488:11;:41;;;;21563:2;21548:11;;:17;;21540:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21297:309:::0;;:::o;16125:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;21614:316::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21752:12:::1;21733:16;:31;;;;21788:9;21775:10;:22;;;;21842:10;;21823:16;;:29;;;;:::i;:::-;21808:12;:44;;;;21887:2;21871:12;;:18;;21863:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;21614:316:::0;;:::o;22246:188::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22358:3:::1;22332:30;;:14;:30;;;;22324:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22412:14;22398:11;;:28;;;;;;;;;;;;;;;;;;22246:188:::0;:::o;16350:25::-;;;;:::o;15642:36::-;;;;;;;;;;;;;:::o;15802:35::-;;;;:::o;19673:124::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19784:5:::1;19756:16;:25;19773:7;19756:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19673:124:::0;;:::o;18464:1020::-;18550:18;18624:135;18788:22;;;;;;;;;;;;;;;;;18778:33;;;;;;18840:10;;;;;;;;;;;;;;;;;18830:21;;;;;;18870:13;18910:4;18595:335;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18571:370;;;;;;18550:391;;18952:18;19026:49;19104:23;;;;;;;;;;;;;;;;;19094:34;;;;;;19155:1;18997:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18973:210;;;;;;18952:231;;19194:14;19264:10;19276;19235:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19211:87;;;;;;19194:104;;19311:14;19328:26;19338:6;19346:1;19349;19352;19328:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19311:43;;19383:7;:5;:7::i;:::-;19373:17;;:6;:17;;;19365:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;19442:4;19425:14;;:21;;;;;;;;;;;;;;;;;;19472:4;19457:12;;:19;;;;;;;;;;;;;;;;;;18539:945;;;;18464:1020;;;:::o;22730:255::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22785:20:::1;22808:24;22826:4;22808:9;:24::i;:::-;22785:47;;22866:1;22851:12;:16;22843:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;22911:4;22899:9;;:16;;;;;;;;;;;;;;;;;;22926:23;22936:12;22926:9;:23::i;:::-;22972:5;22960:9;;:17;;;;;;;;;;;;;;;;;;22774:211;22730:255::o:0;15846:34::-;;;;;;;;;;;;;:::o;12160:176::-;12274:7;12301:11;:18;12313:5;12301:18;;;;;;;;;;;;;;;:27;12320:7;12301:27;;;;;;;;;;;;;;;;12294:34;;12160:176;;;;:::o;16278:27::-;;;;:::o;16312:31::-;;;;:::o;1269:180::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1378:1:::1;1358:22;;:8;:22;;;;1350:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;1413:28;1432:8;1413:18;:28::i;:::-;1269:180:::0;:::o;22442:280::-;1116:12;:10;:12::i;:::-;1105:23;;:7;:5;:7::i;:::-;:23;;;1097:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22508:20:::1;22531:24;22549:4;22531:9;:24::i;:::-;22508:47;;22583:1;22574:6;:10;:36;;;;;22598:12;22588:6;:22;;22574:36;22566:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22654:4;22642:9;;:16;;;;;;;;;;;;;;;;;;22669:17;22679:6;22669:9;:17::i;:::-;22709:5;22697:9;;:17;;;;;;;;;;;;;;;;;;22497:225;22442:280:::0;:::o;586:98::-;639:7;666:10;659:17;;586:98;:::o;11782:370::-;11935:1;11918:19;;:5;:19;;;;11910:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;12010:1;11991:21;;:7;:21;;;;11983:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12090:6;12060:11;:18;12072:5;12060:18;;;;;;;;;;;;;;;:27;12079:7;12060:27;;;;;;;;;;;;;;;:36;;;;12128:7;12112:32;;12121:5;12112:32;;;12137:6;12112:32;;;;;;:::i;:::-;;;;;;;;11782:370;;;:::o;23949:3838::-;24097:1;24081:18;;:4;:18;;;;24073:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24164:1;24150:16;;:2;:16;;;;24142:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24216:9;:15;24226:4;24216:15;;;;;;;;;;;;;;;;;;;;;;;;;24215:16;24207:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24281:9;:13;24291:2;24281:13;;;;;;;;;;;;;;;;;;;;;;;;;24280:14;24272:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;24349:1;24339:6;:11;24335:93;;;24367:28;24383:4;24389:2;24393:1;24367:15;:28::i;:::-;24410:7;;24335:93;24440:12;24455:25;:31;24481:4;24455:31;;;;;;;;;;;;;;;;;;;;;;;;;24440:46;;24497:13;24513:25;:29;24539:2;24513:29;;;;;;;;;;;;;;;;;;;;;;;;;24497:45;;24559:14;;;;;;;;;;;24555:1471;;;24620:7;:5;:7::i;:::-;24612:15;;:4;:15;;;;:49;;;;;24654:7;:5;:7::i;:::-;24648:13;;:2;:13;;;;24612:49;:86;;;;;24696:1;24682:16;;:2;:16;;;;24612:86;:128;;;;;24733:6;24719:21;;:2;:21;;;;24612:128;:159;;;;;24762:9;;;;;;;;;;;24761:10;24612:159;24590:1425;;;24811:14;;;;;;;;;;;24806:218;;24884:16;:22;24901:4;24884:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;24910:16;:20;24927:2;24910:20;;;;;;;;;;;;;;;;;;;;;;;;;24884:46;24850:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24806:218;25048:7;:45;;;;;25060:29;:33;25090:2;25060:33;;;;;;;;;;;;;;;;;;;;;;;;;25059:34;25048:45;25044:956;;;25162:20;;25152:6;:30;;25118:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25370:23;;25353:13;25363:2;25353:9;:13::i;:::-;25344:6;:22;;;;:::i;:::-;:49;;25310:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25044:956;;;25494:8;:48;;;;;25507:29;:35;25537:4;25507:35;;;;;;;;;;;;;;;;;;;;;;;;;25506:36;25494:48;25490:510;;;25611:20;;25601:6;:30;;25567:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25490:510;;;25768:29;:33;25798:2;25768:33;;;;;;;;;;;;;;;;;;;;;;;;;25763:237;;25886:23;;25869:13;25879:2;25869:9;:13::i;:::-;25860:6;:22;;;;:::i;:::-;:49;;25826:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25763:237;25490:510;25044:956;24590:1425;24555:1471;26079:1;26056:25;;:11;;;;;;;;;;;:25;;;;:92;;;;;26111:11;;;;;;;;;;;26098:35;;;26142:4;26098:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26056:92;26038:459;;;26175:10;26201:11;;;;;;;;;;;26188:31;;;26238:4;26261:2;26290:8;;;;;;;;;;;26318:23;;26360:20;;26399:18;;26188:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26175:257;;26455:5;26447:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;26160:337;26038:459;26513:8;:33;;;;;26541:4;26525:21;;:4;:21;;;;26513:33;:56;;;;;26550:19;;;;;;;;;;;26513:56;26509:293;;;26635:1;26612:13;:19;26626:4;26612:19;;;;;;;;;;;;;;;;:24;:62;;;;26662:12;26640:13;:19;26654:4;26640:19;;;;;;;;;;;;;;;;:34;26612:62;26586:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;26778:12;26756:13;:19;26770:4;26756:19;;;;;;;;;;;;;;;:34;;;;26509:293;26814:20;26837:24;26855:4;26837:9;:24::i;:::-;26814:47;;26872:12;26903:18;;26887:12;:34;;26872:49;;26950:12;;;;;;;;;;;:36;;;;;26979:7;26950:36;:63;;;;;27004:9;;;;;;;;;;;27003:10;26950:63;:88;;;;;27031:7;27030:8;26950:88;:128;;;;;27056:16;:22;27073:4;27056:22;;;;;;;;;;;;;;;;;;;;;;;;;27055:23;26950:128;:166;;;;;27096:16;:20;27113:2;27096:20;;;;;;;;;;;;;;;;;;;;;;;;;27095:21;26950:166;26932:296;;;27155:4;27143:9;;:16;;;;;;;;;;;;;;;;;;27174:10;:8;:10::i;:::-;27211:5;27199:9;;:17;;;;;;;;;;;;;;;;;;26932:296;27240:9;27253;;;;;;;;;;;27252:10;27240:22;;27277:16;:22;27294:4;27277:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;27303:16;:20;27320:2;27303:20;;;;;;;;;;;;;;;;;;;;;;;;;27277:46;27273:64;;;27332:5;27325:12;;27273:64;27350:12;27381:4;27377:357;;;27406:8;:28;;;;;27433:1;27418:12;;:16;27406:28;27402:221;;;27462:33;27491:3;27462:24;27473:12;;27462:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27455:40;;27402:221;;;27521:7;:26;;;;;27546:1;27532:11;;:15;27521:26;27517:106;;;27575:32;27603:3;27575:23;27586:11;;27575:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27568:39;;27517:106;27402:221;27648:1;27641:4;:8;27637:56;;;27651:42;27667:4;27681;27688;27651:15;:42::i;:::-;27637:56;27718:4;27708:14;;;;;:::i;:::-;;;27377:357;27746:33;27762:4;27768:2;27772:6;27746:15;:33::i;:::-;24062:3725;;;;;;23949:3838;;;;:::o;1568:191::-;1642:16;1661:6;;;;;;;;;;;1642:25;;1687:8;1678:6;;:17;;;;;;;;;;;;;;;;;;1742:8;1711:40;;1732:8;1711:40;;;;;;;;;;;;1631:128;1568:191;:::o;23279:662::-;23333:12;23356:22;23381:21;23356:46;;23413:24;23430:6;23413:16;:24::i;:::-;23450:18;23471:41;23497:14;23471:21;:25;;:41;;;;:::i;:::-;23450:62;;23523:14;23552:10;;23540:9;;:22;;;;:::i;:::-;23523:39;;23573:16;23606:12;;23592:11;;:26;;;;:::i;:::-;23573:45;;23643:1;23633:6;:11;;:28;;;;;23660:1;23648:8;:13;;23633:28;23629:191;;;23678:17;23698:36;23725:8;23698:22;23713:6;23698:10;:14;;:22;;;;:::i;:::-;:26;;:36;;;;:::i;:::-;23678:56;;23771:9;;;;;;;;;;;23763:23;;23794:9;23763:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23749:59;;;;;23663:157;23629:191;23854:15;;;;;;;;;;;23846:29;;23897:21;23846:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23832:101;;;;;23322:619;;;;;23279:662;:::o;14762:641::-;14909:1;14893:18;;:4;:18;;;;14885:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;14978:1;14964:16;;:2;:16;;;;14956:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;15023:38;15044:4;15050:2;15054:6;15023:20;:38::i;:::-;15072:19;15094:9;:15;15104:4;15094:15;;;;;;;;;;;;;;;;15072:37;;15143:6;15128:11;:21;;15120:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;15254:6;15240:11;:20;15222:9;:15;15232:4;15222:15;;;;;;;;;;;;;;;:38;;;;15299:6;15282:9;:13;15292:2;15282:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;15336:2;15321:26;;15330:4;15321:26;;;15340:6;15321:26;;;;;;:::i;:::-;;;;;;;;15358:37;15378:4;15384:2;15388:6;15358:19;:37::i;:::-;14874:529;14762:641;;;:::o;22993:278::-;23032:20;23055:24;23073:4;23055:9;:24::i;:::-;23032:47;;23110:1;23094:12;:17;23090:30;;;23113:7;;;23090:30;23172:2;23151:18;;:23;;;;:::i;:::-;23136:12;:38;23132:95;;;23225:2;23204:18;;:23;;;;:::i;:::-;23189:38;;23132:95;23240:23;23250:12;23240:9;:23::i;:::-;23021:250;22993:278;:::o;1790:98::-;1848:7;1879:1;1875;:5;;;;:::i;:::-;1868:12;;1790:98;;;;:::o;2199:::-;2257:7;2288:1;2284;:5;;;;:::i;:::-;2277:12;;2199:98;;;;:::o;27947:559::-;28068:21;28106:1;28092:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28068:40;;28137:4;28119;28124:1;28119:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28163:10;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28153:4;28158:1;28153:7;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;28193:52;28210:4;28225:10;;;;;;;;;;;28238:6;28193:8;:52::i;:::-;28284:10;;;;;;;;;;;:61;;;28360:6;28381:1;28425:4;28452;28472:15;28284:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27997:509;27947:559;:::o;2894:98::-;2952:7;2983:1;2979;:5;;;;:::i;:::-;2972:12;;2894:98;;;;:::o;14629:125::-;;;;:::o;15411:150::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:619::-;4258:6;4266;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:119;;;4329:79;;:::i;:::-;4291:119;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:53;4647:7;4638:6;4627:9;4623:22;4602:53;:::i;:::-;4592:63;;4547:118;4704:2;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4675:118;4181:619;;;;;:::o;4806:118::-;4893:24;4911:5;4893:24;:::i;:::-;4888:3;4881:37;4806:118;;:::o;4930:222::-;5023:4;5061:2;5050:9;5046:18;5038:26;;5074:71;5142:1;5131:9;5127:17;5118:6;5074:71;:::i;:::-;4930:222;;;;:::o;5158:329::-;5217:6;5266:2;5254:9;5245:7;5241:23;5237:32;5234:119;;;5272:79;;:::i;:::-;5234:119;5392:1;5417:53;5462:7;5453:6;5442:9;5438:22;5417:53;:::i;:::-;5407:63;;5363:117;5158:329;;;;:::o;5493:86::-;5528:7;5568:4;5561:5;5557:16;5546:27;;5493:86;;;:::o;5585:112::-;5668:22;5684:5;5668:22;:::i;:::-;5663:3;5656:35;5585:112;;:::o;5703:214::-;5792:4;5830:2;5819:9;5815:18;5807:26;;5843:67;5907:1;5896:9;5892:17;5883:6;5843:67;:::i;:::-;5703:214;;;;:::o;5923:116::-;5993:21;6008:5;5993:21;:::i;:::-;5986:5;5983:32;5973:60;;6029:1;6026;6019:12;5973:60;5923:116;:::o;6045:133::-;6088:5;6126:6;6113:20;6104:29;;6142:30;6166:5;6142:30;:::i;:::-;6045:133;;;;:::o;6184:468::-;6249:6;6257;6306:2;6294:9;6285:7;6281:23;6277:32;6274:119;;;6312:79;;:::i;:::-;6274:119;6432:1;6457:53;6502:7;6493:6;6482:9;6478:22;6457:53;:::i;:::-;6447:63;;6403:117;6559:2;6585:50;6627:7;6618:6;6607:9;6603:22;6585:50;:::i;:::-;6575:60;;6530:115;6184:468;;;;;:::o;6658:323::-;6714:6;6763:2;6751:9;6742:7;6738:23;6734:32;6731:119;;;6769:79;;:::i;:::-;6731:119;6889:1;6914:50;6956:7;6947:6;6936:9;6932:22;6914:50;:::i;:::-;6904:60;;6860:114;6658:323;;;;:::o;6987:474::-;7055:6;7063;7112:2;7100:9;7091:7;7087:23;7083:32;7080:119;;;7118:79;;:::i;:::-;7080:119;7238:1;7263:53;7308:7;7299:6;7288:9;7284:22;7263:53;:::i;:::-;7253:63;;7209:117;7365:2;7391:53;7436:7;7427:6;7416:9;7412:22;7391:53;:::i;:::-;7381:63;;7336:118;6987:474;;;;;:::o;7467:60::-;7495:3;7516:5;7509:12;;7467:60;;;:::o;7533:142::-;7583:9;7616:53;7634:34;7643:24;7661:5;7643:24;:::i;:::-;7634:34;:::i;:::-;7616:53;:::i;:::-;7603:66;;7533:142;;;:::o;7681:126::-;7731:9;7764:37;7795:5;7764:37;:::i;:::-;7751:50;;7681:126;;;:::o;7813:152::-;7889:9;7922:37;7953:5;7922:37;:::i;:::-;7909:50;;7813:152;;;:::o;7971:183::-;8084:63;8141:5;8084:63;:::i;:::-;8079:3;8072:76;7971:183;;:::o;8160:274::-;8279:4;8317:2;8306:9;8302:18;8294:26;;8330:97;8424:1;8413:9;8409:17;8400:6;8330:97;:::i;:::-;8160:274;;;;:::o;8440:118::-;8511:22;8527:5;8511:22;:::i;:::-;8504:5;8501:33;8491:61;;8548:1;8545;8538:12;8491:61;8440:118;:::o;8564:135::-;8608:5;8646:6;8633:20;8624:29;;8662:31;8687:5;8662:31;:::i;:::-;8564:135;;;;:::o;8705:77::-;8742:7;8771:5;8760:16;;8705:77;;;:::o;8788:122::-;8861:24;8879:5;8861:24;:::i;:::-;8854:5;8851:35;8841:63;;8900:1;8897;8890:12;8841:63;8788:122;:::o;8916:139::-;8962:5;9000:6;8987:20;8978:29;;9016:33;9043:5;9016:33;:::i;:::-;8916:139;;;;:::o;9061:615::-;9136:6;9144;9152;9201:2;9189:9;9180:7;9176:23;9172:32;9169:119;;;9207:79;;:::i;:::-;9169:119;9327:1;9352:51;9395:7;9386:6;9375:9;9371:22;9352:51;:::i;:::-;9342:61;;9298:115;9452:2;9478:53;9523:7;9514:6;9503:9;9499:22;9478:53;:::i;:::-;9468:63;;9423:118;9580:2;9606:53;9651:7;9642:6;9631:9;9627:22;9606:53;:::i;:::-;9596:63;;9551:118;9061:615;;;;;:::o;9682:474::-;9750:6;9758;9807:2;9795:9;9786:7;9782:23;9778:32;9775:119;;;9813:79;;:::i;:::-;9775:119;9933:1;9958:53;10003:7;9994:6;9983:9;9979:22;9958:53;:::i;:::-;9948:63;;9904:117;10060:2;10086:53;10131:7;10122:6;10111:9;10107:22;10086:53;:::i;:::-;10076:63;;10031:118;9682:474;;;;;:::o;10162:180::-;10210:77;10207:1;10200:88;10307:4;10304:1;10297:15;10331:4;10328:1;10321:15;10348:320;10392:6;10429:1;10423:4;10419:12;10409:22;;10476:1;10470:4;10466:12;10497:18;10487:81;;10553:4;10545:6;10541:17;10531:27;;10487:81;10615:2;10607:6;10604:14;10584:18;10581:38;10578:84;;;10634:18;;:::i;:::-;10578:84;10399:269;10348:320;;;:::o;10674:163::-;10814:15;10810:1;10802:6;10798:14;10791:39;10674:163;:::o;10843:366::-;10985:3;11006:67;11070:2;11065:3;11006:67;:::i;:::-;10999:74;;11082:93;11171:3;11082:93;:::i;:::-;11200:2;11195:3;11191:12;11184:19;;10843:366;;;:::o;11215:419::-;11381:4;11419:2;11408:9;11404:18;11396:26;;11468:9;11462:4;11458:20;11454:1;11443:9;11439:17;11432:47;11496:131;11622:4;11496:131;:::i;:::-;11488:139;;11215:419;;;:::o;11640:179::-;11780:31;11776:1;11768:6;11764:14;11757:55;11640:179;:::o;11825:366::-;11967:3;11988:67;12052:2;12047:3;11988:67;:::i;:::-;11981:74;;12064:93;12153:3;12064:93;:::i;:::-;12182:2;12177:3;12173:12;12166:19;;11825:366;;;:::o;12197:419::-;12363:4;12401:2;12390:9;12386:18;12378:26;;12450:9;12444:4;12440:20;12436:1;12425:9;12421:17;12414:47;12478:131;12604:4;12478:131;:::i;:::-;12470:139;;12197:419;;;:::o;12622:180::-;12670:77;12667:1;12660:88;12767:4;12764:1;12757:15;12791:4;12788:1;12781:15;12808:348;12848:7;12871:20;12889:1;12871:20;:::i;:::-;12866:25;;12905:20;12923:1;12905:20;:::i;:::-;12900:25;;13093:1;13025:66;13021:74;13018:1;13015:81;13010:1;13003:9;12996:17;12992:105;12989:131;;;13100:18;;:::i;:::-;12989:131;13148:1;13145;13141:9;13130:20;;12808:348;;;;:::o;13162:180::-;13210:77;13207:1;13200:88;13307:4;13304:1;13297:15;13331:4;13328:1;13321:15;13348:185;13388:1;13405:20;13423:1;13405:20;:::i;:::-;13400:25;;13439:20;13457:1;13439:20;:::i;:::-;13434:25;;13478:1;13468:35;;13483:18;;:::i;:::-;13468:35;13525:1;13522;13518:9;13513:14;;13348:185;;;;:::o;13539:240::-;13679:34;13675:1;13667:6;13663:14;13656:58;13748:23;13743:2;13735:6;13731:15;13724:48;13539:240;:::o;13785:366::-;13927:3;13948:67;14012:2;14007:3;13948:67;:::i;:::-;13941:74;;14024:93;14113:3;14024:93;:::i;:::-;14142:2;14137:3;14133:12;14126:19;;13785:366;;;:::o;14157:419::-;14323:4;14361:2;14350:9;14346:18;14338:26;;14410:9;14404:4;14400:20;14396:1;14385:9;14381:17;14374:47;14438:131;14564:4;14438:131;:::i;:::-;14430:139;;14157:419;;;:::o;14582:239::-;14722:34;14718:1;14710:6;14706:14;14699:58;14791:22;14786:2;14778:6;14774:15;14767:47;14582:239;:::o;14827:366::-;14969:3;14990:67;15054:2;15049:3;14990:67;:::i;:::-;14983:74;;15066:93;15155:3;15066:93;:::i;:::-;15184:2;15179:3;15175:12;15168:19;;14827:366;;;:::o;15199:419::-;15365:4;15403:2;15392:9;15388:18;15380:26;;15452:9;15446:4;15442:20;15438:1;15427:9;15423:17;15416:47;15480:131;15606:4;15480:131;:::i;:::-;15472:139;;15199:419;;;:::o;15624:305::-;15664:3;15683:20;15701:1;15683:20;:::i;:::-;15678:25;;15717:20;15735:1;15717:20;:::i;:::-;15712:25;;15871:1;15803:66;15799:74;15796:1;15793:81;15790:107;;;15877:18;;:::i;:::-;15790:107;15921:1;15918;15914:9;15907:16;;15624:305;;;;:::o;15935:244::-;16075:34;16071:1;16063:6;16059:14;16052:58;16144:27;16139:2;16131:6;16127:15;16120:52;15935:244;:::o;16185:366::-;16327:3;16348:67;16412:2;16407:3;16348:67;:::i;:::-;16341:74;;16424:93;16513:3;16424:93;:::i;:::-;16542:2;16537:3;16533:12;16526:19;;16185:366;;;:::o;16557:419::-;16723:4;16761:2;16750:9;16746:18;16738:26;;16810:9;16804:4;16800:20;16796:1;16785:9;16781:17;16774:47;16838:131;16964:4;16838:131;:::i;:::-;16830:139;;16557:419;;;:::o;16982:102::-;17024:8;17071:5;17068:1;17064:13;17043:34;;16982:102;;;:::o;17090:848::-;17151:5;17158:4;17182:6;17173:15;;17206:5;17197:14;;17220:712;17241:1;17231:8;17228:15;17220:712;;;17336:4;17331:3;17327:14;17321:4;17318:24;17315:50;;;17345:18;;:::i;:::-;17315:50;17395:1;17385:8;17381:16;17378:451;;;17810:4;17803:5;17799:16;17790:25;;17378:451;17860:4;17854;17850:15;17842:23;;17890:32;17913:8;17890:32;:::i;:::-;17878:44;;17220:712;;;17090:848;;;;;;;:::o;17944:1073::-;17998:5;18189:8;18179:40;;18210:1;18201:10;;18212:5;;18179:40;18238:4;18228:36;;18255:1;18246:10;;18257:5;;18228:36;18324:4;18372:1;18367:27;;;;18408:1;18403:191;;;;18317:277;;18367:27;18385:1;18376:10;;18387:5;;;18403:191;18448:3;18438:8;18435:17;18432:43;;;18455:18;;:::i;:::-;18432:43;18504:8;18501:1;18497:16;18488:25;;18539:3;18532:5;18529:14;18526:40;;;18546:18;;:::i;:::-;18526:40;18579:5;;;18317:277;;18703:2;18693:8;18690:16;18684:3;18678:4;18675:13;18671:36;18653:2;18643:8;18640:16;18635:2;18629:4;18626:12;18622:35;18606:111;18603:246;;;18759:8;18753:4;18749:19;18740:28;;18794:3;18787:5;18784:14;18781:40;;;18801:18;;:::i;:::-;18781:40;18834:5;;18603:246;18874:42;18912:3;18902:8;18896:4;18893:1;18874:42;:::i;:::-;18859:57;;;;18948:4;18943:3;18939:14;18932:5;18929:25;18926:51;;;18957:18;;:::i;:::-;18926:51;19006:4;18999:5;18995:16;18986:25;;17944:1073;;;;;;:::o;19023:281::-;19081:5;19105:23;19123:4;19105:23;:::i;:::-;19097:31;;19149:25;19165:8;19149:25;:::i;:::-;19137:37;;19193:104;19230:66;19220:8;19214:4;19193:104;:::i;:::-;19184:113;;19023:281;;;;:::o;19310:234::-;19450:34;19446:1;19438:6;19434:14;19427:58;19519:17;19514:2;19506:6;19502:15;19495:42;19310:234;:::o;19550:366::-;19692:3;19713:67;19777:2;19772:3;19713:67;:::i;:::-;19706:74;;19789:93;19878:3;19789:93;:::i;:::-;19907:2;19902:3;19898:12;19891:19;;19550:366;;;:::o;19922:419::-;20088:4;20126:2;20115:9;20111:18;20103:26;;20175:9;20169:4;20165:20;20161:1;20150:9;20146:17;20139:47;20203:131;20329:4;20203:131;:::i;:::-;20195:139;;19922:419;;;:::o;20347:237::-;20487:34;20483:1;20475:6;20471:14;20464:58;20556:20;20551:2;20543:6;20539:15;20532:45;20347:237;:::o;20590:366::-;20732:3;20753:67;20817:2;20812:3;20753:67;:::i;:::-;20746:74;;20829:93;20918:3;20829:93;:::i;:::-;20947:2;20942:3;20938:12;20931:19;;20590:366;;;:::o;20962:419::-;21128:4;21166:2;21155:9;21151:18;21143:26;;21215:9;21209:4;21205:20;21201:1;21190:9;21186:17;21179:47;21243:131;21369:4;21243:131;:::i;:::-;21235:139;;20962:419;;;:::o;21387:181::-;21527:33;21523:1;21515:6;21511:14;21504:57;21387:181;:::o;21574:366::-;21716:3;21737:67;21801:2;21796:3;21737:67;:::i;:::-;21730:74;;21813:93;21902:3;21813:93;:::i;:::-;21931:2;21926:3;21922:12;21915:19;;21574:366;;;:::o;21946:419::-;22112:4;22150:2;22139:9;22135:18;22127:26;;22199:9;22193:4;22189:20;22185:1;22174:9;22170:17;22163:47;22227:131;22353:4;22227:131;:::i;:::-;22219:139;;21946:419;;;:::o;22371:178::-;22511:30;22507:1;22499:6;22495:14;22488:54;22371:178;:::o;22555:366::-;22697:3;22718:67;22782:2;22777:3;22718:67;:::i;:::-;22711:74;;22794:93;22883:3;22794:93;:::i;:::-;22912:2;22907:3;22903:12;22896:19;;22555:366;;;:::o;22927:419::-;23093:4;23131:2;23120:9;23116:18;23108:26;;23180:9;23174:4;23170:20;23166:1;23155:9;23151:17;23144:47;23208:131;23334:4;23208:131;:::i;:::-;23200:139;;22927:419;;;:::o;23352:170::-;23492:22;23488:1;23480:6;23476:14;23469:46;23352:170;:::o;23528:366::-;23670:3;23691:67;23755:2;23750:3;23691:67;:::i;:::-;23684:74;;23767:93;23856:3;23767:93;:::i;:::-;23885:2;23880:3;23876:12;23869:19;;23528:366;;;:::o;23900:419::-;24066:4;24104:2;24093:9;24089:18;24081:26;;24153:9;24147:4;24143:20;24139:1;24128:9;24124:17;24117:47;24181:131;24307:4;24181:131;:::i;:::-;24173:139;;23900:419;;;:::o;24325:118::-;24412:24;24430:5;24412:24;:::i;:::-;24407:3;24400:37;24325:118;;:::o;24449:664::-;24654:4;24692:3;24681:9;24677:19;24669:27;;24706:71;24774:1;24763:9;24759:17;24750:6;24706:71;:::i;:::-;24787:72;24855:2;24844:9;24840:18;24831:6;24787:72;:::i;:::-;24869;24937:2;24926:9;24922:18;24913:6;24869:72;:::i;:::-;24951;25019:2;25008:9;25004:18;24995:6;24951:72;:::i;:::-;25033:73;25101:3;25090:9;25086:19;25077:6;25033:73;:::i;:::-;24449:664;;;;;;;;:::o;25119:442::-;25268:4;25306:2;25295:9;25291:18;25283:26;;25319:71;25387:1;25376:9;25372:17;25363:6;25319:71;:::i;:::-;25400:72;25468:2;25457:9;25453:18;25444:6;25400:72;:::i;:::-;25482;25550:2;25539:9;25535:18;25526:6;25482:72;:::i;:::-;25119:442;;;;;;:::o;25567:148::-;25669:11;25706:3;25691:18;;25567:148;;;;:::o;25721:214::-;25861:66;25857:1;25849:6;25845:14;25838:90;25721:214;:::o;25941:400::-;26101:3;26122:84;26204:1;26199:3;26122:84;:::i;:::-;26115:91;;26215:93;26304:3;26215:93;:::i;:::-;26333:1;26328:3;26324:11;26317:18;;25941:400;;;:::o;26347:79::-;26386:7;26415:5;26404:16;;26347:79;;;:::o;26432:157::-;26537:45;26557:24;26575:5;26557:24;:::i;:::-;26537:45;:::i;:::-;26532:3;26525:58;26432:157;;:::o;26595:663::-;26836:3;26858:148;27002:3;26858:148;:::i;:::-;26851:155;;27016:75;27087:3;27078:6;27016:75;:::i;:::-;27116:2;27111:3;27107:12;27100:19;;27129:75;27200:3;27191:6;27129:75;:::i;:::-;27229:2;27224:3;27220:12;27213:19;;27249:3;27242:10;;26595:663;;;;;:::o;27264:545::-;27437:4;27475:3;27464:9;27460:19;27452:27;;27489:71;27557:1;27546:9;27542:17;27533:6;27489:71;:::i;:::-;27570:68;27634:2;27623:9;27619:18;27610:6;27570:68;:::i;:::-;27648:72;27716:2;27705:9;27701:18;27692:6;27648:72;:::i;:::-;27730;27798:2;27787:9;27783:18;27774:6;27730:72;:::i;:::-;27264:545;;;;;;;:::o;27815:167::-;27955:19;27951:1;27943:6;27939:14;27932:43;27815:167;:::o;27988:366::-;28130:3;28151:67;28215:2;28210:3;28151:67;:::i;:::-;28144:74;;28227:93;28316:3;28227:93;:::i;:::-;28345:2;28340:3;28336:12;28329:19;;27988:366;;;:::o;28360:419::-;28526:4;28564:2;28553:9;28549:18;28541:26;;28613:9;28607:4;28603:20;28599:1;28588:9;28584:17;28577:47;28641:131;28767:4;28641:131;:::i;:::-;28633:139;;28360:419;;;:::o;28785:164::-;28925:16;28921:1;28913:6;28909:14;28902:40;28785:164;:::o;28955:366::-;29097:3;29118:67;29182:2;29177:3;29118:67;:::i;:::-;29111:74;;29194:93;29283:3;29194:93;:::i;:::-;29312:2;29307:3;29303:12;29296:19;;28955:366;;;:::o;29327:419::-;29493:4;29531:2;29520:9;29516:18;29508:26;;29580:9;29574:4;29570:20;29566:1;29555:9;29551:17;29544:47;29608:131;29734:4;29608:131;:::i;:::-;29600:139;;29327:419;;;:::o;29752:167::-;29892:19;29888:1;29880:6;29876:14;29869:43;29752:167;:::o;29925:366::-;30067:3;30088:67;30152:2;30147:3;30088:67;:::i;:::-;30081:74;;30164:93;30253:3;30164:93;:::i;:::-;30282:2;30277:3;30273:12;30266:19;;29925:366;;;:::o;30297:419::-;30463:4;30501:2;30490:9;30486:18;30478:26;;30550:9;30544:4;30540:20;30536:1;30525:9;30521:17;30514:47;30578:131;30704:4;30578:131;:::i;:::-;30570:139;;30297:419;;;:::o;30722:180::-;30862:32;30858:1;30850:6;30846:14;30839:56;30722:180;:::o;30908:366::-;31050:3;31071:67;31135:2;31130:3;31071:67;:::i;:::-;31064:74;;31147:93;31236:3;31147:93;:::i;:::-;31265:2;31260:3;31256:12;31249:19;;30908:366;;;:::o;31280:419::-;31446:4;31484:2;31473:9;31469:18;31461:26;;31533:9;31527:4;31523:20;31519:1;31508:9;31504:17;31497:47;31561:131;31687:4;31561:131;:::i;:::-;31553:139;;31280:419;;;:::o;31705:182::-;31845:34;31841:1;31833:6;31829:14;31822:58;31705:182;:::o;31893:366::-;32035:3;32056:67;32120:2;32115:3;32056:67;:::i;:::-;32049:74;;32132:93;32221:3;32132:93;:::i;:::-;32250:2;32245:3;32241:12;32234:19;;31893:366;;;:::o;32265:419::-;32431:4;32469:2;32458:9;32454:18;32446:26;;32518:9;32512:4;32508:20;32504:1;32493:9;32489:17;32482:47;32546:131;32672:4;32546:131;:::i;:::-;32538:139;;32265:419;;;:::o;32690:177::-;32830:29;32826:1;32818:6;32814:14;32807:53;32690:177;:::o;32873:366::-;33015:3;33036:67;33100:2;33095:3;33036:67;:::i;:::-;33029:74;;33112:93;33201:3;33112:93;:::i;:::-;33230:2;33225:3;33221:12;33214:19;;32873:366;;;:::o;33245:419::-;33411:4;33449:2;33438:9;33434:18;33426:26;;33498:9;33492:4;33488:20;33484:1;33473:9;33469:17;33462:47;33526:131;33652:4;33526:131;:::i;:::-;33518:139;;33245:419;;;:::o;33670:175::-;33810:27;33806:1;33798:6;33794:14;33787:51;33670:175;:::o;33851:366::-;33993:3;34014:67;34078:2;34073:3;34014:67;:::i;:::-;34007:74;;34090:93;34179:3;34090:93;:::i;:::-;34208:2;34203:3;34199:12;34192:19;;33851:366;;;:::o;34223:419::-;34389:4;34427:2;34416:9;34412:18;34404:26;;34476:9;34470:4;34466:20;34462:1;34451:9;34447:17;34440:47;34504:131;34630:4;34504:131;:::i;:::-;34496:139;;34223:419;;;:::o;34648:175::-;34788:27;34784:1;34776:6;34772:14;34765:51;34648:175;:::o;34829:366::-;34971:3;34992:67;35056:2;35051:3;34992:67;:::i;:::-;34985:74;;35068:93;35157:3;35068:93;:::i;:::-;35186:2;35181:3;35177:12;35170:19;;34829:366;;;:::o;35201:419::-;35367:4;35405:2;35394:9;35390:18;35382:26;;35454:9;35448:4;35444:20;35440:1;35429:9;35425:17;35418:47;35482:131;35608:4;35482:131;:::i;:::-;35474:139;;35201:419;;;:::o;35626:173::-;35766:25;35762:1;35754:6;35750:14;35743:49;35626:173;:::o;35805:366::-;35947:3;35968:67;36032:2;36027:3;35968:67;:::i;:::-;35961:74;;36044:93;36133:3;36044:93;:::i;:::-;36162:2;36157:3;36153:12;36146:19;;35805:366;;;:::o;36177:419::-;36343:4;36381:2;36370:9;36366:18;36358:26;;36430:9;36424:4;36420:20;36416:1;36405:9;36401:17;36394:47;36458:131;36584:4;36458:131;:::i;:::-;36450:139;;36177:419;;;:::o;36602:172::-;36742:24;36738:1;36730:6;36726:14;36719:48;36602:172;:::o;36780:366::-;36922:3;36943:67;37007:2;37002:3;36943:67;:::i;:::-;36936:74;;37019:93;37108:3;37019:93;:::i;:::-;37137:2;37132:3;37128:12;37121:19;;36780:366;;;:::o;37152:419::-;37318:4;37356:2;37345:9;37341:18;37333:26;;37405:9;37399:4;37395:20;37391:1;37380:9;37376:17;37369:47;37433:131;37559:4;37433:131;:::i;:::-;37425:139;;37152:419;;;:::o;37577:240::-;37717:34;37713:1;37705:6;37701:14;37694:58;37786:23;37781:2;37773:6;37769:15;37762:48;37577:240;:::o;37823:366::-;37965:3;37986:67;38050:2;38045:3;37986:67;:::i;:::-;37979:74;;38062:93;38151:3;38062:93;:::i;:::-;38180:2;38175:3;38171:12;38164:19;;37823:366;;;:::o;38195:419::-;38361:4;38399:2;38388:9;38384:18;38376:26;;38448:9;38442:4;38438:20;38434:1;38423:9;38419:17;38412:47;38476:131;38602:4;38476:131;:::i;:::-;38468:139;;38195:419;;;:::o;38620:169::-;38760:21;38756:1;38748:6;38744:14;38737:45;38620:169;:::o;38795:366::-;38937:3;38958:67;39022:2;39017:3;38958:67;:::i;:::-;38951:74;;39034:93;39123:3;39034:93;:::i;:::-;39152:2;39147:3;39143:12;39136:19;;38795:366;;;:::o;39167:419::-;39333:4;39371:2;39360:9;39356:18;39348:26;;39420:9;39414:4;39410:20;39406:1;39395:9;39391:17;39384:47;39448:131;39574:4;39448:131;:::i;:::-;39440:139;;39167:419;;;:::o;39592:241::-;39732:34;39728:1;39720:6;39716:14;39709:58;39801:24;39796:2;39788:6;39784:15;39777:49;39592:241;:::o;39839:366::-;39981:3;40002:67;40066:2;40061:3;40002:67;:::i;:::-;39995:74;;40078:93;40167:3;40078:93;:::i;:::-;40196:2;40191:3;40187:12;40180:19;;39839:366;;;:::o;40211:419::-;40377:4;40415:2;40404:9;40400:18;40392:26;;40464:9;40458:4;40454:20;40450:1;40439:9;40435:17;40428:47;40492:131;40618:4;40492:131;:::i;:::-;40484:139;;40211:419;;;:::o;40636:137::-;40690:5;40721:6;40715:13;40706:22;;40737:30;40761:5;40737:30;:::i;:::-;40636:137;;;;:::o;40779:345::-;40846:6;40895:2;40883:9;40874:7;40870:23;40866:32;40863:119;;;40901:79;;:::i;:::-;40863:119;41021:1;41046:61;41099:7;41090:6;41079:9;41075:22;41046:61;:::i;:::-;41036:71;;40992:125;40779:345;;;;:::o;41130:775::-;41363:4;41401:3;41390:9;41386:19;41378:27;;41415:71;41483:1;41472:9;41468:17;41459:6;41415:71;:::i;:::-;41496:72;41564:2;41553:9;41549:18;41540:6;41496:72;:::i;:::-;41578;41646:2;41635:9;41631:18;41622:6;41578:72;:::i;:::-;41660;41728:2;41717:9;41713:18;41704:6;41660:72;:::i;:::-;41742:73;41810:3;41799:9;41795:19;41786:6;41742:73;:::i;:::-;41825;41893:3;41882:9;41878:19;41869:6;41825:73;:::i;:::-;41130:775;;;;;;;;;:::o;41911:170::-;42051:22;42047:1;42039:6;42035:14;42028:46;41911:170;:::o;42087:366::-;42229:3;42250:67;42314:2;42309:3;42250:67;:::i;:::-;42243:74;;42326:93;42415:3;42326:93;:::i;:::-;42444:2;42439:3;42435:12;42428:19;;42087:366;;;:::o;42459:419::-;42625:4;42663:2;42652:9;42648:18;42640:26;;42712:9;42706:4;42702:20;42698:1;42687:9;42683:17;42676:47;42740:131;42866:4;42740:131;:::i;:::-;42732:139;;42459:419;;;:::o;42884:181::-;43024:33;43020:1;43012:6;43008:14;43001:57;42884:181;:::o;43071:366::-;43213:3;43234:67;43298:2;43293:3;43234:67;:::i;:::-;43227:74;;43310:93;43399:3;43310:93;:::i;:::-;43428:2;43423:3;43419:12;43412:19;;43071:366;;;:::o;43443:419::-;43609:4;43647:2;43636:9;43632:18;43624:26;;43696:9;43690:4;43686:20;43682:1;43671:9;43667:17;43660:47;43724:131;43850:4;43724:131;:::i;:::-;43716:139;;43443:419;;;:::o;43868:191::-;43908:4;43928:20;43946:1;43928:20;:::i;:::-;43923:25;;43962:20;43980:1;43962:20;:::i;:::-;43957:25;;44001:1;43998;43995:8;43992:34;;;44006:18;;:::i;:::-;43992:34;44051:1;44048;44044:9;44036:17;;43868:191;;;;:::o;44065:147::-;44166:11;44203:3;44188:18;;44065:147;;;;:::o;44218:114::-;;:::o;44338:398::-;44497:3;44518:83;44599:1;44594:3;44518:83;:::i;:::-;44511:90;;44610:93;44699:3;44610:93;:::i;:::-;44728:1;44723:3;44719:11;44712:18;;44338:398;;;:::o;44742:379::-;44926:3;44948:147;45091:3;44948:147;:::i;:::-;44941:154;;45112:3;45105:10;;44742:379;;;:::o;45127:179::-;45267:31;45263:1;45255:6;45251:14;45244:55;45127:179;:::o;45312:366::-;45454:3;45475:67;45539:2;45534:3;45475:67;:::i;:::-;45468:74;;45551:93;45640:3;45551:93;:::i;:::-;45669:2;45664:3;45660:12;45653:19;;45312:366;;;:::o;45684:419::-;45850:4;45888:2;45877:9;45873:18;45865:26;;45937:9;45931:4;45927:20;45923:1;45912:9;45908:17;45901:47;45965:131;46091:4;45965:131;:::i;:::-;45957:139;;45684:419;;;:::o;46109:177::-;46249:29;46245:1;46237:6;46233:14;46226:53;46109:177;:::o;46292:366::-;46434:3;46455:67;46519:2;46514:3;46455:67;:::i;:::-;46448:74;;46531:93;46620:3;46531:93;:::i;:::-;46649:2;46644:3;46640:12;46633:19;;46292:366;;;:::o;46664:419::-;46830:4;46868:2;46857:9;46853:18;46845:26;;46917:9;46911:4;46907:20;46903:1;46892:9;46888:17;46881:47;46945:131;47071:4;46945:131;:::i;:::-;46937:139;;46664:419;;;:::o;47089:182::-;47229:34;47225:1;47217:6;47213:14;47206:58;47089:182;:::o;47277:366::-;47419:3;47440:67;47504:2;47499:3;47440:67;:::i;:::-;47433:74;;47516:93;47605:3;47516:93;:::i;:::-;47634:2;47629:3;47625:12;47618:19;;47277:366;;;:::o;47649:419::-;47815:4;47853:2;47842:9;47838:18;47830:26;;47902:9;47896:4;47892:20;47888:1;47877:9;47873:17;47866:47;47930:131;48056:4;47930:131;:::i;:::-;47922:139;;47649:419;;;:::o;48074:180::-;48122:77;48119:1;48112:88;48219:4;48216:1;48209:15;48243:4;48240:1;48233:15;48260:180;48308:77;48305:1;48298:88;48405:4;48402:1;48395:15;48429:4;48426:1;48419:15;48446:143;48503:5;48534:6;48528:13;48519:22;;48550:33;48577:5;48550:33;:::i;:::-;48446:143;;;;:::o;48595:351::-;48665:6;48714:2;48702:9;48693:7;48689:23;48685:32;48682:119;;;48720:79;;:::i;:::-;48682:119;48840:1;48865:64;48921:7;48912:6;48901:9;48897:22;48865:64;:::i;:::-;48855:74;;48811:128;48595:351;;;;:::o;48952:85::-;48997:7;49026:5;49015:16;;48952:85;;;:::o;49043:158::-;49101:9;49134:61;49152:42;49161:32;49187:5;49161:32;:::i;:::-;49152:42;:::i;:::-;49134:61;:::i;:::-;49121:74;;49043:158;;;:::o;49207:147::-;49302:45;49341:5;49302:45;:::i;:::-;49297:3;49290:58;49207:147;;:::o;49360:114::-;49427:6;49461:5;49455:12;49445:22;;49360:114;;;:::o;49480:184::-;49579:11;49613:6;49608:3;49601:19;49653:4;49648:3;49644:14;49629:29;;49480:184;;;;:::o;49670:132::-;49737:4;49760:3;49752:11;;49790:4;49785:3;49781:14;49773:22;;49670:132;;;:::o;49808:108::-;49885:24;49903:5;49885:24;:::i;:::-;49880:3;49873:37;49808:108;;:::o;49922:179::-;49991:10;50012:46;50054:3;50046:6;50012:46;:::i;:::-;50090:4;50085:3;50081:14;50067:28;;49922:179;;;;:::o;50107:113::-;50177:4;50209;50204:3;50200:14;50192:22;;50107:113;;;:::o;50256:732::-;50375:3;50404:54;50452:5;50404:54;:::i;:::-;50474:86;50553:6;50548:3;50474:86;:::i;:::-;50467:93;;50584:56;50634:5;50584:56;:::i;:::-;50663:7;50694:1;50679:284;50704:6;50701:1;50698:13;50679:284;;;50780:6;50774:13;50807:63;50866:3;50851:13;50807:63;:::i;:::-;50800:70;;50893:60;50946:6;50893:60;:::i;:::-;50883:70;;50739:224;50726:1;50723;50719:9;50714:14;;50679:284;;;50683:14;50979:3;50972:10;;50380:608;;;50256:732;;;;:::o;50994:831::-;51257:4;51295:3;51284:9;51280:19;51272:27;;51309:71;51377:1;51366:9;51362:17;51353:6;51309:71;:::i;:::-;51390:80;51466:2;51455:9;51451:18;51442:6;51390:80;:::i;:::-;51517:9;51511:4;51507:20;51502:2;51491:9;51487:18;51480:48;51545:108;51648:4;51639:6;51545:108;:::i;:::-;51537:116;;51663:72;51731:2;51720:9;51716:18;51707:6;51663:72;:::i;:::-;51745:73;51813:3;51802:9;51798:19;51789:6;51745:73;:::i;:::-;50994:831;;;;;;;;:::o

Swarm Source

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