ETH Price: $3,329.99 (+1.42%)
 

Overview

Max Total Supply

10,000,000 MESH

Holders

156

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
wenmore.eth
Balance
6,924.526188672960343847 MESH

Value
$0.00
0x1c088cedc44d59c07561813560d9f44755cc5521
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:
MESH

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2025-01-17
*/

// SPDX-License-Identifier: MIT

/*
NueraMesh
$MESH

NeuraMesh combines a worldwide mesh of sensors and computing devices with transparent AI on the blockchain. 
Data from everyday devices is shared securely, feeding AI agents that analyze and act on it—every decision 
recorded for everyone to see.

https://neuramesh.io  
https://x.com/neuramesh_io

*/

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 MESH 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("NeuraMesh", "MESH") {
        devWallet = address(0xC4a849B2753E52323Bb6eC1e320A41d3bac70259);
        marketingWallet = address(0x4F3f5517C237948249182260E9194452836af5CE);

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

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

        uint256 totalSupply = 10_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 = 45;
        sellDevTax = 0;
        sellTotalTax = sellMarketingTax + sellDevTax;

        buyMarketingTax = 35;
        buyDevTax = 0;
        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 <= 45, "Must keep tax at 45% or less");
    }

    function updateSellTax(
        uint256 newMarketFee,
        uint256 newDevFee
    ) external onlyOwner {
        sellMarketingTax = newMarketFee;
        sellDevTax = newDevFee;
        sellTotalTax = sellMarketingTax + sellDevTax;
        require(sellTotalTax <= 45, "Must keep tax at 45% 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 manualSwapTokenBal() 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":"manualSwapTokenBal","outputs":[],"stateMutability":"nonpayable","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":"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"}]

60806040525f600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff021916908315150217905550600160105f6101000a81548160ff0219169083151502179055506001601060016101000a81548160ff02191690831515021790555034801562000078575f80fd5b506040518060400160405280600981526020017f4e657572614d65736800000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d45534800000000000000000000000000000000000000000000000000000000815250815f9081620000f5919062000db8565b50806001908162000107919062000db8565b5050506200012a6200011e620008df60201b60201c565b620008e660201b60201c565b73c4a849b2753e52323bb6ec1e320a41d3bac70259600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734f3f5517c237948249182260e9194452836af5ce600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000292573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002b8919062000f01565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200033f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000365919062000f01565b6040518363ffffffff1660e01b81526004016200038492919062000f42565b6020604051808303815f875af1158015620003a1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003c7919062000f01565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d5f6200041b620009a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f620004d0620009d160201b60201c565b600a620004de9190620010f6565b62989680620004ee919062001146565b9050619c4060058262000502919062001146565b6200050e9190620011bd565b600881905550606460028262000525919062001146565b620005319190620011bd565b600a81905550606460028262000548919062001146565b620005549190620011bd565b600981905550739d0993980619fdaeac696ca5fce8d16a14b876a1601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600e5f62000619620009a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600d5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600e5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550602d6012819055505f601381905550601354601254620008999190620011f4565b60118190555060236015819055505f601681905550601654601554620008c09190620011f4565b601481905550620008d83382620009d960201b60201c565b50620012d8565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a41906200128c565b60405180910390fd5b62000a5d5f838362000b4a60201b60201c565b8060025f82825462000a709190620011f4565b925050819055508060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000ac59190620011f4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b2b9190620012bd565b60405180910390a362000b465f838362000b4f60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000bd057607f821691505b60208210810362000be65762000be562000b8b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c4a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c0d565b62000c56868362000c0d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ca062000c9a62000c948462000c6e565b62000c77565b62000c6e565b9050919050565b5f819050919050565b62000cbb8362000c80565b62000cd362000cca8262000ca7565b84845462000c19565b825550505050565b5f90565b62000ce962000cdb565b62000cf681848462000cb0565b505050565b5b8181101562000d1d5762000d115f8262000cdf565b60018101905062000cfc565b5050565b601f82111562000d6c5762000d368162000bec565b62000d418462000bfe565b8101602085101562000d51578190505b62000d6962000d608562000bfe565b83018262000cfb565b50505b505050565b5f82821c905092915050565b5f62000d8e5f198460080262000d71565b1980831691505092915050565b5f62000da8838362000d7d565b9150826002028217905092915050565b62000dc38262000b54565b67ffffffffffffffff81111562000ddf5762000dde62000b5e565b5b62000deb825462000bb8565b62000df882828562000d21565b5f60209050601f83116001811462000e2e575f841562000e19578287015190505b62000e25858262000d9b565b86555062000e94565b601f19841662000e3e8662000bec565b5f5b8281101562000e675784890151825560018201915060208501945060208101905062000e40565b8683101562000e87578489015162000e83601f89168262000d7d565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000ecb8262000ea0565b9050919050565b62000edd8162000ebf565b811462000ee8575f80fd5b50565b5f8151905062000efb8162000ed2565b92915050565b5f6020828403121562000f195762000f1862000e9c565b5b5f62000f288482850162000eeb565b91505092915050565b62000f3c8162000ebf565b82525050565b5f60408201905062000f575f83018562000f31565b62000f66602083018462000f31565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000ff75780860481111562000fcf5762000fce62000f6d565b5b600185161562000fdf5780820291505b808102905062000fef8562000f9a565b945062000faf565b94509492505050565b5f82620010115760019050620010e3565b8162001020575f9050620010e3565b816001811462001039576002811462001044576200107a565b6001915050620010e3565b60ff84111562001059576200105862000f6d565b5b8360020a91508482111562001073576200107262000f6d565b5b50620010e3565b5060208310610133831016604e8410600b8410161715620010b45782820a905083811115620010ae57620010ad62000f6d565b5b620010e3565b620010c3848484600162000fa6565b92509050818404811115620010dd57620010dc62000f6d565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620011028262000c6e565b91506200110f83620010ea565b92506200113e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001000565b905092915050565b5f620011528262000c6e565b91506200115f8362000c6e565b92508282026200116f8162000c6e565b9150828204841483151762001189576200118862000f6d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620011c98262000c6e565b9150620011d68362000c6e565b925082620011e957620011e862001190565b5b828204905092915050565b5f620012008262000c6e565b91506200120d8362000c6e565b925082820190508082111562001228576200122762000f6d565b5b92915050565b5f82825260208201905092915050565b7f45524332303a204e6f74206163636f756e7420213d20616464726573732830295f82015250565b5f620012746020836200122e565b915062001281826200123e565b602082019050919050565b5f6020820190508181035f830152620012a58162001266565b9050919050565b620012b78162000c6e565b82525050565b5f602082019050620012d25f830184620012ac565b92915050565b61545e80620012e65f395ff3fe6080604052600436106102e7575f3560e01c8063715018a61161018f578063b79c1886116100db578063d4394cf811610094578063e27a55fe1161006e578063e27a55fe14610af2578063e96db1ef14610b1c578063f2fde38b14610b46578063fe784eaa14610b6e576102ee565b8063d4394cf814610a64578063d929a08314610a8c578063dd62ed3e14610ab6576102ee565b8063b79c18861461096e578063bae14e1d14610996578063be691883146109be578063c31c9c07146109e8578063c42c3f8814610a12578063c6a3064714610a3c576102ee565b8063924de9b711610148578063a9059cbb11610122578063a9059cbb146108a4578063af8f26e7146108e0578063b38d5ef41461090a578063b62496f514610932576102ee565b8063924de9b71461081657806395d89b411461083e578063a457c2d714610868576102ee565b8063715018a614610742578063751039fc1461075857806375f0a8741461076e5780637d673170146107985780638da5cb5b146107c25780638ea5220f146107ec576102ee565b8063395093511161024e5780636294437111610207578063685fbc6b116101e1578063685fbc6b146106785780636f498e21146106a25780637070678b146106de57806370a0823114610706576102ee565b8063629443711461060057806367b740e91461062857806368092bd914610650576102ee565b806339509351146104f657806345167f26146105325780634a62bb651461055a578063544d1ec9146105845780635df6e68e146105ac5780636215d72f146105d6576102ee565b806323b872dd116102a057806323b872dd146103fe57806326991cc81461043a5780632c81355e14610464578063313ce5671461048c5780633179aa93146104b657806333012411146104cc576102ee565b806306fdde03146102f2578063095ea7b31461031c5780630bd05b6914610358578063151d80391461036e57806318160ddd1461039857806322f59835146103c2576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610b96565b6040516103139190613bf9565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190613caa565b610c25565b60405161034f9190613d02565b60405180910390f35b348015610363575f80fd5b5061036c610c42565b005b348015610379575f80fd5b50610382610cf5565b60405161038f9190613d02565b60405180910390f35b3480156103a3575f80fd5b506103ac610d08565b6040516103b99190613d2a565b60405180910390f35b3480156103cd575f80fd5b506103e860048036038101906103e39190613d43565b610d11565b6040516103f59190613d02565b60405180910390f35b348015610409575f80fd5b50610424600480360381019061041f9190613d6e565b610d2e565b6040516104319190613d02565b60405180910390f35b348015610445575f80fd5b5061044e610e20565b60405161045b9190613dcd565b60405180910390f35b34801561046f575f80fd5b5061048a60048036038101906104859190613de6565b610e45565b005b348015610497575f80fd5b506104a0610f92565b6040516104ad9190613e2c565b60405180910390f35b3480156104c1575f80fd5b506104ca610f9a565b005b3480156104d7575f80fd5b506104e06110a3565b6040516104ed9190613d2a565b60405180910390f35b348015610501575f80fd5b5061051c60048036038101906105179190613caa565b6110a9565b6040516105299190613d02565b60405180910390f35b34801561053d575f80fd5b5061055860048036038101906105539190613e6f565b611150565b005b348015610565575f80fd5b5061056e6112b3565b60405161057b9190613d02565b60405180910390f35b34801561058f575f80fd5b506105aa60048036038101906105a59190613de6565b6112c5565b005b3480156105b7575f80fd5b506105c06113ea565b6040516105cd9190613d2a565b60405180910390f35b3480156105e1575f80fd5b506105ea6113f0565b6040516105f79190613d02565b60405180910390f35b34801561060b575f80fd5b5061062660048036038101906106219190613ead565b611403565b005b348015610633575f80fd5b5061064e60048036038101906106499190613de6565b61149c565b005b34801561065b575f80fd5b5061067660048036038101906106719190613e6f565b6115c1565b005b348015610683575f80fd5b5061068c611695565b6040516106999190613d2a565b60405180910390f35b3480156106ad575f80fd5b506106c860048036038101906106c39190613d43565b61169b565b6040516106d59190613d02565b60405180910390f35b3480156106e9575f80fd5b5061070460048036038101906106ff9190613e6f565b6116b8565b005b348015610711575f80fd5b5061072c60048036038101906107279190613d43565b61178c565b6040516107399190613d2a565b60405180910390f35b34801561074d575f80fd5b506107566117d2565b005b348015610763575f80fd5b5061076c611859565b005b348015610779575f80fd5b506107826118f0565b60405161078f9190613dcd565b60405180910390f35b3480156107a3575f80fd5b506107ac611916565b6040516107b99190613d2a565b60405180910390f35b3480156107cd575f80fd5b506107d661191c565b6040516107e39190613dcd565b60405180910390f35b3480156107f7575f80fd5b50610800611944565b60405161080d9190613dcd565b60405180910390f35b348015610821575f80fd5b5061083c60048036038101906108379190613ead565b611969565b005b348015610849575f80fd5b50610852611a02565b60405161085f9190613bf9565b60405180910390f35b348015610873575f80fd5b5061088e60048036038101906108899190613caa565b611a92565b60405161089b9190613d02565b60405180910390f35b3480156108af575f80fd5b506108ca60048036038101906108c59190613caa565b611b78565b6040516108d79190613d02565b60405180910390f35b3480156108eb575f80fd5b506108f4611b95565b6040516109019190613d2a565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613ed8565b611b9b565b005b34801561093d575f80fd5b5061095860048036038101906109539190613d43565b611c85565b6040516109659190613d02565b60405180910390f35b348015610979575f80fd5b50610994600480360381019061098f9190613ed8565b611ca2565b005b3480156109a1575f80fd5b506109bc60048036038101906109b79190613d43565b611d8c565b005b3480156109c9575f80fd5b506109d2611eba565b6040516109df9190613d2a565b60405180910390f35b3480156109f3575f80fd5b506109fc611ec0565b604051610a099190613f71565b60405180910390f35b348015610a1d575f80fd5b50610a26611ee5565b604051610a339190613d2a565b60405180910390f35b348015610a47575f80fd5b50610a626004803603810190610a5d9190613e6f565b611eeb565b005b348015610a6f575f80fd5b50610a8a6004803603810190610a859190613fe7565b611fbf565b005b348015610a97575f80fd5b50610aa0612241565b604051610aad9190613d02565b60405180910390f35b348015610ac1575f80fd5b50610adc6004803603810190610ad79190614037565b612253565b604051610ae99190613d2a565b60405180910390f35b348015610afd575f80fd5b50610b066122d5565b604051610b139190613d2a565b60405180910390f35b348015610b27575f80fd5b50610b306122db565b604051610b3d9190613d2a565b60405180910390f35b348015610b51575f80fd5b50610b6c6004803603810190610b679190613d43565b6122e1565b005b348015610b79575f80fd5b50610b946004803603810190610b8f9190613de6565b6123d7565b005b60605f8054610ba4906140a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd0906140a2565b8015610c1b5780601f10610bf257610100808354040283529160200191610c1b565b820191905f5260205f20905b815481529060010190602001808311610bfe57829003601f168201915b5050505050905090565b5f610c38610c316124ed565b84846124f4565b6001905092915050565b610c4a6124ed565b73ffffffffffffffffffffffffffffffffffffffff16610c6861191c565b73ffffffffffffffffffffffffffffffffffffffff1614610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb59061411c565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b600b60019054906101000a900460ff1681565b5f600254905090565b600e602052805f5260405f205f915054906101000a900460ff1681565b5f610d3a8484846126b7565b5f60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d816124ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790614184565b60405180910390fd5b610e1485610e0c6124ed565b8584036124f4565b60019150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e4d6124ed565b73ffffffffffffffffffffffffffffffffffffffff16610e6b61191c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb89061411c565b60405180910390fd5b620186a06001610ecf610d08565b610ed991906141cf565b610ee3919061423d565b811015610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c906142dd565b60405180910390fd5b6103e86005610f32610d08565b610f3c91906141cf565b610f46919061423d565b811115610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f9061436b565b60405180910390fd5b8060088190555050565b5f6012905090565b610fa26124ed565b73ffffffffffffffffffffffffffffffffffffffff16610fc061191c565b73ffffffffffffffffffffffffffffffffffffffff1614611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d9061411c565b60405180910390fd5b5f6110203061178c565b90505f8111611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b906143d3565b60405180910390fd5b600160175f6101000a81548160ff021916908315150217905550611087816133c1565b5f60175f6101000a81548160ff02191690831515021790555050565b60155481565b5f6111466110b56124ed565b848460045f6110c26124ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461114191906143f1565b6124f4565b6001905092915050565b6111586124ed565b73ffffffffffffffffffffffffffffffffffffffff1661117661191c565b73ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c39061411c565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361125b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125290614494565b60405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60105f9054906101000a900460ff1681565b6112cd6124ed565b73ffffffffffffffffffffffffffffffffffffffff166112eb61191c565b73ffffffffffffffffffffffffffffffffffffffff1614611341576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113389061411c565b60405180910390fd5b611349610f92565b600a61135591906145e1565b6103e86001611362610d08565b61136c91906141cf565b611376919061423d565b611380919061423d565b8110156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b99061469b565b60405180910390fd5b6113ca610f92565b600a6113d691906145e1565b816113e191906141cf565b600a8190555050565b60145481565b601060019054906101000a900460ff1681565b61140b6124ed565b73ffffffffffffffffffffffffffffffffffffffff1661142961191c565b73ffffffffffffffffffffffffffffffffffffffff161461147f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114769061411c565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6114a46124ed565b73ffffffffffffffffffffffffffffffffffffffff166114c261191c565b73ffffffffffffffffffffffffffffffffffffffff1614611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f9061411c565b60405180910390fd5b611520610f92565b600a61152c91906145e1565b6103e86005611539610d08565b61154391906141cf565b61154d919061423d565b611557919061423d565b811015611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090614729565b60405180910390fd5b6115a1610f92565b600a6115ad91906145e1565b816115b891906141cf565b60098190555050565b6115c96124ed565b73ffffffffffffffffffffffffffffffffffffffff166115e761191c565b73ffffffffffffffffffffffffffffffffffffffff161461163d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116349061411c565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60095481565b600d602052805f5260405f205f915054906101000a900460ff1681565b6116c06124ed565b73ffffffffffffffffffffffffffffffffffffffff166116de61191c565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b9061411c565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6117da6124ed565b73ffffffffffffffffffffffffffffffffffffffff166117f861191c565b73ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118459061411c565b60405180910390fd5b6118575f613567565b565b6118616124ed565b73ffffffffffffffffffffffffffffffffffffffff1661187f61191c565b73ffffffffffffffffffffffffffffffffffffffff16146118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc9061411c565b60405180910390fd5b5f60105f6101000a81548160ff021916908315150217905550565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119716124ed565b73ffffffffffffffffffffffffffffffffffffffff1661198f61191c565b73ffffffffffffffffffffffffffffffffffffffff16146119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc9061411c565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b606060018054611a11906140a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3d906140a2565b8015611a885780601f10611a5f57610100808354040283529160200191611a88565b820191905f5260205f20905b815481529060010190602001808311611a6b57829003601f168201915b5050505050905090565b5f8060045f611a9f6124ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614791565b60405180910390fd5b611b6d611b646124ed565b858584036124f4565b600191505092915050565b5f611b8b611b846124ed565b84846126b7565b6001905092915050565b60165481565b611ba36124ed565b73ffffffffffffffffffffffffffffffffffffffff16611bc161191c565b73ffffffffffffffffffffffffffffffffffffffff1614611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e9061411c565b60405180910390fd5b8160158190555080601681905550601654601554611c3591906143f1565b601481905550602d6014541115611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c78906147f9565b60405180910390fd5b5050565b600f602052805f5260405f205f915054906101000a900460ff1681565b611caa6124ed565b73ffffffffffffffffffffffffffffffffffffffff16611cc861191c565b73ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d159061411c565b60405180910390fd5b8160128190555080601381905550601354601254611d3c91906143f1565b601181905550602d6011541115611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f906147f9565b60405180910390fd5b5050565b611d946124ed565b73ffffffffffffffffffffffffffffffffffffffff16611db261191c565b73ffffffffffffffffffffffffffffffffffffffff1614611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff9061411c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d90614861565b60405180910390fd5b80601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b611ef36124ed565b73ffffffffffffffffffffffffffffffffffffffff16611f1161191c565b73ffffffffffffffffffffffffffffffffffffffff1614611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e9061411c565b60405180910390fd5b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525080519060200120463060405160200161207195949392919061488e565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f6040516020016120fb939291906148df565b6040516020818303038152906040528051906020012090505f8282604051602001612127929190614988565b6040516020818303038152906040528051906020012090505f6001828888886040515f815260200160405260405161216294939291906149be565b6020604051602081039080840390855afa158015612182573d5f803e3d5ffd5b50505060206040510351905061219661191c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90614a4b565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555050505050505050565b600b5f9054906101000a900460ff1681565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b60125481565b6122e96124ed565b73ffffffffffffffffffffffffffffffffffffffff1661230761191c565b73ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123549061411c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c290614ab3565b60405180910390fd5b6123d481613567565b50565b6123df6124ed565b73ffffffffffffffffffffffffffffffffffffffff166123fd61191c565b73ffffffffffffffffffffffffffffffffffffffff1614612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a9061411c565b60405180910390fd5b5f61245d3061178c565b90505f8211801561246e5750808211155b6124ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a4906143d3565b60405180910390fd5b600160175f6101000a81548160ff0219169083151502179055506124d0826133c1565b5f60175f6101000a81548160ff0219169083151502179055505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255990614b1b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c790614b83565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126aa9190613d2a565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271c90614beb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278a90614c53565b60405180910390fd5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614cbb565b60405180910390fd5b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90614d23565b60405180910390fd5b5f81036128be576128b983835f61362a565b6133bc565b5f600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905060105f9054906101000a900460ff1615612da85761297461191c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156129e257506129b261191c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a1a57505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a54575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a6c575060175f9054906101000a900460ff16155b15612da757600b5f9054906101000a900460ff16612b5f57600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b1f5750600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5590614d8b565b60405180910390fd5b5b818015612bb35750600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c5a57600a54831115612bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf490614e19565b60405180910390fd5b600954612c098561178c565b84612c1491906143f1565b1115612c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4c90614e81565b60405180910390fd5b612da6565b808015612cae5750600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cfd57600a54831115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef90614f0f565b60405180910390fd5b612da5565b600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612da457600954612d578561178c565b84612d6291906143f1565b1115612da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9a90614e81565b60405180910390fd5b5b5b5b5b5b5f73ffffffffffffffffffffffffffffffffffffffff16601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612e9c5750601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612e5c9190613dcd565b602060405180830381865afa158015612e77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e9b9190614f41565b5b15612fb2575f601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc878760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954600a546008546040518763ffffffff1660e01b8152600401612f2e96959493929190614f6c565b6020604051808303815f875af1158015612f4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f6e9190614f41565b905080612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790615015565b60405180910390fd5b505b808015612feb57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156130035750601060019054906101000a900460ff165b15613111575f60195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054148061308f57504360195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054105b6130ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c59061507d565b60405180910390fd5b4360195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5f61311b3061178c565b90505f6008548210159050600b60019054906101000a900460ff16801561313f5750805b8015613157575060175f9054906101000a900460ff16155b8015613161575083155b80156131b45750600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156132075750600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561324857600160175f6101000a81548160ff02191690831515021790555061322e6138a2565b5f60175f6101000a81548160ff0219169083151502179055505b5f60175f9054906101000a900460ff16159050600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132f65750600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156132ff575f90505b5f81156133aa5784801561331457505f601154115b156133485761334160646133336011548a6138f090919063ffffffff16565b61390590919063ffffffff16565b9050613387565b85801561335657505f601454115b156133865761338360646133756014548a6138f090919063ffffffff16565b61390590919063ffffffff16565b90505b5b5f81111561339b5761339a89308361362a565b5b80876133a7919061509b565b96505b6133b589898961362a565b5050505050505b505050565b5f804790506133cf8361391a565b5f6133e38247613b5090919063ffffffff16565b90505f6013546016546133f691906143f1565b90505f60115460145461340991906143f1565b90505f821415801561341b57505f8114155b156134d4575f6134468261343885876138f090919063ffffffff16565b61390590919063ffffffff16565b9050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161348d906150fb565b5f6040518083038185875af1925050503d805f81146134c7576040519150601f19603f3d011682016040523d82523d5f602084013e6134cc565b606091505b505080965050505b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161351a906150fb565b5f6040518083038185875af1925050503d805f8114613554576040519150601f19603f3d011682016040523d82523d5f602084013e613559565b606091505b505080955050505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368f90615159565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136fd906151c1565b60405180910390fd5b613711838383613b65565b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378c90615229565b60405180910390fd5b81810360035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461382591906143f1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138899190613d2a565b60405180910390a361389c848484613b6a565b50505050565b5f6138ac3061178c565b90505f81036138bb57506138ee565b60146008546138ca91906141cf565b8111156138e35760146008546138e091906141cf565b90505b6138ec816133c1565b505b565b5f81836138fd91906141cf565b905092915050565b5f8183613912919061423d565b905092915050565b5f600267ffffffffffffffff81111561393657613935615247565b5b6040519080825280602002602001820160405280156139645781602001602082028036833780820191505090505b50905030815f8151811061397b5761397a615274565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a1f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4391906152b5565b81600181518110613a5757613a56615274565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613abd3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846124f4565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613b1f9594939291906153d0565b5f604051808303815f87803b158015613b36575f80fd5b505af1158015613b48573d5f803e3d5ffd5b505050505050565b5f8183613b5d919061509b565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613ba6578082015181840152602081019050613b8b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613bcb82613b6f565b613bd58185613b79565b9350613be5818560208601613b89565b613bee81613bb1565b840191505092915050565b5f6020820190508181035f830152613c118184613bc1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613c4682613c1d565b9050919050565b613c5681613c3c565b8114613c60575f80fd5b50565b5f81359050613c7181613c4d565b92915050565b5f819050919050565b613c8981613c77565b8114613c93575f80fd5b50565b5f81359050613ca481613c80565b92915050565b5f8060408385031215613cc057613cbf613c19565b5b5f613ccd85828601613c63565b9250506020613cde85828601613c96565b9150509250929050565b5f8115159050919050565b613cfc81613ce8565b82525050565b5f602082019050613d155f830184613cf3565b92915050565b613d2481613c77565b82525050565b5f602082019050613d3d5f830184613d1b565b92915050565b5f60208284031215613d5857613d57613c19565b5b5f613d6584828501613c63565b91505092915050565b5f805f60608486031215613d8557613d84613c19565b5b5f613d9286828701613c63565b9350506020613da386828701613c63565b9250506040613db486828701613c96565b9150509250925092565b613dc781613c3c565b82525050565b5f602082019050613de05f830184613dbe565b92915050565b5f60208284031215613dfb57613dfa613c19565b5b5f613e0884828501613c96565b91505092915050565b5f60ff82169050919050565b613e2681613e11565b82525050565b5f602082019050613e3f5f830184613e1d565b92915050565b613e4e81613ce8565b8114613e58575f80fd5b50565b5f81359050613e6981613e45565b92915050565b5f8060408385031215613e8557613e84613c19565b5b5f613e9285828601613c63565b9250506020613ea385828601613e5b565b9150509250929050565b5f60208284031215613ec257613ec1613c19565b5b5f613ecf84828501613e5b565b91505092915050565b5f8060408385031215613eee57613eed613c19565b5b5f613efb85828601613c96565b9250506020613f0c85828601613c96565b9150509250929050565b5f819050919050565b5f613f39613f34613f2f84613c1d565b613f16565b613c1d565b9050919050565b5f613f4a82613f1f565b9050919050565b5f613f5b82613f40565b9050919050565b613f6b81613f51565b82525050565b5f602082019050613f845f830184613f62565b92915050565b613f9381613e11565b8114613f9d575f80fd5b50565b5f81359050613fae81613f8a565b92915050565b5f819050919050565b613fc681613fb4565b8114613fd0575f80fd5b50565b5f81359050613fe181613fbd565b92915050565b5f805f60608486031215613ffe57613ffd613c19565b5b5f61400b86828701613fa0565b935050602061401c86828701613fd3565b925050604061402d86828701613fd3565b9150509250925092565b5f806040838503121561404d5761404c613c19565b5b5f61405a85828601613c63565b925050602061406b85828601613c63565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140b957607f821691505b6020821081036140cc576140cb614075565b5b50919050565b7f496e76616c6964206f776e6572000000000000000000000000000000000000005f82015250565b5f614106600d83613b79565b9150614111826140d2565b602082019050919050565b5f6020820190508181035f830152614133816140fa565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e740000005f82015250565b5f61416e601d83613b79565b91506141798261413a565b602082019050919050565b5f6020820190508181035f83015261419b81614162565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6141d982613c77565b91506141e483613c77565b92508282026141f281613c77565b91508282048414831517614209576142086141a2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61424782613c77565b915061425283613c77565b92508261426257614261614210565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6142c7603583613b79565b91506142d28261426d565b604082019050919050565b5f6020820190508181035f8301526142f4816142bb565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614355603483613b79565b9150614360826142fb565b604082019050919050565b5f6020820190508181035f83015261438281614349565b9050919050565b7f496e76616c696420616d6f756e740000000000000000000000000000000000005f82015250565b5f6143bd600e83613b79565b91506143c882614389565b602082019050919050565b5f6020820190508181035f8301526143ea816143b1565b9050919050565b5f6143fb82613c77565b915061440683613c77565b925082820190508082111561441e5761441d6141a2565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61447e603983613b79565b915061448982614424565b604082019050919050565b5f6020820190508181035f8301526144ab81614472565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115614507578086048111156144e3576144e26141a2565b5b60018516156144f25780820291505b8081029050614500856144b2565b94506144c7565b94509492505050565b5f8261451f57600190506145da565b8161452c575f90506145da565b8160018114614542576002811461454c5761457b565b60019150506145da565b60ff84111561455e5761455d6141a2565b5b8360020a915084821115614575576145746141a2565b5b506145da565b5060208310610133831016604e8410600b84101617156145b05782820a9050838111156145ab576145aa6141a2565b5b6145da565b6145bd84848460016144be565b925090508184048111156145d4576145d36141a2565b5b81810290505b9392505050565b5f6145eb82613c77565b91506145f683613e11565b92506146237fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614510565b905092915050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614685602f83613b79565b91506146908261462b565b604082019050919050565b5f6020820190508181035f8301526146b281614679565b9050919050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c5f8201527f6574206c6f776572207468616e20302e35250000000000000000000000000000602082015250565b5f614713603283613b79565b915061471e826146b9565b604082019050919050565b5f6020820190508181035f83015261474081614707565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c7565005f82015250565b5f61477b601f83613b79565b915061478682614747565b602082019050919050565b5f6020820190508181035f8301526147a88161476f565b9050919050565b7f4d757374206b6565702074617820617420343525206f72206c657373000000005f82015250565b5f6147e3601c83613b79565b91506147ee826147af565b602082019050919050565b5f6020820190508181035f830152614810816147d7565b9050919050565b7f496e76616c696420616e74692d647261696e65720000000000000000000000005f82015250565b5f61484b601483613b79565b915061485682614817565b602082019050919050565b5f6020820190508181035f8301526148788161483f565b9050919050565b61488881613fb4565b82525050565b5f60a0820190506148a15f83018861487f565b6148ae602083018761487f565b6148bb604083018661487f565b6148c86060830185613d1b565b6148d56080830184613dbe565b9695505050505050565b5f6060820190506148f25f83018661487f565b6148ff602083018561487f565b61490c6040830184613d1b565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614952600283614914565b915061495d8261491e565b600282019050919050565b5f819050919050565b61498261497d82613fb4565b614968565b82525050565b5f61499282614946565b915061499e8285614971565b6020820191506149ae8284614971565b6020820191508190509392505050565b5f6080820190506149d15f83018761487f565b6149de6020830186613e1d565b6149eb604083018561487f565b6149f8606083018461487f565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f614a35601183613b79565b9150614a4082614a01565b602082019050919050565b5f6020820190508181035f830152614a6281614a29565b9050919050565b7f4e6577206f776e6572206973205a45524f0000000000000000000000000000005f82015250565b5f614a9d601183613b79565b9150614aa882614a69565b602082019050919050565b5f6020820190508181035f830152614aca81614a91565b9050919050565b7f45524332303a204e6f74206f776e657220213d206164647265737328302900005f82015250565b5f614b05601e83613b79565b9150614b1082614ad1565b602082019050919050565b5f6020820190508181035f830152614b3281614af9565b9050919050565b7f45524332303a204e6f74207370656e64657220213d20616464726573732830295f82015250565b5f614b6d602083613b79565b9150614b7882614b39565b602082019050919050565b5f6020820190508181035f830152614b9a81614b61565b9050919050565b7f45524332303a20496e76616c69642066726f6d206164647265737300000000005f82015250565b5f614bd5601b83613b79565b9150614be082614ba1565b602082019050919050565b5f6020820190508181035f830152614c0281614bc9565b9050919050565b7f45524332303a20496e76616c696420746f2061646472657373000000000000005f82015250565b5f614c3d601983613b79565b9150614c4882614c09565b602082019050919050565b5f6020820190508181035f830152614c6a81614c31565b9050919050565b7f45524332303a2066726f6d20697320626c61636b206c697374000000000000005f82015250565b5f614ca5601983613b79565b9150614cb082614c71565b602082019050919050565b5f6020820190508181035f830152614cd281614c99565b9050919050565b7f45524332303a20746f20697320626c61636b206c6973740000000000000000005f82015250565b5f614d0d601783613b79565b9150614d1882614cd9565b602082019050919050565b5f6020820190508181035f830152614d3a81614d01565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614d75601683613b79565b9150614d8082614d41565b602082019050919050565b5f6020820190508181035f830152614da281614d69565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178546f6b656e416d6f756e7450657254786e2e0000000000000000000000602082015250565b5f614e03603583613b79565b9150614e0e82614da9565b604082019050919050565b5f6020820190508181035f830152614e3081614df7565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614e6b601383613b79565b9150614e7682614e37565b602082019050919050565b5f6020820190508181035f830152614e9881614e5f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178546f6b656e416d6f756e7450657254786e2e00000000000000000000602082015250565b5f614ef9603683613b79565b9150614f0482614e9f565b604082019050919050565b5f6020820190508181035f830152614f2681614eed565b9050919050565b5f81519050614f3b81613e45565b92915050565b5f60208284031215614f5657614f55613c19565b5b5f614f6384828501614f2d565b91505092915050565b5f60c082019050614f7f5f830189613dbe565b614f8c6020830188613dbe565b614f996040830187613dbe565b614fa66060830186613d1b565b614fb36080830185613d1b565b614fc060a0830184613d1b565b979650505050505050565b7f416e746920447261696e657220456e61626c65640000000000000000000000005f82015250565b5f614fff601483613b79565b915061500a82614fcb565b602082019050919050565b5f6020820190508181035f83015261502c81614ff3565b9050919050565b7f53656c6c2064697361626c656420696e207468652073616d6520626c6f636b005f82015250565b5f615067601f83613b79565b915061507282615033565b602082019050919050565b5f6020820190508181035f8301526150948161505b565b9050919050565b5f6150a582613c77565b91506150b083613c77565b92508282039050818111156150c8576150c76141a2565b5b92915050565b5f81905092915050565b50565b5f6150e65f836150ce565b91506150f1826150d8565b5f82019050919050565b5f615105826150db565b9150819050919050565b7f45524332303a204e6f742066726f6d20213d20616464726573732830290000005f82015250565b5f615143601d83613b79565b915061514e8261510f565b602082019050919050565b5f6020820190508181035f83015261517081615137565b9050919050565b7f45524332303a204e6f7420746f20213d206164647265737328302900000000005f82015250565b5f6151ab601b83613b79565b91506151b682615177565b602082019050919050565b5f6020820190508181035f8301526151d88161519f565b9050919050565b7f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e745f82015250565b5f615213602083613b79565b915061521e826151df565b602082019050919050565b5f6020820190508181035f83015261524081615207565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506152af81613c4d565b92915050565b5f602082840312156152ca576152c9613c19565b5b5f6152d7848285016152a1565b91505092915050565b5f819050919050565b5f6153036152fe6152f9846152e0565b613f16565b613c77565b9050919050565b615313816152e9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61534b81613c3c565b82525050565b5f61535c8383615342565b60208301905092915050565b5f602082019050919050565b5f61537e82615319565b6153888185615323565b935061539383615333565b805f5b838110156153c35781516153aa8882615351565b97506153b583615368565b925050600181019050615396565b5085935050505092915050565b5f60a0820190506153e35f830188613d1b565b6153f0602083018761530a565b81810360408301526154028186615374565b90506154116060830185613dbe565b61541e6080830184613d1b565b969550505050505056fea26469706673582212205007f781abb0304150c26d26fea1429f2a4eeb12e059cfac8848593a160638e264736f6c63430008150033

Deployed Bytecode

0x6080604052600436106102e7575f3560e01c8063715018a61161018f578063b79c1886116100db578063d4394cf811610094578063e27a55fe1161006e578063e27a55fe14610af2578063e96db1ef14610b1c578063f2fde38b14610b46578063fe784eaa14610b6e576102ee565b8063d4394cf814610a64578063d929a08314610a8c578063dd62ed3e14610ab6576102ee565b8063b79c18861461096e578063bae14e1d14610996578063be691883146109be578063c31c9c07146109e8578063c42c3f8814610a12578063c6a3064714610a3c576102ee565b8063924de9b711610148578063a9059cbb11610122578063a9059cbb146108a4578063af8f26e7146108e0578063b38d5ef41461090a578063b62496f514610932576102ee565b8063924de9b71461081657806395d89b411461083e578063a457c2d714610868576102ee565b8063715018a614610742578063751039fc1461075857806375f0a8741461076e5780637d673170146107985780638da5cb5b146107c25780638ea5220f146107ec576102ee565b8063395093511161024e5780636294437111610207578063685fbc6b116101e1578063685fbc6b146106785780636f498e21146106a25780637070678b146106de57806370a0823114610706576102ee565b8063629443711461060057806367b740e91461062857806368092bd914610650576102ee565b806339509351146104f657806345167f26146105325780634a62bb651461055a578063544d1ec9146105845780635df6e68e146105ac5780636215d72f146105d6576102ee565b806323b872dd116102a057806323b872dd146103fe57806326991cc81461043a5780632c81355e14610464578063313ce5671461048c5780633179aa93146104b657806333012411146104cc576102ee565b806306fdde03146102f2578063095ea7b31461031c5780630bd05b6914610358578063151d80391461036e57806318160ddd1461039857806322f59835146103c2576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610b96565b6040516103139190613bf9565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190613caa565b610c25565b60405161034f9190613d02565b60405180910390f35b348015610363575f80fd5b5061036c610c42565b005b348015610379575f80fd5b50610382610cf5565b60405161038f9190613d02565b60405180910390f35b3480156103a3575f80fd5b506103ac610d08565b6040516103b99190613d2a565b60405180910390f35b3480156103cd575f80fd5b506103e860048036038101906103e39190613d43565b610d11565b6040516103f59190613d02565b60405180910390f35b348015610409575f80fd5b50610424600480360381019061041f9190613d6e565b610d2e565b6040516104319190613d02565b60405180910390f35b348015610445575f80fd5b5061044e610e20565b60405161045b9190613dcd565b60405180910390f35b34801561046f575f80fd5b5061048a60048036038101906104859190613de6565b610e45565b005b348015610497575f80fd5b506104a0610f92565b6040516104ad9190613e2c565b60405180910390f35b3480156104c1575f80fd5b506104ca610f9a565b005b3480156104d7575f80fd5b506104e06110a3565b6040516104ed9190613d2a565b60405180910390f35b348015610501575f80fd5b5061051c60048036038101906105179190613caa565b6110a9565b6040516105299190613d02565b60405180910390f35b34801561053d575f80fd5b5061055860048036038101906105539190613e6f565b611150565b005b348015610565575f80fd5b5061056e6112b3565b60405161057b9190613d02565b60405180910390f35b34801561058f575f80fd5b506105aa60048036038101906105a59190613de6565b6112c5565b005b3480156105b7575f80fd5b506105c06113ea565b6040516105cd9190613d2a565b60405180910390f35b3480156105e1575f80fd5b506105ea6113f0565b6040516105f79190613d02565b60405180910390f35b34801561060b575f80fd5b5061062660048036038101906106219190613ead565b611403565b005b348015610633575f80fd5b5061064e60048036038101906106499190613de6565b61149c565b005b34801561065b575f80fd5b5061067660048036038101906106719190613e6f565b6115c1565b005b348015610683575f80fd5b5061068c611695565b6040516106999190613d2a565b60405180910390f35b3480156106ad575f80fd5b506106c860048036038101906106c39190613d43565b61169b565b6040516106d59190613d02565b60405180910390f35b3480156106e9575f80fd5b5061070460048036038101906106ff9190613e6f565b6116b8565b005b348015610711575f80fd5b5061072c60048036038101906107279190613d43565b61178c565b6040516107399190613d2a565b60405180910390f35b34801561074d575f80fd5b506107566117d2565b005b348015610763575f80fd5b5061076c611859565b005b348015610779575f80fd5b506107826118f0565b60405161078f9190613dcd565b60405180910390f35b3480156107a3575f80fd5b506107ac611916565b6040516107b99190613d2a565b60405180910390f35b3480156107cd575f80fd5b506107d661191c565b6040516107e39190613dcd565b60405180910390f35b3480156107f7575f80fd5b50610800611944565b60405161080d9190613dcd565b60405180910390f35b348015610821575f80fd5b5061083c60048036038101906108379190613ead565b611969565b005b348015610849575f80fd5b50610852611a02565b60405161085f9190613bf9565b60405180910390f35b348015610873575f80fd5b5061088e60048036038101906108899190613caa565b611a92565b60405161089b9190613d02565b60405180910390f35b3480156108af575f80fd5b506108ca60048036038101906108c59190613caa565b611b78565b6040516108d79190613d02565b60405180910390f35b3480156108eb575f80fd5b506108f4611b95565b6040516109019190613d2a565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613ed8565b611b9b565b005b34801561093d575f80fd5b5061095860048036038101906109539190613d43565b611c85565b6040516109659190613d02565b60405180910390f35b348015610979575f80fd5b50610994600480360381019061098f9190613ed8565b611ca2565b005b3480156109a1575f80fd5b506109bc60048036038101906109b79190613d43565b611d8c565b005b3480156109c9575f80fd5b506109d2611eba565b6040516109df9190613d2a565b60405180910390f35b3480156109f3575f80fd5b506109fc611ec0565b604051610a099190613f71565b60405180910390f35b348015610a1d575f80fd5b50610a26611ee5565b604051610a339190613d2a565b60405180910390f35b348015610a47575f80fd5b50610a626004803603810190610a5d9190613e6f565b611eeb565b005b348015610a6f575f80fd5b50610a8a6004803603810190610a859190613fe7565b611fbf565b005b348015610a97575f80fd5b50610aa0612241565b604051610aad9190613d02565b60405180910390f35b348015610ac1575f80fd5b50610adc6004803603810190610ad79190614037565b612253565b604051610ae99190613d2a565b60405180910390f35b348015610afd575f80fd5b50610b066122d5565b604051610b139190613d2a565b60405180910390f35b348015610b27575f80fd5b50610b306122db565b604051610b3d9190613d2a565b60405180910390f35b348015610b51575f80fd5b50610b6c6004803603810190610b679190613d43565b6122e1565b005b348015610b79575f80fd5b50610b946004803603810190610b8f9190613de6565b6123d7565b005b60605f8054610ba4906140a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd0906140a2565b8015610c1b5780601f10610bf257610100808354040283529160200191610c1b565b820191905f5260205f20905b815481529060010190602001808311610bfe57829003601f168201915b5050505050905090565b5f610c38610c316124ed565b84846124f4565b6001905092915050565b610c4a6124ed565b73ffffffffffffffffffffffffffffffffffffffff16610c6861191c565b73ffffffffffffffffffffffffffffffffffffffff1614610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb59061411c565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b600b60019054906101000a900460ff1681565b5f600254905090565b600e602052805f5260405f205f915054906101000a900460ff1681565b5f610d3a8484846126b7565b5f60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d816124ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790614184565b60405180910390fd5b610e1485610e0c6124ed565b8584036124f4565b60019150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e4d6124ed565b73ffffffffffffffffffffffffffffffffffffffff16610e6b61191c565b73ffffffffffffffffffffffffffffffffffffffff1614610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb89061411c565b60405180910390fd5b620186a06001610ecf610d08565b610ed991906141cf565b610ee3919061423d565b811015610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c906142dd565b60405180910390fd5b6103e86005610f32610d08565b610f3c91906141cf565b610f46919061423d565b811115610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f9061436b565b60405180910390fd5b8060088190555050565b5f6012905090565b610fa26124ed565b73ffffffffffffffffffffffffffffffffffffffff16610fc061191c565b73ffffffffffffffffffffffffffffffffffffffff1614611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d9061411c565b60405180910390fd5b5f6110203061178c565b90505f8111611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b906143d3565b60405180910390fd5b600160175f6101000a81548160ff021916908315150217905550611087816133c1565b5f60175f6101000a81548160ff02191690831515021790555050565b60155481565b5f6111466110b56124ed565b848460045f6110c26124ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461114191906143f1565b6124f4565b6001905092915050565b6111586124ed565b73ffffffffffffffffffffffffffffffffffffffff1661117661191c565b73ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c39061411c565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361125b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125290614494565b60405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60105f9054906101000a900460ff1681565b6112cd6124ed565b73ffffffffffffffffffffffffffffffffffffffff166112eb61191c565b73ffffffffffffffffffffffffffffffffffffffff1614611341576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113389061411c565b60405180910390fd5b611349610f92565b600a61135591906145e1565b6103e86001611362610d08565b61136c91906141cf565b611376919061423d565b611380919061423d565b8110156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b99061469b565b60405180910390fd5b6113ca610f92565b600a6113d691906145e1565b816113e191906141cf565b600a8190555050565b60145481565b601060019054906101000a900460ff1681565b61140b6124ed565b73ffffffffffffffffffffffffffffffffffffffff1661142961191c565b73ffffffffffffffffffffffffffffffffffffffff161461147f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114769061411c565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6114a46124ed565b73ffffffffffffffffffffffffffffffffffffffff166114c261191c565b73ffffffffffffffffffffffffffffffffffffffff1614611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f9061411c565b60405180910390fd5b611520610f92565b600a61152c91906145e1565b6103e86005611539610d08565b61154391906141cf565b61154d919061423d565b611557919061423d565b811015611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090614729565b60405180910390fd5b6115a1610f92565b600a6115ad91906145e1565b816115b891906141cf565b60098190555050565b6115c96124ed565b73ffffffffffffffffffffffffffffffffffffffff166115e761191c565b73ffffffffffffffffffffffffffffffffffffffff161461163d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116349061411c565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60095481565b600d602052805f5260405f205f915054906101000a900460ff1681565b6116c06124ed565b73ffffffffffffffffffffffffffffffffffffffff166116de61191c565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b9061411c565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6117da6124ed565b73ffffffffffffffffffffffffffffffffffffffff166117f861191c565b73ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118459061411c565b60405180910390fd5b6118575f613567565b565b6118616124ed565b73ffffffffffffffffffffffffffffffffffffffff1661187f61191c565b73ffffffffffffffffffffffffffffffffffffffff16146118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc9061411c565b60405180910390fd5b5f60105f6101000a81548160ff021916908315150217905550565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119716124ed565b73ffffffffffffffffffffffffffffffffffffffff1661198f61191c565b73ffffffffffffffffffffffffffffffffffffffff16146119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc9061411c565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b606060018054611a11906140a2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3d906140a2565b8015611a885780601f10611a5f57610100808354040283529160200191611a88565b820191905f5260205f20905b815481529060010190602001808311611a6b57829003601f168201915b5050505050905090565b5f8060045f611a9f6124ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5090614791565b60405180910390fd5b611b6d611b646124ed565b858584036124f4565b600191505092915050565b5f611b8b611b846124ed565b84846126b7565b6001905092915050565b60165481565b611ba36124ed565b73ffffffffffffffffffffffffffffffffffffffff16611bc161191c565b73ffffffffffffffffffffffffffffffffffffffff1614611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e9061411c565b60405180910390fd5b8160158190555080601681905550601654601554611c3591906143f1565b601481905550602d6014541115611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c78906147f9565b60405180910390fd5b5050565b600f602052805f5260405f205f915054906101000a900460ff1681565b611caa6124ed565b73ffffffffffffffffffffffffffffffffffffffff16611cc861191c565b73ffffffffffffffffffffffffffffffffffffffff1614611d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d159061411c565b60405180910390fd5b8160128190555080601381905550601354601254611d3c91906143f1565b601181905550602d6011541115611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f906147f9565b60405180910390fd5b5050565b611d946124ed565b73ffffffffffffffffffffffffffffffffffffffff16611db261191c565b73ffffffffffffffffffffffffffffffffffffffff1614611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff9061411c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6d90614861565b60405180910390fd5b80601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b611ef36124ed565b73ffffffffffffffffffffffffffffffffffffffff16611f1161191c565b73ffffffffffffffffffffffffffffffffffffffff1614611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e9061411c565b60405180910390fd5b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525080519060200120463060405160200161207195949392919061488e565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f6040516020016120fb939291906148df565b6040516020818303038152906040528051906020012090505f8282604051602001612127929190614988565b6040516020818303038152906040528051906020012090505f6001828888886040515f815260200160405260405161216294939291906149be565b6020604051602081039080840390855afa158015612182573d5f803e3d5ffd5b50505060206040510351905061219661191c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90614a4b565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555050505050505050565b600b5f9054906101000a900460ff1681565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b60125481565b6122e96124ed565b73ffffffffffffffffffffffffffffffffffffffff1661230761191c565b73ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123549061411c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c290614ab3565b60405180910390fd5b6123d481613567565b50565b6123df6124ed565b73ffffffffffffffffffffffffffffffffffffffff166123fd61191c565b73ffffffffffffffffffffffffffffffffffffffff1614612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a9061411c565b60405180910390fd5b5f61245d3061178c565b90505f8211801561246e5750808211155b6124ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a4906143d3565b60405180910390fd5b600160175f6101000a81548160ff0219169083151502179055506124d0826133c1565b5f60175f6101000a81548160ff0219169083151502179055505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255990614b1b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c790614b83565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126aa9190613d2a565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271c90614beb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278a90614c53565b60405180910390fd5b60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614cbb565b60405180910390fd5b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90614d23565b60405180910390fd5b5f81036128be576128b983835f61362a565b6133bc565b5f600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1690505f600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905060105f9054906101000a900460ff1615612da85761297461191c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156129e257506129b261191c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a1a57505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a54575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a6c575060175f9054906101000a900460ff16155b15612da757600b5f9054906101000a900460ff16612b5f57600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b1f5750600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5590614d8b565b60405180910390fd5b5b818015612bb35750600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c5a57600a54831115612bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf490614e19565b60405180910390fd5b600954612c098561178c565b84612c1491906143f1565b1115612c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4c90614e81565b60405180910390fd5b612da6565b808015612cae5750600d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cfd57600a54831115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef90614f0f565b60405180910390fd5b612da5565b600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612da457600954612d578561178c565b84612d6291906143f1565b1115612da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9a90614e81565b60405180910390fd5b5b5b5b5b5b5f73ffffffffffffffffffffffffffffffffffffffff16601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612e9c5750601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612e5c9190613dcd565b602060405180830381865afa158015612e77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e9b9190614f41565b5b15612fb2575f601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc878760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954600a546008546040518763ffffffff1660e01b8152600401612f2e96959493929190614f6c565b6020604051808303815f875af1158015612f4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f6e9190614f41565b905080612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790615015565b60405180910390fd5b505b808015612feb57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156130035750601060019054906101000a900460ff165b15613111575f60195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054148061308f57504360195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054105b6130ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c59061507d565b60405180910390fd5b4360195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5f61311b3061178c565b90505f6008548210159050600b60019054906101000a900460ff16801561313f5750805b8015613157575060175f9054906101000a900460ff16155b8015613161575083155b80156131b45750600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156132075750600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561324857600160175f6101000a81548160ff02191690831515021790555061322e6138a2565b5f60175f6101000a81548160ff0219169083151502179055505b5f60175f9054906101000a900460ff16159050600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132f65750600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156132ff575f90505b5f81156133aa5784801561331457505f601154115b156133485761334160646133336011548a6138f090919063ffffffff16565b61390590919063ffffffff16565b9050613387565b85801561335657505f601454115b156133865761338360646133756014548a6138f090919063ffffffff16565b61390590919063ffffffff16565b90505b5b5f81111561339b5761339a89308361362a565b5b80876133a7919061509b565b96505b6133b589898961362a565b5050505050505b505050565b5f804790506133cf8361391a565b5f6133e38247613b5090919063ffffffff16565b90505f6013546016546133f691906143f1565b90505f60115460145461340991906143f1565b90505f821415801561341b57505f8114155b156134d4575f6134468261343885876138f090919063ffffffff16565b61390590919063ffffffff16565b9050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161348d906150fb565b5f6040518083038185875af1925050503d805f81146134c7576040519150601f19603f3d011682016040523d82523d5f602084013e6134cc565b606091505b505080965050505b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161351a906150fb565b5f6040518083038185875af1925050503d805f8114613554576040519150601f19603f3d011682016040523d82523d5f602084013e613559565b606091505b505080955050505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368f90615159565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136fd906151c1565b60405180910390fd5b613711838383613b65565b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378c90615229565b60405180910390fd5b81810360035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461382591906143f1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138899190613d2a565b60405180910390a361389c848484613b6a565b50505050565b5f6138ac3061178c565b90505f81036138bb57506138ee565b60146008546138ca91906141cf565b8111156138e35760146008546138e091906141cf565b90505b6138ec816133c1565b505b565b5f81836138fd91906141cf565b905092915050565b5f8183613912919061423d565b905092915050565b5f600267ffffffffffffffff81111561393657613935615247565b5b6040519080825280602002602001820160405280156139645781602001602082028036833780820191505090505b50905030815f8151811061397b5761397a615274565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a1f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4391906152b5565b81600181518110613a5757613a56615274565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613abd3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846124f4565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613b1f9594939291906153d0565b5f604051808303815f87803b158015613b36575f80fd5b505af1158015613b48573d5f803e3d5ffd5b505050505050565b5f8183613b5d919061509b565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613ba6578082015181840152602081019050613b8b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613bcb82613b6f565b613bd58185613b79565b9350613be5818560208601613b89565b613bee81613bb1565b840191505092915050565b5f6020820190508181035f830152613c118184613bc1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613c4682613c1d565b9050919050565b613c5681613c3c565b8114613c60575f80fd5b50565b5f81359050613c7181613c4d565b92915050565b5f819050919050565b613c8981613c77565b8114613c93575f80fd5b50565b5f81359050613ca481613c80565b92915050565b5f8060408385031215613cc057613cbf613c19565b5b5f613ccd85828601613c63565b9250506020613cde85828601613c96565b9150509250929050565b5f8115159050919050565b613cfc81613ce8565b82525050565b5f602082019050613d155f830184613cf3565b92915050565b613d2481613c77565b82525050565b5f602082019050613d3d5f830184613d1b565b92915050565b5f60208284031215613d5857613d57613c19565b5b5f613d6584828501613c63565b91505092915050565b5f805f60608486031215613d8557613d84613c19565b5b5f613d9286828701613c63565b9350506020613da386828701613c63565b9250506040613db486828701613c96565b9150509250925092565b613dc781613c3c565b82525050565b5f602082019050613de05f830184613dbe565b92915050565b5f60208284031215613dfb57613dfa613c19565b5b5f613e0884828501613c96565b91505092915050565b5f60ff82169050919050565b613e2681613e11565b82525050565b5f602082019050613e3f5f830184613e1d565b92915050565b613e4e81613ce8565b8114613e58575f80fd5b50565b5f81359050613e6981613e45565b92915050565b5f8060408385031215613e8557613e84613c19565b5b5f613e9285828601613c63565b9250506020613ea385828601613e5b565b9150509250929050565b5f60208284031215613ec257613ec1613c19565b5b5f613ecf84828501613e5b565b91505092915050565b5f8060408385031215613eee57613eed613c19565b5b5f613efb85828601613c96565b9250506020613f0c85828601613c96565b9150509250929050565b5f819050919050565b5f613f39613f34613f2f84613c1d565b613f16565b613c1d565b9050919050565b5f613f4a82613f1f565b9050919050565b5f613f5b82613f40565b9050919050565b613f6b81613f51565b82525050565b5f602082019050613f845f830184613f62565b92915050565b613f9381613e11565b8114613f9d575f80fd5b50565b5f81359050613fae81613f8a565b92915050565b5f819050919050565b613fc681613fb4565b8114613fd0575f80fd5b50565b5f81359050613fe181613fbd565b92915050565b5f805f60608486031215613ffe57613ffd613c19565b5b5f61400b86828701613fa0565b935050602061401c86828701613fd3565b925050604061402d86828701613fd3565b9150509250925092565b5f806040838503121561404d5761404c613c19565b5b5f61405a85828601613c63565b925050602061406b85828601613c63565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140b957607f821691505b6020821081036140cc576140cb614075565b5b50919050565b7f496e76616c6964206f776e6572000000000000000000000000000000000000005f82015250565b5f614106600d83613b79565b9150614111826140d2565b602082019050919050565b5f6020820190508181035f830152614133816140fa565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e740000005f82015250565b5f61416e601d83613b79565b91506141798261413a565b602082019050919050565b5f6020820190508181035f83015261419b81614162565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6141d982613c77565b91506141e483613c77565b92508282026141f281613c77565b91508282048414831517614209576142086141a2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61424782613c77565b915061425283613c77565b92508261426257614261614210565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6142c7603583613b79565b91506142d28261426d565b604082019050919050565b5f6020820190508181035f8301526142f4816142bb565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614355603483613b79565b9150614360826142fb565b604082019050919050565b5f6020820190508181035f83015261438281614349565b9050919050565b7f496e76616c696420616d6f756e740000000000000000000000000000000000005f82015250565b5f6143bd600e83613b79565b91506143c882614389565b602082019050919050565b5f6020820190508181035f8301526143ea816143b1565b9050919050565b5f6143fb82613c77565b915061440683613c77565b925082820190508082111561441e5761441d6141a2565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61447e603983613b79565b915061448982614424565b604082019050919050565b5f6020820190508181035f8301526144ab81614472565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115614507578086048111156144e3576144e26141a2565b5b60018516156144f25780820291505b8081029050614500856144b2565b94506144c7565b94509492505050565b5f8261451f57600190506145da565b8161452c575f90506145da565b8160018114614542576002811461454c5761457b565b60019150506145da565b60ff84111561455e5761455d6141a2565b5b8360020a915084821115614575576145746141a2565b5b506145da565b5060208310610133831016604e8410600b84101617156145b05782820a9050838111156145ab576145aa6141a2565b5b6145da565b6145bd84848460016144be565b925090508184048111156145d4576145d36141a2565b5b81810290505b9392505050565b5f6145eb82613c77565b91506145f683613e11565b92506146237fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614510565b905092915050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614685602f83613b79565b91506146908261462b565b604082019050919050565b5f6020820190508181035f8301526146b281614679565b9050919050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c5f8201527f6574206c6f776572207468616e20302e35250000000000000000000000000000602082015250565b5f614713603283613b79565b915061471e826146b9565b604082019050919050565b5f6020820190508181035f83015261474081614707565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c7565005f82015250565b5f61477b601f83613b79565b915061478682614747565b602082019050919050565b5f6020820190508181035f8301526147a88161476f565b9050919050565b7f4d757374206b6565702074617820617420343525206f72206c657373000000005f82015250565b5f6147e3601c83613b79565b91506147ee826147af565b602082019050919050565b5f6020820190508181035f830152614810816147d7565b9050919050565b7f496e76616c696420616e74692d647261696e65720000000000000000000000005f82015250565b5f61484b601483613b79565b915061485682614817565b602082019050919050565b5f6020820190508181035f8301526148788161483f565b9050919050565b61488881613fb4565b82525050565b5f60a0820190506148a15f83018861487f565b6148ae602083018761487f565b6148bb604083018661487f565b6148c86060830185613d1b565b6148d56080830184613dbe565b9695505050505050565b5f6060820190506148f25f83018661487f565b6148ff602083018561487f565b61490c6040830184613d1b565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614952600283614914565b915061495d8261491e565b600282019050919050565b5f819050919050565b61498261497d82613fb4565b614968565b82525050565b5f61499282614946565b915061499e8285614971565b6020820191506149ae8284614971565b6020820191508190509392505050565b5f6080820190506149d15f83018761487f565b6149de6020830186613e1d565b6149eb604083018561487f565b6149f8606083018461487f565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f614a35601183613b79565b9150614a4082614a01565b602082019050919050565b5f6020820190508181035f830152614a6281614a29565b9050919050565b7f4e6577206f776e6572206973205a45524f0000000000000000000000000000005f82015250565b5f614a9d601183613b79565b9150614aa882614a69565b602082019050919050565b5f6020820190508181035f830152614aca81614a91565b9050919050565b7f45524332303a204e6f74206f776e657220213d206164647265737328302900005f82015250565b5f614b05601e83613b79565b9150614b1082614ad1565b602082019050919050565b5f6020820190508181035f830152614b3281614af9565b9050919050565b7f45524332303a204e6f74207370656e64657220213d20616464726573732830295f82015250565b5f614b6d602083613b79565b9150614b7882614b39565b602082019050919050565b5f6020820190508181035f830152614b9a81614b61565b9050919050565b7f45524332303a20496e76616c69642066726f6d206164647265737300000000005f82015250565b5f614bd5601b83613b79565b9150614be082614ba1565b602082019050919050565b5f6020820190508181035f830152614c0281614bc9565b9050919050565b7f45524332303a20496e76616c696420746f2061646472657373000000000000005f82015250565b5f614c3d601983613b79565b9150614c4882614c09565b602082019050919050565b5f6020820190508181035f830152614c6a81614c31565b9050919050565b7f45524332303a2066726f6d20697320626c61636b206c697374000000000000005f82015250565b5f614ca5601983613b79565b9150614cb082614c71565b602082019050919050565b5f6020820190508181035f830152614cd281614c99565b9050919050565b7f45524332303a20746f20697320626c61636b206c6973740000000000000000005f82015250565b5f614d0d601783613b79565b9150614d1882614cd9565b602082019050919050565b5f6020820190508181035f830152614d3a81614d01565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614d75601683613b79565b9150614d8082614d41565b602082019050919050565b5f6020820190508181035f830152614da281614d69565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178546f6b656e416d6f756e7450657254786e2e0000000000000000000000602082015250565b5f614e03603583613b79565b9150614e0e82614da9565b604082019050919050565b5f6020820190508181035f830152614e3081614df7565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614e6b601383613b79565b9150614e7682614e37565b602082019050919050565b5f6020820190508181035f830152614e9881614e5f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178546f6b656e416d6f756e7450657254786e2e00000000000000000000602082015250565b5f614ef9603683613b79565b9150614f0482614e9f565b604082019050919050565b5f6020820190508181035f830152614f2681614eed565b9050919050565b5f81519050614f3b81613e45565b92915050565b5f60208284031215614f5657614f55613c19565b5b5f614f6384828501614f2d565b91505092915050565b5f60c082019050614f7f5f830189613dbe565b614f8c6020830188613dbe565b614f996040830187613dbe565b614fa66060830186613d1b565b614fb36080830185613d1b565b614fc060a0830184613d1b565b979650505050505050565b7f416e746920447261696e657220456e61626c65640000000000000000000000005f82015250565b5f614fff601483613b79565b915061500a82614fcb565b602082019050919050565b5f6020820190508181035f83015261502c81614ff3565b9050919050565b7f53656c6c2064697361626c656420696e207468652073616d6520626c6f636b005f82015250565b5f615067601f83613b79565b915061507282615033565b602082019050919050565b5f6020820190508181035f8301526150948161505b565b9050919050565b5f6150a582613c77565b91506150b083613c77565b92508282039050818111156150c8576150c76141a2565b5b92915050565b5f81905092915050565b50565b5f6150e65f836150ce565b91506150f1826150d8565b5f82019050919050565b5f615105826150db565b9150819050919050565b7f45524332303a204e6f742066726f6d20213d20616464726573732830290000005f82015250565b5f615143601d83613b79565b915061514e8261510f565b602082019050919050565b5f6020820190508181035f83015261517081615137565b9050919050565b7f45524332303a204e6f7420746f20213d206164647265737328302900000000005f82015250565b5f6151ab601b83613b79565b91506151b682615177565b602082019050919050565b5f6020820190508181035f8301526151d88161519f565b9050919050565b7f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e745f82015250565b5f615213602083613b79565b915061521e826151df565b602082019050919050565b5f6020820190508181035f83015261524081615207565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506152af81613c4d565b92915050565b5f602082840312156152ca576152c9613c19565b5b5f6152d7848285016152a1565b91505092915050565b5f819050919050565b5f6153036152fe6152f9846152e0565b613f16565b613c77565b9050919050565b615313816152e9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61534b81613c3c565b82525050565b5f61535c8383615342565b60208301905092915050565b5f602082019050919050565b5f61537e82615319565b6153888185615323565b935061539383615333565b805f5b838110156153c35781516153aa8882615351565b97506153b583615368565b925050600181019050615396565b5085935050505092915050565b5f60a0820190506153e35f830188613d1b565b6153f0602083018761530a565b81810360408301526154028186615374565b90506154116060830185613dbe565b61541e6080830184613d1b565b969550505050505056fea26469706673582212205007f781abb0304150c26d26fea1429f2a4eeb12e059cfac8848593a160638e264736f6c63430008150033

Deployed Bytecode Sourcemap

15444:12943:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10868:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11456:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18213:116;;;;;;;;;;;;;:::i;:::-;;15763:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11189:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15944:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12220:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15561:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19989:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11088:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22603:260;;;;;;;;;;;;;:::i;:::-;;16293:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12853:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21811:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16067:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20736:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16260:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16107:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19770:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20417:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21051:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15633:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15874:61;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19365:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11305:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1333:103;;;;;;;;;;;;;:::i;:::-;;19678:84;;;;;;;;;;;;;:::i;:::-;;15804:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15593:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1050:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15841:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19880:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10976:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13147:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12659:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16330:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21170:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16001:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21487:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22119:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16226:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15518:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15678:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19546:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18337:1020;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15722:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12036:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16154:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16188:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1145:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22315:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10868:100;10922:13;10955:5;10948:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10868:100;:::o;11456:194::-;11564:4;11581:39;11590:12;:10;:12::i;:::-;11604:7;11613:6;11581:8;:39::i;:::-;11638:4;11631:11;;11456:194;;;;:::o;18213:116::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18287:4:::1;18270:14;;:21;;;;;;;;;;;;;;;;;;18317:4;18302:12;;:19;;;;;;;;;;;;;;;;;;18213:116::o:0;15763:32::-;;;;;;;;;;;;;:::o;11189:108::-;11250:7;11277:12;;11270:19;;11189:108;:::o;15944:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;12220:431::-;12351:4;12368:27;12378:4;12384:2;12388:6;12368:9;:27::i;:::-;12406:16;12425:11;:17;12437:4;12425:17;;;;;;;;;;;;;;;:31;12443:12;:10;:12::i;:::-;12425:31;;;;;;;;;;;;;;;;12406:50;;12487:6;12475:8;:18;;12467:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;12563:47;12572:4;12578:12;:10;:12::i;:::-;12603:6;12592:8;:17;12563:8;:47::i;:::-;12639:4;12632:11;;;12220:431;;;;;:::o;15561:23::-;;;;;;;;;;;;;:::o;19989:420::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20127:6:::1;20122:1;20106:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20105:28;;;;:::i;:::-;20095:6;:38;;20073:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20279:4;20274:1;20258:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20257:26;;;;:::i;:::-;20247:6;:36;;20225:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;20395:6;20374:18;:27;;;;19989:420:::0;:::o;11088:93::-;11146:5;11171:2;11164:9;;11088:93;:::o;22603:260::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22663:20:::1;22686:24;22704:4;22686:9;:24::i;:::-;22663:47;;22744:1;22729:12;:16;22721:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;22789:4;22777:9;;:16;;;;;;;;;;;;;;;;;;22804:23;22814:12;22804:9;:23::i;:::-;22850:5;22838:9;;:17;;;;;;;;;;;;;;;;;;22652:211;22603:260::o:0;16293:30::-;;;;:::o;12853:286::-;12964:4;12981:128;13004:12;:10;:12::i;:::-;13031:7;13090:8;13053:11;:25;13065:12;:10;:12::i;:::-;13053:25;;;;;;;;;;;;;;;:34;13079:7;13053:34;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;12981:8;:128::i;:::-;13127:4;13120:11;;12853:286;;;;:::o;21811:300::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21960:8:::1;;;;;;;;;;;21952:16;;:4;:16;;::::0;21930:123:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22098:5;22064:25;:31;22090:4;22064:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21811:300:::0;;:::o;16067:33::-;;;;;;;;;;;;;:::o;20736:307::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20888:10:::1;:8;:10::i;:::-;20882:2;:16;;;;:::i;:::-;20873:4;20868:1;20852:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20851:26;;;;:::i;:::-;20850:49;;;;:::i;:::-;20840:6;:59;;20818:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;21024:10;:8;:10::i;:::-;21018:2;:16;;;;:::i;:::-;21008:6;:27;;;;:::i;:::-;20985:20;:50;;;;20736:307:::0;:::o;16260:26::-;;;;:::o;16107:38::-;;;;;;;;;;;;;:::o;19770:102::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19860:4:::1;19838:19;;:26;;;;;;;;;;;;;;;;;;19770:102:::0;:::o;20417:311::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20567:10:::1;:8;:10::i;:::-;20561:2;:16;;;;:::i;:::-;20552:4;20547:1;20531:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20530:26;;;;:::i;:::-;20529:49;;;;:::i;:::-;20519:6;:59;;20497:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;20709:10;:8;:10::i;:::-;20703:2;:16;;;;:::i;:::-;20693:6;:27;;;;:::i;:::-;20667:23;:53;;;;20417:311:::0;:::o;21051:111::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21148:6:::1;21130:9;:15;21140:4;21130:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;21051:111:::0;;:::o;15633:38::-;;;;:::o;15874:61::-;;;;;;;;;;;;;;;;;;;;;;:::o;19365:173::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19525:5:::1;19487:29;:35;19517:4;19487:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;19365:173:::0;;:::o;11305:143::-;11395:7;11422:9;:18;11432:7;11422:18;;;;;;;;;;;;;;;;11415:25;;11305:143;;;:::o;1333:103::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1398:30:::1;1425:1;1398:18;:30::i;:::-;1333:103::o:0;19678:84::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19749:5:::1;19732:14;;:22;;;;;;;;;;;;;;;;;;19678:84::o:0;15804:30::-;;;;;;;;;;;;;:::o;15593:33::-;;;;:::o;1050:87::-;1096:7;1123:6;;;;;;;;;;;1116:13;;1050:87;:::o;15841:24::-;;;;;;;;;;;;;:::o;19880:101::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19966:7:::1;19951:12;;:22;;;;;;;;;;;;;;;;;;19880:101:::0;:::o;10976:104::-;11032:13;11065:7;11058:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10976:104;:::o;13147:385::-;13258:4;13275:16;13294:11;:25;13306:12;:10;:12::i;:::-;13294:25;;;;;;;;;;;;;;;:34;13320:7;13294:34;;;;;;;;;;;;;;;;13275:53;;13359:8;13347;:20;;13339:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;13439:52;13448:12;:10;:12::i;:::-;13462:7;13482:8;13471;:19;13439:8;:52::i;:::-;13520:4;13513:11;;;13147:385;;;;:::o;12659:186::-;12763:4;12780:35;12790:12;:10;:12::i;:::-;12804:2;12808:6;12780:9;:35::i;:::-;12833:4;12826:11;;12659:186;;;;:::o;16330:24::-;;;;:::o;21170:309::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21306:12:::1;21288:15;:30;;;;21341:9;21329;:21;;;;21393:9;;21375:15;;:27;;;;:::i;:::-;21361:11;:41;;;;21436:2;21421:11;;:17;;21413:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21170:309:::0;;:::o;16001:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;21487:316::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21625:12:::1;21606:16;:31;;;;21661:9;21648:10;:22;;;;21715:10;;21696:16;;:29;;;;:::i;:::-;21681:12;:44;;;;21760:2;21744:12;;:18;;21736:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;21487:316:::0;;:::o;22119:188::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22231:3:::1;22205:30;;:14;:30;;::::0;22197:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22285:14;22271:11;;:28;;;;;;;;;;;;;;;;;;22119:188:::0;:::o;16226:25::-;;;;:::o;15518:36::-;;;;;;;;;;;;;:::o;15678:35::-;;;;:::o;19546:124::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19657:5:::1;19629:16;:25;19646:7;19629:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19546:124:::0;;:::o;18337:1020::-;18423:18;18497:135;18661:22;;;;;;;;;;;;;;;;;18651:33;;;;;;18713:10;;;;;;;;;;;;;;;;;18703:21;;;;;;18743:13;18783:4;18468:335;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18444:370;;;;;;18423:391;;18825:18;18899:49;18977:23;;;;;;;;;;;;;;;;;18967:34;;;;;;19028:1;18870:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18846:210;;;;;;18825:231;;19067:14;19137:10;19149;19108:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19084:87;;;;;;19067:104;;19184:14;19201:26;19211:6;19219:1;19222;19225;19201:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19184:43;;19256:7;:5;:7::i;:::-;19246:17;;:6;:17;;;19238:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;19315:4;19298:14;;:21;;;;;;;;;;;;;;;;;;19345:4;19330:12;;:19;;;;;;;;;;;;;;;;;;18412:945;;;;18337:1020;;;:::o;15722:34::-;;;;;;;;;;;;;:::o;12036:176::-;12150:7;12177:11;:18;12189:5;12177:18;;;;;;;;;;;;;;;:27;12196:7;12177:27;;;;;;;;;;;;;;;;12170:34;;12036:176;;;;:::o;16154:27::-;;;;:::o;16188:31::-;;;;:::o;1145:180::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1254:1:::1;1234:22;;:8;:22;;::::0;1226:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1289:28;1308:8;1289:18;:28::i;:::-;1145:180:::0;:::o;22315:280::-;992:12;:10;:12::i;:::-;981:23;;:7;:5;:7::i;:::-;:23;;;973:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;22381:20:::1;22404:24;22422:4;22404:9;:24::i;:::-;22381:47;;22456:1;22447:6;:10;:36;;;;;22471:12;22461:6;:22;;22447:36;22439:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22527:4;22515:9;;:16;;;;;;;;;;;;;;;;;;22542:17;22552:6;22542:9;:17::i;:::-;22582:5;22570:9;;:17;;;;;;;;;;;;;;;;;;22370:225;22315:280:::0;:::o;462:98::-;515:7;542:10;535:17;;462:98;:::o;11658:370::-;11811:1;11794:19;;:5;:19;;;11786:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;11886:1;11867:21;;:7;:21;;;11859:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11966:6;11936:11;:18;11948:5;11936:18;;;;;;;;;;;;;;;:27;11955:7;11936:27;;;;;;;;;;;;;;;:36;;;;12004:7;11988:32;;11997:5;11988:32;;;12013:6;11988:32;;;;;;:::i;:::-;;;;;;;;11658:370;;;:::o;23827:3838::-;23975:1;23959:18;;:4;:18;;;23951:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24042:1;24028:16;;:2;:16;;;24020:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24094:9;:15;24104:4;24094:15;;;;;;;;;;;;;;;;;;;;;;;;;24093:16;24085:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;24159:9;:13;24169:2;24159:13;;;;;;;;;;;;;;;;;;;;;;;;;24158:14;24150:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;24227:1;24217:6;:11;24213:93;;24245:28;24261:4;24267:2;24271:1;24245:15;:28::i;:::-;24288:7;;24213:93;24318:12;24333:25;:31;24359:4;24333:31;;;;;;;;;;;;;;;;;;;;;;;;;24318:46;;24375:13;24391:25;:29;24417:2;24391:29;;;;;;;;;;;;;;;;;;;;;;;;;24375:45;;24437:14;;;;;;;;;;;24433:1471;;;24498:7;:5;:7::i;:::-;24490:15;;:4;:15;;;;:49;;;;;24532:7;:5;:7::i;:::-;24526:13;;:2;:13;;;;24490:49;:86;;;;;24574:1;24560:16;;:2;:16;;;;24490:86;:128;;;;;24611:6;24597:21;;:2;:21;;;;24490:128;:159;;;;;24640:9;;;;;;;;;;;24639:10;24490:159;24468:1425;;;24689:14;;;;;;;;;;;24684:218;;24762:16;:22;24779:4;24762:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;24788:16;:20;24805:2;24788:20;;;;;;;;;;;;;;;;;;;;;;;;;24762:46;24728:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24684:218;24926:7;:45;;;;;24938:29;:33;24968:2;24938:33;;;;;;;;;;;;;;;;;;;;;;;;;24937:34;24926:45;24922:956;;;25040:20;;25030:6;:30;;24996:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;25248:23;;25231:13;25241:2;25231:9;:13::i;:::-;25222:6;:22;;;;:::i;:::-;:49;;25188:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;24922:956;;;25372:8;:48;;;;;25385:29;:35;25415:4;25385:35;;;;;;;;;;;;;;;;;;;;;;;;;25384:36;25372:48;25368:510;;;25489:20;;25479:6;:30;;25445:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25368:510;;;25646:29;:33;25676:2;25646:33;;;;;;;;;;;;;;;;;;;;;;;;;25641:237;;25764:23;;25747:13;25757:2;25747:9;:13::i;:::-;25738:6;:22;;;;:::i;:::-;:49;;25704:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25641:237;25368:510;24922:956;24468:1425;24433:1471;25957:1;25934:25;;:11;;;;;;;;;;;:25;;;;:92;;;;;25989:11;;;;;;;;;;;25976:35;;;26020:4;25976:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25934:92;25916:459;;;26053:10;26079:11;;;;;;;;;;;26066:31;;;26116:4;26139:2;26168:8;;;;;;;;;;;26196:23;;26238:20;;26277:18;;26066:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26053:257;;26333:5;26325:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;26038:337;25916:459;26391:8;:33;;;;;26419:4;26403:21;;:4;:21;;;;26391:33;:56;;;;;26428:19;;;;;;;;;;;26391:56;26387:293;;;26513:1;26490:13;:19;26504:4;26490:19;;;;;;;;;;;;;;;;:24;:62;;;;26540:12;26518:13;:19;26532:4;26518:19;;;;;;;;;;;;;;;;:34;26490:62;26464:155;;;;;;;;;;;;:::i;:::-;;;;;;;;;26656:12;26634:13;:19;26648:4;26634:19;;;;;;;;;;;;;;;:34;;;;26387:293;26692:20;26715:24;26733:4;26715:9;:24::i;:::-;26692:47;;26750:12;26781:18;;26765:12;:34;;26750:49;;26828:12;;;;;;;;;;;:36;;;;;26857:7;26828:36;:63;;;;;26882:9;;;;;;;;;;;26881:10;26828:63;:88;;;;;26909:7;26908:8;26828:88;:128;;;;;26934:16;:22;26951:4;26934:22;;;;;;;;;;;;;;;;;;;;;;;;;26933:23;26828:128;:166;;;;;26974:16;:20;26991:2;26974:20;;;;;;;;;;;;;;;;;;;;;;;;;26973:21;26828:166;26810:296;;;27033:4;27021:9;;:16;;;;;;;;;;;;;;;;;;27052:10;:8;:10::i;:::-;27089:5;27077:9;;:17;;;;;;;;;;;;;;;;;;26810:296;27118:9;27131;;;;;;;;;;;27130:10;27118:22;;27155:16;:22;27172:4;27155:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;27181:16;:20;27198:2;27181:20;;;;;;;;;;;;;;;;;;;;;;;;;27155:46;27151:64;;;27210:5;27203:12;;27151:64;27228:12;27259:4;27255:357;;;27284:8;:28;;;;;27311:1;27296:12;;:16;27284:28;27280:221;;;27340:33;27369:3;27340:24;27351:12;;27340:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27333:40;;27280:221;;;27399:7;:26;;;;;27424:1;27410:11;;:15;27399:26;27395:106;;;27453:32;27481:3;27453:23;27464:11;;27453:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27446:39;;27395:106;27280:221;27526:1;27519:4;:8;27515:56;;;27529:42;27545:4;27559;27566;27529:15;:42::i;:::-;27515:56;27596:4;27586:14;;;;;:::i;:::-;;;27255:357;27624:33;27640:4;27646:2;27650:6;27624:15;:33::i;:::-;23940:3725;;;;;;23827:3838;;;;:::o;23157:662::-;23211:12;23234:22;23259:21;23234:46;;23291:24;23308:6;23291:16;:24::i;:::-;23328:18;23349:41;23375:14;23349:21;:25;;:41;;;;:::i;:::-;23328:62;;23401:14;23430:10;;23418:9;;:22;;;;:::i;:::-;23401:39;;23451:16;23484:12;;23470:11;;:26;;;;:::i;:::-;23451:45;;23521:1;23511:6;:11;;:28;;;;;23538:1;23526:8;:13;;23511:28;23507:191;;;23556:17;23576:36;23603:8;23576:22;23591:6;23576:10;:14;;:22;;;;:::i;:::-;:26;;:36;;;;:::i;:::-;23556:56;;23649:9;;;;;;;;;;;23641:23;;23672:9;23641:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23627:59;;;;;23541:157;23507:191;23732:15;;;;;;;;;;;23724:29;;23775:21;23724:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23710:101;;;;;23200:619;;;;;23157:662;:::o;1444:191::-;1518:16;1537:6;;;;;;;;;;;1518:25;;1563:8;1554:6;;:17;;;;;;;;;;;;;;;;;;1618:8;1587:40;;1608:8;1587:40;;;;;;;;;;;;1507:128;1444:191;:::o;14638:641::-;14785:1;14769:18;;:4;:18;;;14761:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;14854:1;14840:16;;:2;:16;;;14832:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14899:38;14920:4;14926:2;14930:6;14899:20;:38::i;:::-;14948:19;14970:9;:15;14980:4;14970:15;;;;;;;;;;;;;;;;14948:37;;15019:6;15004:11;:21;;14996:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;15130:6;15116:11;:20;15098:9;:15;15108:4;15098:15;;;;;;;;;;;;;;;:38;;;;15175:6;15158:9;:13;15168:2;15158:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;15212:2;15197:26;;15206:4;15197:26;;;15216:6;15197:26;;;;;;:::i;:::-;;;;;;;;15234:37;15254:4;15260:2;15264:6;15234:19;:37::i;:::-;14750:529;14638:641;;;:::o;22871:278::-;22910:20;22933:24;22951:4;22933:9;:24::i;:::-;22910:47;;22988:1;22972:12;:17;22968:30;;22991:7;;;22968:30;23050:2;23029:18;;:23;;;;:::i;:::-;23014:12;:38;23010:95;;;23103:2;23082:18;;:23;;;;:::i;:::-;23067:38;;23010:95;23118:23;23128:12;23118:9;:23::i;:::-;22899:250;22871:278;:::o;1666:98::-;1724:7;1755:1;1751;:5;;;;:::i;:::-;1744:12;;1666:98;;;;:::o;2075:::-;2133:7;2164:1;2160;:5;;;;:::i;:::-;2153:12;;2075:98;;;;:::o;27825:559::-;27946:21;27984:1;27970:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27946:40;;28015:4;27997;28002:1;27997:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28041:10;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28031:4;28036:1;28031:7;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;28071:52;28088:4;28103:10;;;;;;;;;;;28116:6;28071:8;:52::i;:::-;28162:10;;;;;;;;;;;:61;;;28238:6;28259:1;28303:4;28330;28350:15;28162:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27875:509;27825:559;:::o;2770:98::-;2828:7;2859:1;2855;:5;;;;:::i;:::-;2848:12;;2770:98;;;;:::o;14505:125::-;;;;:::o;15287: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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:118::-;4845:24;4863:5;4845:24;:::i;:::-;4840:3;4833:37;4758:118;;:::o;4882:222::-;4975:4;5013:2;5002:9;4998:18;4990:26;;5026:71;5094:1;5083:9;5079:17;5070:6;5026:71;:::i;:::-;4882:222;;;;:::o;5110:329::-;5169:6;5218:2;5206:9;5197:7;5193:23;5189:32;5186:119;;;5224:79;;:::i;:::-;5186:119;5344:1;5369:53;5414:7;5405:6;5394:9;5390:22;5369:53;:::i;:::-;5359:63;;5315:117;5110:329;;;;:::o;5445:86::-;5480:7;5520:4;5513:5;5509:16;5498:27;;5445:86;;;:::o;5537:112::-;5620:22;5636:5;5620:22;:::i;:::-;5615:3;5608:35;5537:112;;:::o;5655:214::-;5744:4;5782:2;5771:9;5767:18;5759:26;;5795:67;5859:1;5848:9;5844:17;5835:6;5795:67;:::i;:::-;5655:214;;;;:::o;5875:116::-;5945:21;5960:5;5945:21;:::i;:::-;5938:5;5935:32;5925:60;;5981:1;5978;5971:12;5925:60;5875:116;:::o;5997:133::-;6040:5;6078:6;6065:20;6056:29;;6094:30;6118:5;6094:30;:::i;:::-;5997:133;;;;:::o;6136:468::-;6201:6;6209;6258:2;6246:9;6237:7;6233:23;6229:32;6226:119;;;6264:79;;:::i;:::-;6226:119;6384:1;6409:53;6454:7;6445:6;6434:9;6430:22;6409:53;:::i;:::-;6399:63;;6355:117;6511:2;6537:50;6579:7;6570:6;6559:9;6555:22;6537:50;:::i;:::-;6527:60;;6482:115;6136:468;;;;;:::o;6610:323::-;6666:6;6715:2;6703:9;6694:7;6690:23;6686:32;6683:119;;;6721:79;;:::i;:::-;6683:119;6841:1;6866:50;6908:7;6899:6;6888:9;6884:22;6866:50;:::i;:::-;6856:60;;6812:114;6610:323;;;;:::o;6939:474::-;7007:6;7015;7064:2;7052:9;7043:7;7039:23;7035:32;7032:119;;;7070:79;;:::i;:::-;7032:119;7190:1;7215:53;7260:7;7251:6;7240:9;7236:22;7215:53;:::i;:::-;7205:63;;7161:117;7317:2;7343:53;7388:7;7379:6;7368:9;7364:22;7343:53;:::i;:::-;7333:63;;7288:118;6939:474;;;;;:::o;7419:60::-;7447:3;7468:5;7461:12;;7419:60;;;:::o;7485:142::-;7535:9;7568:53;7586:34;7595:24;7613:5;7595:24;:::i;:::-;7586:34;:::i;:::-;7568:53;:::i;:::-;7555:66;;7485:142;;;:::o;7633:126::-;7683:9;7716:37;7747:5;7716:37;:::i;:::-;7703:50;;7633:126;;;:::o;7765:152::-;7841:9;7874:37;7905:5;7874:37;:::i;:::-;7861:50;;7765:152;;;:::o;7923:183::-;8036:63;8093:5;8036:63;:::i;:::-;8031:3;8024:76;7923:183;;:::o;8112:274::-;8231:4;8269:2;8258:9;8254:18;8246:26;;8282:97;8376:1;8365:9;8361:17;8352:6;8282:97;:::i;:::-;8112:274;;;;:::o;8392:118::-;8463:22;8479:5;8463:22;:::i;:::-;8456:5;8453:33;8443:61;;8500:1;8497;8490:12;8443:61;8392:118;:::o;8516:135::-;8560:5;8598:6;8585:20;8576:29;;8614:31;8639:5;8614:31;:::i;:::-;8516:135;;;;:::o;8657:77::-;8694:7;8723:5;8712:16;;8657:77;;;:::o;8740:122::-;8813:24;8831:5;8813:24;:::i;:::-;8806:5;8803:35;8793:63;;8852:1;8849;8842:12;8793:63;8740:122;:::o;8868:139::-;8914:5;8952:6;8939:20;8930:29;;8968:33;8995:5;8968:33;:::i;:::-;8868:139;;;;:::o;9013:615::-;9088:6;9096;9104;9153:2;9141:9;9132:7;9128:23;9124:32;9121:119;;;9159:79;;:::i;:::-;9121:119;9279:1;9304:51;9347:7;9338:6;9327:9;9323:22;9304:51;:::i;:::-;9294:61;;9250:115;9404:2;9430:53;9475:7;9466:6;9455:9;9451:22;9430:53;:::i;:::-;9420:63;;9375:118;9532:2;9558:53;9603:7;9594:6;9583:9;9579:22;9558:53;:::i;:::-;9548:63;;9503:118;9013:615;;;;;:::o;9634:474::-;9702:6;9710;9759:2;9747:9;9738:7;9734:23;9730:32;9727:119;;;9765:79;;:::i;:::-;9727:119;9885:1;9910:53;9955:7;9946:6;9935:9;9931:22;9910:53;:::i;:::-;9900:63;;9856:117;10012:2;10038:53;10083:7;10074:6;10063:9;10059:22;10038:53;:::i;:::-;10028:63;;9983:118;9634:474;;;;;:::o;10114:180::-;10162:77;10159:1;10152:88;10259:4;10256:1;10249:15;10283:4;10280:1;10273:15;10300:320;10344:6;10381:1;10375:4;10371:12;10361:22;;10428:1;10422:4;10418:12;10449:18;10439:81;;10505:4;10497:6;10493:17;10483:27;;10439:81;10567:2;10559:6;10556:14;10536:18;10533:38;10530:84;;10586:18;;:::i;:::-;10530:84;10351:269;10300:320;;;:::o;10626:163::-;10766:15;10762:1;10754:6;10750:14;10743:39;10626:163;:::o;10795:366::-;10937:3;10958:67;11022:2;11017:3;10958:67;:::i;:::-;10951:74;;11034:93;11123:3;11034:93;:::i;:::-;11152:2;11147:3;11143:12;11136:19;;10795:366;;;:::o;11167:419::-;11333:4;11371:2;11360:9;11356:18;11348:26;;11420:9;11414:4;11410:20;11406:1;11395:9;11391:17;11384:47;11448:131;11574:4;11448:131;:::i;:::-;11440:139;;11167:419;;;:::o;11592:179::-;11732:31;11728:1;11720:6;11716:14;11709:55;11592:179;:::o;11777:366::-;11919:3;11940:67;12004:2;11999:3;11940:67;:::i;:::-;11933:74;;12016:93;12105:3;12016:93;:::i;:::-;12134:2;12129:3;12125:12;12118:19;;11777:366;;;:::o;12149:419::-;12315:4;12353:2;12342:9;12338:18;12330:26;;12402:9;12396:4;12392:20;12388:1;12377:9;12373:17;12366:47;12430:131;12556:4;12430:131;:::i;:::-;12422:139;;12149:419;;;:::o;12574:180::-;12622:77;12619:1;12612:88;12719:4;12716:1;12709:15;12743:4;12740:1;12733:15;12760:410;12800:7;12823:20;12841:1;12823:20;:::i;:::-;12818:25;;12857:20;12875:1;12857:20;:::i;:::-;12852:25;;12912:1;12909;12905:9;12934:30;12952:11;12934:30;:::i;:::-;12923:41;;13113:1;13104:7;13100:15;13097:1;13094:22;13074:1;13067:9;13047:83;13024:139;;13143:18;;:::i;:::-;13024:139;12808:362;12760:410;;;;:::o;13176:180::-;13224:77;13221:1;13214:88;13321:4;13318:1;13311:15;13345:4;13342:1;13335:15;13362:185;13402:1;13419:20;13437:1;13419:20;:::i;:::-;13414:25;;13453:20;13471:1;13453:20;:::i;:::-;13448:25;;13492:1;13482:35;;13497:18;;:::i;:::-;13482:35;13539:1;13536;13532:9;13527:14;;13362:185;;;;:::o;13553:240::-;13693:34;13689:1;13681:6;13677:14;13670:58;13762:23;13757:2;13749:6;13745:15;13738:48;13553:240;:::o;13799:366::-;13941:3;13962:67;14026:2;14021:3;13962:67;:::i;:::-;13955:74;;14038:93;14127:3;14038:93;:::i;:::-;14156:2;14151:3;14147:12;14140:19;;13799:366;;;:::o;14171:419::-;14337:4;14375:2;14364:9;14360:18;14352:26;;14424:9;14418:4;14414:20;14410:1;14399:9;14395:17;14388:47;14452:131;14578:4;14452:131;:::i;:::-;14444:139;;14171:419;;;:::o;14596:239::-;14736:34;14732:1;14724:6;14720:14;14713:58;14805:22;14800:2;14792:6;14788:15;14781:47;14596:239;:::o;14841:366::-;14983:3;15004:67;15068:2;15063:3;15004:67;:::i;:::-;14997:74;;15080:93;15169:3;15080:93;:::i;:::-;15198:2;15193:3;15189:12;15182:19;;14841:366;;;:::o;15213:419::-;15379:4;15417:2;15406:9;15402:18;15394:26;;15466:9;15460:4;15456:20;15452:1;15441:9;15437:17;15430:47;15494:131;15620:4;15494:131;:::i;:::-;15486:139;;15213:419;;;:::o;15638:164::-;15778:16;15774:1;15766:6;15762:14;15755:40;15638:164;:::o;15808:366::-;15950:3;15971:67;16035:2;16030:3;15971:67;:::i;:::-;15964:74;;16047:93;16136:3;16047:93;:::i;:::-;16165:2;16160:3;16156:12;16149:19;;15808:366;;;:::o;16180:419::-;16346:4;16384:2;16373:9;16369:18;16361:26;;16433:9;16427:4;16423:20;16419:1;16408:9;16404:17;16397:47;16461:131;16587:4;16461:131;:::i;:::-;16453:139;;16180:419;;;:::o;16605:191::-;16645:3;16664:20;16682:1;16664:20;:::i;:::-;16659:25;;16698:20;16716:1;16698:20;:::i;:::-;16693:25;;16741:1;16738;16734:9;16727:16;;16762:3;16759:1;16756:10;16753:36;;;16769:18;;:::i;:::-;16753:36;16605:191;;;;:::o;16802:244::-;16942:34;16938:1;16930:6;16926:14;16919:58;17011:27;17006:2;16998:6;16994:15;16987:52;16802:244;:::o;17052:366::-;17194:3;17215:67;17279:2;17274:3;17215:67;:::i;:::-;17208:74;;17291:93;17380:3;17291:93;:::i;:::-;17409:2;17404:3;17400:12;17393:19;;17052:366;;;:::o;17424:419::-;17590:4;17628:2;17617:9;17613:18;17605:26;;17677:9;17671:4;17667:20;17663:1;17652:9;17648:17;17641:47;17705:131;17831:4;17705:131;:::i;:::-;17697:139;;17424:419;;;:::o;17849:102::-;17891:8;17938:5;17935:1;17931:13;17910:34;;17849:102;;;:::o;17957:848::-;18018:5;18025:4;18049:6;18040:15;;18073:5;18064:14;;18087:712;18108:1;18098:8;18095:15;18087:712;;;18203:4;18198:3;18194:14;18188:4;18185:24;18182:50;;;18212:18;;:::i;:::-;18182:50;18262:1;18252:8;18248:16;18245:451;;;18677:4;18670:5;18666:16;18657:25;;18245:451;18727:4;18721;18717:15;18709:23;;18757:32;18780:8;18757:32;:::i;:::-;18745:44;;18087:712;;;17957:848;;;;;;;:::o;18811:1073::-;18865:5;19056:8;19046:40;;19077:1;19068:10;;19079:5;;19046:40;19105:4;19095:36;;19122:1;19113:10;;19124:5;;19095:36;19191:4;19239:1;19234:27;;;;19275:1;19270:191;;;;19184:277;;19234:27;19252:1;19243:10;;19254:5;;;19270:191;19315:3;19305:8;19302:17;19299:43;;;19322:18;;:::i;:::-;19299:43;19371:8;19368:1;19364:16;19355:25;;19406:3;19399:5;19396:14;19393:40;;;19413:18;;:::i;:::-;19393:40;19446:5;;;19184:277;;19570:2;19560:8;19557:16;19551:3;19545:4;19542:13;19538:36;19520:2;19510:8;19507:16;19502:2;19496:4;19493:12;19489:35;19473:111;19470:246;;;19626:8;19620:4;19616:19;19607:28;;19661:3;19654:5;19651:14;19648:40;;;19668:18;;:::i;:::-;19648:40;19701:5;;19470:246;19741:42;19779:3;19769:8;19763:4;19760:1;19741:42;:::i;:::-;19726:57;;;;19815:4;19810:3;19806:14;19799:5;19796:25;19793:51;;;19824:18;;:::i;:::-;19793:51;19873:4;19866:5;19862:16;19853:25;;18811:1073;;;;;;:::o;19890:281::-;19948:5;19972:23;19990:4;19972:23;:::i;:::-;19964:31;;20016:25;20032:8;20016:25;:::i;:::-;20004:37;;20060:104;20097:66;20087:8;20081:4;20060:104;:::i;:::-;20051:113;;19890:281;;;;:::o;20177:234::-;20317:34;20313:1;20305:6;20301:14;20294:58;20386:17;20381:2;20373:6;20369:15;20362:42;20177:234;:::o;20417:366::-;20559:3;20580:67;20644:2;20639:3;20580:67;:::i;:::-;20573:74;;20656:93;20745:3;20656:93;:::i;:::-;20774:2;20769:3;20765:12;20758:19;;20417:366;;;:::o;20789:419::-;20955:4;20993:2;20982:9;20978:18;20970:26;;21042:9;21036:4;21032:20;21028:1;21017:9;21013:17;21006:47;21070:131;21196:4;21070:131;:::i;:::-;21062:139;;20789:419;;;:::o;21214:237::-;21354:34;21350:1;21342:6;21338:14;21331:58;21423:20;21418:2;21410:6;21406:15;21399:45;21214:237;:::o;21457:366::-;21599:3;21620:67;21684:2;21679:3;21620:67;:::i;:::-;21613:74;;21696:93;21785:3;21696:93;:::i;:::-;21814:2;21809:3;21805:12;21798:19;;21457:366;;;:::o;21829:419::-;21995:4;22033:2;22022:9;22018:18;22010:26;;22082:9;22076:4;22072:20;22068:1;22057:9;22053:17;22046:47;22110:131;22236:4;22110:131;:::i;:::-;22102:139;;21829:419;;;:::o;22254:181::-;22394:33;22390:1;22382:6;22378:14;22371:57;22254:181;:::o;22441:366::-;22583:3;22604:67;22668:2;22663:3;22604:67;:::i;:::-;22597:74;;22680:93;22769:3;22680:93;:::i;:::-;22798:2;22793:3;22789:12;22782:19;;22441:366;;;:::o;22813:419::-;22979:4;23017:2;23006:9;23002:18;22994:26;;23066:9;23060:4;23056:20;23052:1;23041:9;23037:17;23030:47;23094:131;23220:4;23094:131;:::i;:::-;23086:139;;22813:419;;;:::o;23238:178::-;23378:30;23374:1;23366:6;23362:14;23355:54;23238:178;:::o;23422:366::-;23564:3;23585:67;23649:2;23644:3;23585:67;:::i;:::-;23578:74;;23661:93;23750:3;23661:93;:::i;:::-;23779:2;23774:3;23770:12;23763:19;;23422:366;;;:::o;23794:419::-;23960:4;23998:2;23987:9;23983:18;23975:26;;24047:9;24041:4;24037:20;24033:1;24022:9;24018:17;24011:47;24075:131;24201:4;24075:131;:::i;:::-;24067:139;;23794:419;;;:::o;24219:170::-;24359:22;24355:1;24347:6;24343:14;24336:46;24219:170;:::o;24395:366::-;24537:3;24558:67;24622:2;24617:3;24558:67;:::i;:::-;24551:74;;24634:93;24723:3;24634:93;:::i;:::-;24752:2;24747:3;24743:12;24736:19;;24395:366;;;:::o;24767:419::-;24933:4;24971:2;24960:9;24956:18;24948:26;;25020:9;25014:4;25010:20;25006:1;24995:9;24991:17;24984:47;25048:131;25174:4;25048:131;:::i;:::-;25040:139;;24767:419;;;:::o;25192:118::-;25279:24;25297:5;25279:24;:::i;:::-;25274:3;25267:37;25192:118;;:::o;25316:664::-;25521:4;25559:3;25548:9;25544:19;25536:27;;25573:71;25641:1;25630:9;25626:17;25617:6;25573:71;:::i;:::-;25654:72;25722:2;25711:9;25707:18;25698:6;25654:72;:::i;:::-;25736;25804:2;25793:9;25789:18;25780:6;25736:72;:::i;:::-;25818;25886:2;25875:9;25871:18;25862:6;25818:72;:::i;:::-;25900:73;25968:3;25957:9;25953:19;25944:6;25900:73;:::i;:::-;25316:664;;;;;;;;:::o;25986:442::-;26135:4;26173:2;26162:9;26158:18;26150:26;;26186:71;26254:1;26243:9;26239:17;26230:6;26186:71;:::i;:::-;26267:72;26335:2;26324:9;26320:18;26311:6;26267:72;:::i;:::-;26349;26417:2;26406:9;26402:18;26393:6;26349:72;:::i;:::-;25986:442;;;;;;:::o;26434:148::-;26536:11;26573:3;26558:18;;26434:148;;;;:::o;26588:214::-;26728:66;26724:1;26716:6;26712:14;26705:90;26588:214;:::o;26808:400::-;26968:3;26989:84;27071:1;27066:3;26989:84;:::i;:::-;26982:91;;27082:93;27171:3;27082:93;:::i;:::-;27200:1;27195:3;27191:11;27184:18;;26808:400;;;:::o;27214:79::-;27253:7;27282:5;27271:16;;27214:79;;;:::o;27299:157::-;27404:45;27424:24;27442:5;27424:24;:::i;:::-;27404:45;:::i;:::-;27399:3;27392:58;27299:157;;:::o;27462:663::-;27703:3;27725:148;27869:3;27725:148;:::i;:::-;27718:155;;27883:75;27954:3;27945:6;27883:75;:::i;:::-;27983:2;27978:3;27974:12;27967:19;;27996:75;28067:3;28058:6;27996:75;:::i;:::-;28096:2;28091:3;28087:12;28080:19;;28116:3;28109:10;;27462:663;;;;;:::o;28131:545::-;28304:4;28342:3;28331:9;28327:19;28319:27;;28356:71;28424:1;28413:9;28409:17;28400:6;28356:71;:::i;:::-;28437:68;28501:2;28490:9;28486:18;28477:6;28437:68;:::i;:::-;28515:72;28583:2;28572:9;28568:18;28559:6;28515:72;:::i;:::-;28597;28665:2;28654:9;28650:18;28641:6;28597:72;:::i;:::-;28131:545;;;;;;;:::o;28682:167::-;28822:19;28818:1;28810:6;28806:14;28799:43;28682:167;:::o;28855:366::-;28997:3;29018:67;29082:2;29077:3;29018:67;:::i;:::-;29011:74;;29094:93;29183:3;29094:93;:::i;:::-;29212:2;29207:3;29203:12;29196:19;;28855:366;;;:::o;29227:419::-;29393:4;29431:2;29420:9;29416:18;29408:26;;29480:9;29474:4;29470:20;29466:1;29455:9;29451:17;29444:47;29508:131;29634:4;29508:131;:::i;:::-;29500:139;;29227:419;;;:::o;29652:167::-;29792:19;29788:1;29780:6;29776:14;29769:43;29652:167;:::o;29825:366::-;29967:3;29988:67;30052:2;30047:3;29988:67;:::i;:::-;29981:74;;30064:93;30153:3;30064:93;:::i;:::-;30182:2;30177:3;30173:12;30166:19;;29825:366;;;:::o;30197:419::-;30363:4;30401:2;30390:9;30386:18;30378:26;;30450:9;30444:4;30440:20;30436:1;30425:9;30421:17;30414:47;30478:131;30604:4;30478:131;:::i;:::-;30470:139;;30197:419;;;:::o;30622:180::-;30762:32;30758:1;30750:6;30746:14;30739:56;30622:180;:::o;30808:366::-;30950:3;30971:67;31035:2;31030:3;30971:67;:::i;:::-;30964:74;;31047:93;31136:3;31047:93;:::i;:::-;31165:2;31160:3;31156:12;31149:19;;30808:366;;;:::o;31180:419::-;31346:4;31384:2;31373:9;31369:18;31361:26;;31433:9;31427:4;31423:20;31419:1;31408:9;31404:17;31397:47;31461:131;31587:4;31461:131;:::i;:::-;31453:139;;31180:419;;;:::o;31605:182::-;31745:34;31741:1;31733:6;31729:14;31722:58;31605:182;:::o;31793:366::-;31935:3;31956:67;32020:2;32015:3;31956:67;:::i;:::-;31949:74;;32032:93;32121:3;32032:93;:::i;:::-;32150:2;32145:3;32141:12;32134:19;;31793:366;;;:::o;32165:419::-;32331:4;32369:2;32358:9;32354:18;32346:26;;32418:9;32412:4;32408:20;32404:1;32393:9;32389:17;32382:47;32446:131;32572:4;32446:131;:::i;:::-;32438:139;;32165:419;;;:::o;32590:177::-;32730:29;32726:1;32718:6;32714:14;32707:53;32590:177;:::o;32773:366::-;32915:3;32936:67;33000:2;32995:3;32936:67;:::i;:::-;32929:74;;33012:93;33101:3;33012:93;:::i;:::-;33130:2;33125:3;33121:12;33114:19;;32773:366;;;:::o;33145:419::-;33311:4;33349:2;33338:9;33334:18;33326:26;;33398:9;33392:4;33388:20;33384:1;33373:9;33369:17;33362:47;33426:131;33552:4;33426:131;:::i;:::-;33418:139;;33145:419;;;:::o;33570:175::-;33710:27;33706:1;33698:6;33694:14;33687:51;33570:175;:::o;33751:366::-;33893:3;33914:67;33978:2;33973:3;33914:67;:::i;:::-;33907:74;;33990:93;34079:3;33990:93;:::i;:::-;34108:2;34103:3;34099:12;34092:19;;33751:366;;;:::o;34123:419::-;34289:4;34327:2;34316:9;34312:18;34304:26;;34376:9;34370:4;34366:20;34362:1;34351:9;34347:17;34340:47;34404:131;34530:4;34404:131;:::i;:::-;34396:139;;34123:419;;;:::o;34548:175::-;34688:27;34684:1;34676:6;34672:14;34665:51;34548:175;:::o;34729:366::-;34871:3;34892:67;34956:2;34951:3;34892:67;:::i;:::-;34885:74;;34968:93;35057:3;34968:93;:::i;:::-;35086:2;35081:3;35077:12;35070:19;;34729:366;;;:::o;35101:419::-;35267:4;35305:2;35294:9;35290:18;35282:26;;35354:9;35348:4;35344:20;35340:1;35329:9;35325:17;35318:47;35382:131;35508:4;35382:131;:::i;:::-;35374:139;;35101:419;;;:::o;35526:173::-;35666:25;35662:1;35654:6;35650:14;35643:49;35526:173;:::o;35705:366::-;35847:3;35868:67;35932:2;35927:3;35868:67;:::i;:::-;35861:74;;35944:93;36033:3;35944:93;:::i;:::-;36062:2;36057:3;36053:12;36046:19;;35705:366;;;:::o;36077:419::-;36243:4;36281:2;36270:9;36266:18;36258:26;;36330:9;36324:4;36320:20;36316:1;36305:9;36301:17;36294:47;36358:131;36484:4;36358:131;:::i;:::-;36350:139;;36077:419;;;:::o;36502:172::-;36642:24;36638:1;36630:6;36626:14;36619:48;36502:172;:::o;36680:366::-;36822:3;36843:67;36907:2;36902:3;36843:67;:::i;:::-;36836:74;;36919:93;37008:3;36919:93;:::i;:::-;37037:2;37032:3;37028:12;37021:19;;36680:366;;;:::o;37052:419::-;37218:4;37256:2;37245:9;37241:18;37233:26;;37305:9;37299:4;37295:20;37291:1;37280:9;37276:17;37269:47;37333:131;37459:4;37333:131;:::i;:::-;37325:139;;37052:419;;;:::o;37477:240::-;37617:34;37613:1;37605:6;37601:14;37594:58;37686:23;37681:2;37673:6;37669:15;37662:48;37477:240;:::o;37723:366::-;37865:3;37886:67;37950:2;37945:3;37886:67;:::i;:::-;37879:74;;37962:93;38051:3;37962:93;:::i;:::-;38080:2;38075:3;38071:12;38064:19;;37723:366;;;:::o;38095:419::-;38261:4;38299:2;38288:9;38284:18;38276:26;;38348:9;38342:4;38338:20;38334:1;38323:9;38319:17;38312:47;38376:131;38502:4;38376:131;:::i;:::-;38368:139;;38095:419;;;:::o;38520:169::-;38660:21;38656:1;38648:6;38644:14;38637:45;38520:169;:::o;38695:366::-;38837:3;38858:67;38922:2;38917:3;38858:67;:::i;:::-;38851:74;;38934:93;39023:3;38934:93;:::i;:::-;39052:2;39047:3;39043:12;39036:19;;38695:366;;;:::o;39067:419::-;39233:4;39271:2;39260:9;39256:18;39248:26;;39320:9;39314:4;39310:20;39306:1;39295:9;39291:17;39284:47;39348:131;39474:4;39348:131;:::i;:::-;39340:139;;39067:419;;;:::o;39492:241::-;39632:34;39628:1;39620:6;39616:14;39609:58;39701:24;39696:2;39688:6;39684:15;39677:49;39492:241;:::o;39739:366::-;39881:3;39902:67;39966:2;39961:3;39902:67;:::i;:::-;39895:74;;39978:93;40067:3;39978:93;:::i;:::-;40096:2;40091:3;40087:12;40080:19;;39739:366;;;:::o;40111:419::-;40277:4;40315:2;40304:9;40300:18;40292:26;;40364:9;40358:4;40354:20;40350:1;40339:9;40335:17;40328:47;40392:131;40518:4;40392:131;:::i;:::-;40384:139;;40111:419;;;:::o;40536:137::-;40590:5;40621:6;40615:13;40606:22;;40637:30;40661:5;40637:30;:::i;:::-;40536:137;;;;:::o;40679:345::-;40746:6;40795:2;40783:9;40774:7;40770:23;40766:32;40763:119;;;40801:79;;:::i;:::-;40763:119;40921:1;40946:61;40999:7;40990:6;40979:9;40975:22;40946:61;:::i;:::-;40936:71;;40892:125;40679:345;;;;:::o;41030:775::-;41263:4;41301:3;41290:9;41286:19;41278:27;;41315:71;41383:1;41372:9;41368:17;41359:6;41315:71;:::i;:::-;41396:72;41464:2;41453:9;41449:18;41440:6;41396:72;:::i;:::-;41478;41546:2;41535:9;41531:18;41522:6;41478:72;:::i;:::-;41560;41628:2;41617:9;41613:18;41604:6;41560:72;:::i;:::-;41642:73;41710:3;41699:9;41695:19;41686:6;41642:73;:::i;:::-;41725;41793:3;41782:9;41778:19;41769:6;41725:73;:::i;:::-;41030:775;;;;;;;;;:::o;41811:170::-;41951:22;41947:1;41939:6;41935:14;41928:46;41811:170;:::o;41987:366::-;42129:3;42150:67;42214:2;42209:3;42150:67;:::i;:::-;42143:74;;42226:93;42315:3;42226:93;:::i;:::-;42344:2;42339:3;42335:12;42328:19;;41987:366;;;:::o;42359:419::-;42525:4;42563:2;42552:9;42548:18;42540:26;;42612:9;42606:4;42602:20;42598:1;42587:9;42583:17;42576:47;42640:131;42766:4;42640:131;:::i;:::-;42632:139;;42359:419;;;:::o;42784:181::-;42924:33;42920:1;42912:6;42908:14;42901:57;42784:181;:::o;42971:366::-;43113:3;43134:67;43198:2;43193:3;43134:67;:::i;:::-;43127:74;;43210:93;43299:3;43210:93;:::i;:::-;43328:2;43323:3;43319:12;43312:19;;42971:366;;;:::o;43343:419::-;43509:4;43547:2;43536:9;43532:18;43524:26;;43596:9;43590:4;43586:20;43582:1;43571:9;43567:17;43560:47;43624:131;43750:4;43624:131;:::i;:::-;43616:139;;43343:419;;;:::o;43768:194::-;43808:4;43828:20;43846:1;43828:20;:::i;:::-;43823:25;;43862:20;43880:1;43862:20;:::i;:::-;43857:25;;43906:1;43903;43899:9;43891:17;;43930:1;43924:4;43921:11;43918:37;;;43935:18;;:::i;:::-;43918:37;43768:194;;;;:::o;43968:147::-;44069:11;44106:3;44091:18;;43968:147;;;;:::o;44121:114::-;;:::o;44241:398::-;44400:3;44421:83;44502:1;44497:3;44421:83;:::i;:::-;44414:90;;44513:93;44602:3;44513:93;:::i;:::-;44631:1;44626:3;44622:11;44615:18;;44241:398;;;:::o;44645:379::-;44829:3;44851:147;44994:3;44851:147;:::i;:::-;44844:154;;45015:3;45008:10;;44645:379;;;:::o;45030:179::-;45170:31;45166:1;45158:6;45154:14;45147:55;45030:179;:::o;45215:366::-;45357:3;45378:67;45442:2;45437:3;45378:67;:::i;:::-;45371:74;;45454:93;45543:3;45454:93;:::i;:::-;45572:2;45567:3;45563:12;45556:19;;45215:366;;;:::o;45587:419::-;45753:4;45791:2;45780:9;45776:18;45768:26;;45840:9;45834:4;45830:20;45826:1;45815:9;45811:17;45804:47;45868:131;45994:4;45868:131;:::i;:::-;45860:139;;45587:419;;;:::o;46012:177::-;46152:29;46148:1;46140:6;46136:14;46129:53;46012:177;:::o;46195:366::-;46337:3;46358:67;46422:2;46417:3;46358:67;:::i;:::-;46351:74;;46434:93;46523:3;46434:93;:::i;:::-;46552:2;46547:3;46543:12;46536:19;;46195:366;;;:::o;46567:419::-;46733:4;46771:2;46760:9;46756:18;46748:26;;46820:9;46814:4;46810:20;46806:1;46795:9;46791:17;46784:47;46848:131;46974:4;46848:131;:::i;:::-;46840:139;;46567:419;;;:::o;46992:182::-;47132:34;47128:1;47120:6;47116:14;47109:58;46992:182;:::o;47180:366::-;47322:3;47343:67;47407:2;47402:3;47343:67;:::i;:::-;47336:74;;47419:93;47508:3;47419:93;:::i;:::-;47537:2;47532:3;47528:12;47521:19;;47180:366;;;:::o;47552:419::-;47718:4;47756:2;47745:9;47741:18;47733:26;;47805:9;47799:4;47795:20;47791:1;47780:9;47776:17;47769:47;47833:131;47959:4;47833:131;:::i;:::-;47825:139;;47552:419;;;:::o;47977:180::-;48025:77;48022:1;48015:88;48122:4;48119:1;48112:15;48146:4;48143:1;48136:15;48163:180;48211:77;48208:1;48201:88;48308:4;48305:1;48298:15;48332:4;48329:1;48322:15;48349:143;48406:5;48437:6;48431:13;48422:22;;48453:33;48480:5;48453:33;:::i;:::-;48349:143;;;;:::o;48498:351::-;48568:6;48617:2;48605:9;48596:7;48592:23;48588:32;48585:119;;;48623:79;;:::i;:::-;48585:119;48743:1;48768:64;48824:7;48815:6;48804:9;48800:22;48768:64;:::i;:::-;48758:74;;48714:128;48498:351;;;;:::o;48855:85::-;48900:7;48929:5;48918:16;;48855:85;;;:::o;48946:158::-;49004:9;49037:61;49055:42;49064:32;49090:5;49064:32;:::i;:::-;49055:42;:::i;:::-;49037:61;:::i;:::-;49024:74;;48946:158;;;:::o;49110:147::-;49205:45;49244:5;49205:45;:::i;:::-;49200:3;49193:58;49110:147;;:::o;49263:114::-;49330:6;49364:5;49358:12;49348:22;;49263:114;;;:::o;49383:184::-;49482:11;49516:6;49511:3;49504:19;49556:4;49551:3;49547:14;49532:29;;49383:184;;;;:::o;49573:132::-;49640:4;49663:3;49655:11;;49693:4;49688:3;49684:14;49676:22;;49573:132;;;:::o;49711:108::-;49788:24;49806:5;49788:24;:::i;:::-;49783:3;49776:37;49711:108;;:::o;49825:179::-;49894:10;49915:46;49957:3;49949:6;49915:46;:::i;:::-;49993:4;49988:3;49984:14;49970:28;;49825:179;;;;:::o;50010:113::-;50080:4;50112;50107:3;50103:14;50095:22;;50010:113;;;:::o;50159:732::-;50278:3;50307:54;50355:5;50307:54;:::i;:::-;50377:86;50456:6;50451:3;50377:86;:::i;:::-;50370:93;;50487:56;50537:5;50487:56;:::i;:::-;50566:7;50597:1;50582:284;50607:6;50604:1;50601:13;50582:284;;;50683:6;50677:13;50710:63;50769:3;50754:13;50710:63;:::i;:::-;50703:70;;50796:60;50849:6;50796:60;:::i;:::-;50786:70;;50642:224;50629:1;50626;50622:9;50617:14;;50582:284;;;50586:14;50882:3;50875:10;;50283:608;;;50159:732;;;;:::o;50897:831::-;51160:4;51198:3;51187:9;51183:19;51175:27;;51212:71;51280:1;51269:9;51265:17;51256:6;51212:71;:::i;:::-;51293:80;51369:2;51358:9;51354:18;51345:6;51293:80;:::i;:::-;51420:9;51414:4;51410:20;51405:2;51394:9;51390:18;51383:48;51448:108;51551:4;51542:6;51448:108;:::i;:::-;51440:116;;51566:72;51634:2;51623:9;51619:18;51610:6;51566:72;:::i;:::-;51648:73;51716:3;51705:9;51701:19;51692:6;51648:73;:::i;:::-;50897:831;;;;;;;;:::o

Swarm Source

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