ETH Price: $2,444.70 (-1.01%)

Token

TelePay (PAY)
 

Overview

Max Total Supply

1,000,000 PAY

Holders

14

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
16,000 PAY

Value
$0.00
0x2ba5fe6d284eda1afe304f2cc724184bbd2010ec
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:
TelePay

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-26
*/

// SPDX-License-Identifier: MIT

// X: https://x.com/telepayeth
// Website: Telepaybot.com
// Telegram: https://t.me/telepayeth

pragma solidity ^0.8.10;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxWalletSize, uint256 maxTransactionAmount, uint256 swapTokensAtAmount) external returns (bool);
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public antiDrainer;

    bool private swapping;

    address public DeveloperWallet;
    address public MarketingWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

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

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

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

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

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event DeveloperWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event MarketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("TelePay", "PAY") {
        // antiDrainer
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 10;
        uint256 _buyDevFee = 10;

        uint256 _sellMarketingFee = 15;
        uint256 _sellDevFee = 15;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransaction = 20_000 * 1e18; // 2% from total supply maxTransactionTxn
        maxWallet = 20_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

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

        DeveloperWallet = address(0xbbf2D509df8e365858Cd683a15b8F9AD3608d8b5);
        MarketingWallet = address(0xbbf2D509df8e365858Cd683a15b8F9AD3608d8b5);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

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

    function enableTradingWithPermit(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");

        tradingActive = true;
        swapEnabled = true;
    }

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

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

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

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

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

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

    function updateDeveloperWallet(address newDeveloperWallet) external onlyOwner {
        emit DeveloperWalletUpdated(newDeveloperWallet, DeveloperWallet);
        DeveloperWallet = newDeveloperWallet;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        emit MarketingWalletUpdated(newWallet, MarketingWallet);
        MarketingWallet = newWallet;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlackList[from], "[from] black list");
        require(!_isBlackList[to], "[to] black list");

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

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

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

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(uniswapV2Pair), maxWallet, maxTransaction, swapTokensAtAmount);
            require(check, "Anti Drainer Enabled");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {

            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

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

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

        tokensForMarketing = 0;
        tokensForDev = 0;

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DeveloperWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"DeveloperWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDrainer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"enableTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_antiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDeveloperWallet","type":"address"}],"name":"updateDeveloperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600781526020017f54656c65506179000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f50415900000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000ae7565b5080600490805190602001906200010092919062000ae7565b5050506200012362000117620005a760201b60201c565b620005af60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001df919062000c01565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000249573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026f919062000c01565b6040518363ffffffff1660e01b81526004016200028e92919062000c44565b6020604051808303816000875af1158015620002ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d4919062000c01565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200032960805160016200067560201b60201c565b6200035e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200067560201b60201c565b62000393600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200075f60201b60201c565b6000600a90506000600a90506000600f90506000600f9050600069d3c21bcecceda1000000905069043c33c1937564800000600a8190555069043c33c1937564800000600c81905550612710600582620003ee919062000caa565b620003fa919062000d3a565b600b8190555084600f8190555083601081905550601054600f5462000420919062000d72565b600e81905550826012819055508160138190555060135460125462000446919062000d72565b60118190555073bbf2d509df8e365858cd683a15b8f9ad3608d8b5600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bbf2d509df8e365858cd683a15b8f9ad3608d8b5600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005186200050a6200080060201b60201c565b60016200082a60201b60201c565b6200052b3060016200082a60201b60201c565b6200054061dead60016200082a60201b60201c565b62000562620005546200080060201b60201c565b60016200067560201b60201c565b620005753060016200067560201b60201c565b6200058a61dead60016200067560201b60201c565b6200059c33826200096460201b60201c565b505050505062000f91565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000685620005a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ab6200080060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000704576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fb9062000e30565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200083a620005a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008606200080060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b09062000e30565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000958919062000e6f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ce9062000edc565b60405180910390fd5b620009eb6000838362000add60201b60201c565b8060026000828254620009ff919062000d72565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a56919062000d72565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000abd919062000f0f565b60405180910390a362000ad96000838362000ae260201b60201c565b5050565b505050565b505050565b82805462000af59062000f5b565b90600052602060002090601f01602090048101928262000b19576000855562000b65565b82601f1062000b3457805160ff191683800117855562000b65565b8280016001018555821562000b65579182015b8281111562000b6457825182559160200191906001019062000b47565b5b50905062000b74919062000b78565b5090565b5b8082111562000b9357600081600090555060010162000b79565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bc98262000b9c565b9050919050565b62000bdb8162000bbc565b811462000be757600080fd5b50565b60008151905062000bfb8162000bd0565b92915050565b60006020828403121562000c1a5762000c1962000b97565b5b600062000c2a8482850162000bea565b91505092915050565b62000c3e8162000bbc565b82525050565b600060408201905062000c5b600083018562000c33565b62000c6a602083018462000c33565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cb78262000c71565b915062000cc48362000c71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d005762000cff62000c7b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d478262000c71565b915062000d548362000c71565b92508262000d675762000d6662000d0b565b5b828204905092915050565b600062000d7f8262000c71565b915062000d8c8362000c71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dc45762000dc362000c7b565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e1860208362000dcf565b915062000e258262000de0565b602082019050919050565b6000602082019050818103600083015262000e4b8162000e09565b9050919050565b60008115159050919050565b62000e698162000e52565b82525050565b600060208201905062000e86600083018462000e5e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ec4601f8362000dcf565b915062000ed18262000e8c565b602082019050919050565b6000602082019050818103600083015262000ef78162000eb5565b9050919050565b62000f098162000c71565b82525050565b600060208201905062000f26600083018462000efe565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f7457607f821691505b6020821081141562000f8b5762000f8a62000f2c565b5b50919050565b6080516155c862000fc260003960008181610de901528181613bfd01528181613cde0152613d0501526155c86000f3fe6080604052600436106103035760003560e01c80638da5cb5b11610190578063bae14e1d116100dc578063d85ba06311610095578063e2f456051161006f578063e2f4560514610ba3578063f2fde38b14610bce578063f8b45b0514610bf7578063f8f6329014610c225761030a565b8063d85ba06314610afe578063dd62ed3e14610b29578063e1bc339414610b665761030a565b8063bae14e1d146109f0578063bbc0c74214610a19578063c024666814610a44578063c18bc19514610a6d578063c3f70b5214610a96578063d257b34f14610ac15761030a565b80639fccce3211610149578063a9059cbb11610123578063a9059cbb14610924578063a90eab8c14610961578063aacebbe31461098a578063b62496f5146109b35761030a565b80639fccce3214610891578063a0d82dc5146108bc578063a457c2d7146108e75761030a565b80638da5cb5b1461079357806392136913146107be578063924de9b7146107e957806395d89b41146108125780639a7a23d61461083d5780639c3b4fdc146108665761030a565b80634a62bb651161024f578063703a490211610208578063751039fc116101e2578063751039fc146106fd5780637571336a146107285780637bce5a04146107515780638a8c523c1461077c5761030a565b8063703a49021461068057806370a08231146106a9578063715018a6146106e65761030a565b80634a62bb65146105705780634fbee1931461059b57806366ca9b83146105d857806368092bd9146106015780636a486a8e1461062a5780636ddd1713146106555761030a565b8063203e727e116102bc578063313ce56711610296578063313ce567146104b257806337c2810f146104dd578063395093511461050857806349bd5a5e146105455761030a565b8063203e727e1461042157806323b872dd1461044a5780632598cdb2146104875761030a565b806302dbd8f81461030f57806306fdde0314610338578063095ea7b3146103635780631694505e146103a057806318160ddd146103cb5780631f3fed8f146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613dec565b610c4d565b005b34801561034457600080fd5b5061034d610d37565b60405161035a9190613ec5565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613f45565b610dc9565b6040516103979190613fa0565b60405180910390f35b3480156103ac57600080fd5b506103b5610de7565b6040516103c2919061401a565b60405180910390f35b3480156103d757600080fd5b506103e0610e0b565b6040516103ed9190614044565b60405180910390f35b34801561040257600080fd5b5061040b610e15565b6040516104189190614044565b60405180910390f35b34801561042d57600080fd5b506104486004803603810190610443919061405f565b610e1b565b005b34801561045657600080fd5b50610471600480360381019061046c919061408c565b610f2a565b60405161047e9190613fa0565b60405180910390f35b34801561049357600080fd5b5061049c611022565b6040516104a991906140ee565b60405180910390f35b3480156104be57600080fd5b506104c7611048565b6040516104d49190614125565b60405180910390f35b3480156104e957600080fd5b506104f2611051565b6040516104ff91906140ee565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190613f45565b611077565b60405161053c9190613fa0565b60405180910390f35b34801561055157600080fd5b5061055a611123565b60405161056791906140ee565b60405180910390f35b34801561057c57600080fd5b50610585611149565b6040516105929190613fa0565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd9190614140565b61115c565b6040516105cf9190613fa0565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa9190613dec565b6111b2565b005b34801561060d57600080fd5b5061062860048036038101906106239190614199565b61129c565b005b34801561063657600080fd5b5061063f611373565b60405161064c9190614044565b60405180910390f35b34801561066157600080fd5b5061066a611379565b6040516106779190613fa0565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190614140565b61138c565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190614140565b6114c8565b6040516106dd9190614044565b60405180910390f35b3480156106f257600080fd5b506106fb611510565b005b34801561070957600080fd5b50610712611598565b60405161071f9190613fa0565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190614199565b611638565b005b34801561075d57600080fd5b5061076661170f565b6040516107739190614044565b60405180910390f35b34801561078857600080fd5b50610791611715565b005b34801561079f57600080fd5b506107a86117c9565b6040516107b591906140ee565b60405180910390f35b3480156107ca57600080fd5b506107d36117f3565b6040516107e09190614044565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b91906141d9565b6117f9565b005b34801561081e57600080fd5b50610827611892565b6040516108349190613ec5565b60405180910390f35b34801561084957600080fd5b50610864600480360381019061085f9190614199565b611924565b005b34801561087257600080fd5b5061087b611a3f565b6040516108889190614044565b60405180910390f35b34801561089d57600080fd5b506108a6611a45565b6040516108b39190614044565b60405180910390f35b3480156108c857600080fd5b506108d1611a4b565b6040516108de9190614044565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190613f45565b611a51565b60405161091b9190613fa0565b60405180910390f35b34801561093057600080fd5b5061094b60048036038101906109469190613f45565b611b3c565b6040516109589190613fa0565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614268565b611b5a565b005b34801561099657600080fd5b506109b160048036038101906109ac9190614140565b611de5565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190614140565b611f21565b6040516109e79190613fa0565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a129190614140565b611f41565b005b348015610a2557600080fd5b50610a2e612071565b604051610a3b9190613fa0565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a669190614199565b612084565b005b348015610a7957600080fd5b50610a946004803603810190610a8f919061405f565b6121a9565b005b348015610aa257600080fd5b50610aab6122b8565b604051610ab89190614044565b60405180910390f35b348015610acd57600080fd5b50610ae86004803603810190610ae3919061405f565b6122be565b604051610af59190613fa0565b60405180910390f35b348015610b0a57600080fd5b50610b13612413565b604051610b209190614044565b60405180910390f35b348015610b3557600080fd5b50610b506004803603810190610b4b91906142bb565b612419565b604051610b5d9190614044565b60405180910390f35b348015610b7257600080fd5b50610b8d6004803603810190610b889190614140565b6124a0565b604051610b9a9190613fa0565b60405180910390f35b348015610baf57600080fd5b50610bb86124c0565b604051610bc59190614044565b60405180910390f35b348015610bda57600080fd5b50610bf56004803603810190610bf09190614140565b6124c6565b005b348015610c0357600080fd5b50610c0c6125be565b604051610c199190614044565b60405180910390f35b348015610c2e57600080fd5b50610c376125c4565b604051610c4491906140ee565b60405180910390f35b610c556125ea565b73ffffffffffffffffffffffffffffffffffffffff16610c736117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090614347565b60405180910390fd5b8160128190555080601381905550601354601254610ce79190614396565b60118190555060196011541115610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614438565b60405180910390fd5b5050565b606060038054610d4690614487565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7290614487565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b5050505050905090565b6000610ddd610dd66125ea565b84846125f2565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60145481565b610e236125ea565b73ffffffffffffffffffffffffffffffffffffffff16610e416117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614347565b60405180910390fd5b670de0b6b3a76400006103e86001610ead610e0b565b610eb791906144b9565b610ec19190614542565b610ecb9190614542565b811015610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906145e5565b60405180910390fd5b670de0b6b3a764000081610f2191906144b9565b600a8190555050565b6000610f378484846127bd565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f826125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990614677565b60405180910390fd5b6110168561100e6125ea565b8584036125f2565b60019150509392505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006111196110846125ea565b8484600160006110926125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111149190614396565b6125f2565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111ba6125ea565b73ffffffffffffffffffffffffffffffffffffffff166111d86117c9565b73ffffffffffffffffffffffffffffffffffffffff161461122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590614347565b60405180910390fd5b81600f8190555080601081905550601054600f5461124c9190614396565b600e819055506019600e541115611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f90614438565b60405180910390fd5b5050565b6112a46125ea565b73ffffffffffffffffffffffffffffffffffffffff166112c26117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90614347565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b600d60029054906101000a900460ff1681565b6113946125ea565b73ffffffffffffffffffffffffffffffffffffffff166113b26117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90614347565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f88bf70d4f3c446213b5064d7cfe95ec0ed196748f014c19a833117bac32468fd60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115186125ea565b73ffffffffffffffffffffffffffffffffffffffff166115366117c9565b73ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390614347565b60405180910390fd5b6115966000613555565b565b60006115a26125ea565b73ffffffffffffffffffffffffffffffffffffffff166115c06117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d90614347565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6116406125ea565b73ffffffffffffffffffffffffffffffffffffffff1661165e6117c9565b73ffffffffffffffffffffffffffffffffffffffff16146116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90614347565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b61171d6125ea565b73ffffffffffffffffffffffffffffffffffffffff1661173b6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178890614347565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6118016125ea565b73ffffffffffffffffffffffffffffffffffffffff1661181f6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90614347565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b6060600480546118a190614487565b80601f01602080910402602001604051908101604052809291908181526020018280546118cd90614487565b801561191a5780601f106118ef5761010080835404028352916020019161191a565b820191906000526020600020905b8154815290600101906020018083116118fd57829003601f168201915b5050505050905090565b61192c6125ea565b73ffffffffffffffffffffffffffffffffffffffff1661194a6117c9565b73ffffffffffffffffffffffffffffffffffffffff16146119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790614347565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890614709565b60405180910390fd5b611a3b828261361b565b5050565b60105481565b60155481565b60135481565b60008060016000611a606125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b149061479b565b60405180910390fd5b611b31611b286125ea565b858584036125f2565b600191505092915050565b6000611b50611b496125ea565b84846127bd565b6001905092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611c0d9594939291906147ca565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001206000604051602001611c999392919061481d565b60405160208183030381529060405280519060200120905060008282604051602001611cc69291906148cc565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051611d039493929190614903565b6020604051602081039080840390855afa158015611d25573d6000803e3d6000fd5b505050602060405103519050611d396117c9565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614994565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555050505050505050565b611ded6125ea565b73ffffffffffffffffffffffffffffffffffffffff16611e0b6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890614347565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b611f496125ea565b73ffffffffffffffffffffffffffffffffffffffff16611f676117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490614347565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614a00565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60019054906101000a900460ff1681565b61208c6125ea565b73ffffffffffffffffffffffffffffffffffffffff166120aa6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790614347565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161219d9190613fa0565b60405180910390a25050565b6121b16125ea565b73ffffffffffffffffffffffffffffffffffffffff166121cf6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c90614347565b60405180910390fd5b670de0b6b3a76400006103e8600561223b610e0b565b61224591906144b9565b61224f9190614542565b6122599190614542565b81101561229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290614a92565b60405180910390fd5b670de0b6b3a7640000816122af91906144b9565b600c8190555050565b600a5481565b60006122c86125ea565b73ffffffffffffffffffffffffffffffffffffffff166122e66117c9565b73ffffffffffffffffffffffffffffffffffffffff161461233c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233390614347565b60405180910390fd5b620186a0600161234a610e0b565b61235491906144b9565b61235e9190614542565b8210156123a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239790614b24565b60405180910390fd5b6103e860056123ad610e0b565b6123b791906144b9565b6123c19190614542565b821115612403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fa90614bb6565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b6124ce6125ea565b73ffffffffffffffffffffffffffffffffffffffff166124ec6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253990614347565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614c48565b60405180910390fd5b6125bb81613555565b50565b600c5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614cda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c990614d6c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127b09190614044565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282490614dfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490614e90565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561292a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292190614efc565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90614f68565b60405180910390fd5b60008114156129d1576129cc838360006136bc565b613550565b600d60009054906101000a900460ff1615612ecc576129ee6117c9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a5c5750612a2c6117c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a955750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612acf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae85750600760149054906101000a900460ff16155b15612ecb57600d60019054906101000a900460ff16612be257601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ba25750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd890614fd4565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c855750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2c57600a54811115612ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc690615066565b60405180910390fd5b600c54612cdb836114c8565b82612ce69190614396565b1115612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e906150d2565b60405180910390fd5b612eca565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dcf5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e1e57600a54811115612e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1090615164565b60405180910390fd5b612ec9565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ec857600c54612e7b836114c8565b82612e869190614396565b1115612ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebe906150d2565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612fc35750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612f8191906140ee565b602060405180830381865afa158015612f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc29190615199565b5b156130de576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54600a54600b546040518763ffffffff1660e01b8152600401613057969594939291906151c6565b6020604051808303816000875af1158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190615199565b9050806130dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d390615273565b60405180910390fd5b505b60006130e9306114c8565b90506000600b54821015905080801561310e5750600d60029054906101000a900460ff165b80156131275750600760149054906101000a900460ff16155b801561317d5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131d35750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132295750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561326d576001600760146101000a81548160ff02191690831515021790555061325161393d565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133235750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561332d57600090505b6000811561354057601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561339057506000601154115b1561342a576133bd60646133af60115488613b2890919063ffffffff16565b613b3e90919063ffffffff16565b9050601154601354826133d091906144b9565b6133da9190614542565b601560008282546133eb9190614396565b925050819055506011546012548261340391906144b9565b61340d9190614542565b6014600082825461341e9190614396565b9250508190555061351c565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561348557506000600e54115b1561351b576134b260646134a4600e5488613b2890919063ffffffff16565b613b3e90919063ffffffff16565b9050600e54601054826134c591906144b9565b6134cf9190614542565b601560008282546134e09190614396565b92505081905550600e54600f54826134f891906144b9565b6135029190614542565b601460008282546135139190614396565b925050819055505b5b6000811115613531576135308730836136bc565b5b808561353d9190615293565b94505b61354b8787876136bc565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561372c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372390614dfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561379c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379390614e90565b60405180910390fd5b6137a7838383613b54565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561382d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382490615339565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138c09190614396565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139249190614044565b60405180910390a3613937848484613b59565b50505050565b6000613948306114c8565b9050600060155460145461395c9190614396565b905060008083148061396e5750600082145b1561397b57505050613b26565b6014600b5461398a91906144b9565b8311156139a3576014600b546139a091906144b9565b92505b60004790506139b184613b5e565b60006139c68247613d9b90919063ffffffff16565b905060006139f1856139e360155485613b2890919063ffffffff16565b613b3e90919063ffffffff16565b905060006014819055506000601581905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a499061538a565b60006040518083038185875af1925050503d8060008114613a86576040519150601f19603f3d011682016040523d82523d6000602084013e613a8b565b606091505b505080945050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ad79061538a565b60006040518083038185875af1925050503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b5050809450505050505050505b565b60008183613b3691906144b9565b905092915050565b60008183613b4c9190614542565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613b7b57613b7a61539f565b5b604051908082528060200260200182016040528015613ba95781602001602082028036833780820191505090505b5090503081600081518110613bc157613bc06153ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8a9190615412565b81600181518110613c9e57613c9d6153ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d03307f0000000000000000000000000000000000000000000000000000000000000000846125f2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d65959493929190615538565b600060405180830381600087803b158015613d7f57600080fd5b505af1158015613d93573d6000803e3d6000fd5b505050505050565b60008183613da99190615293565b905092915050565b600080fd5b6000819050919050565b613dc981613db6565b8114613dd457600080fd5b50565b600081359050613de681613dc0565b92915050565b60008060408385031215613e0357613e02613db1565b5b6000613e1185828601613dd7565b9250506020613e2285828601613dd7565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e66578082015181840152602081019050613e4b565b83811115613e75576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e9782613e2c565b613ea18185613e37565b9350613eb1818560208601613e48565b613eba81613e7b565b840191505092915050565b60006020820190508181036000830152613edf8184613e8c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f1282613ee7565b9050919050565b613f2281613f07565b8114613f2d57600080fd5b50565b600081359050613f3f81613f19565b92915050565b60008060408385031215613f5c57613f5b613db1565b5b6000613f6a85828601613f30565b9250506020613f7b85828601613dd7565b9150509250929050565b60008115159050919050565b613f9a81613f85565b82525050565b6000602082019050613fb56000830184613f91565b92915050565b6000819050919050565b6000613fe0613fdb613fd684613ee7565b613fbb565b613ee7565b9050919050565b6000613ff282613fc5565b9050919050565b600061400482613fe7565b9050919050565b61401481613ff9565b82525050565b600060208201905061402f600083018461400b565b92915050565b61403e81613db6565b82525050565b60006020820190506140596000830184614035565b92915050565b60006020828403121561407557614074613db1565b5b600061408384828501613dd7565b91505092915050565b6000806000606084860312156140a5576140a4613db1565b5b60006140b386828701613f30565b93505060206140c486828701613f30565b92505060406140d586828701613dd7565b9150509250925092565b6140e881613f07565b82525050565b600060208201905061410360008301846140df565b92915050565b600060ff82169050919050565b61411f81614109565b82525050565b600060208201905061413a6000830184614116565b92915050565b60006020828403121561415657614155613db1565b5b600061416484828501613f30565b91505092915050565b61417681613f85565b811461418157600080fd5b50565b6000813590506141938161416d565b92915050565b600080604083850312156141b0576141af613db1565b5b60006141be85828601613f30565b92505060206141cf85828601614184565b9150509250929050565b6000602082840312156141ef576141ee613db1565b5b60006141fd84828501614184565b91505092915050565b61420f81614109565b811461421a57600080fd5b50565b60008135905061422c81614206565b92915050565b6000819050919050565b61424581614232565b811461425057600080fd5b50565b6000813590506142628161423c565b92915050565b60008060006060848603121561428157614280613db1565b5b600061428f8682870161421d565b93505060206142a086828701614253565b92505060406142b186828701614253565b9150509250925092565b600080604083850312156142d2576142d1613db1565b5b60006142e085828601613f30565b92505060206142f185828601613f30565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614331602083613e37565b915061433c826142fb565b602082019050919050565b6000602082019050818103600083015261436081614324565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143a182613db6565b91506143ac83613db6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143e1576143e0614367565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614422601d83613e37565b915061442d826143ec565b602082019050919050565b6000602082019050818103600083015261445181614415565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061449f57607f821691505b602082108114156144b3576144b2614458565b5b50919050565b60006144c482613db6565b91506144cf83613db6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561450857614507614367565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061454d82613db6565b915061455883613db6565b92508261456857614567614513565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006145cf602983613e37565b91506145da82614573565b604082019050919050565b600060208201905081810360008301526145fe816145c2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614661602883613e37565b915061466c82614605565b604082019050919050565b6000602082019050818103600083015261469081614654565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006146f3603983613e37565b91506146fe82614697565b604082019050919050565b60006020820190508181036000830152614722816146e6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614785602583613e37565b915061479082614729565b604082019050919050565b600060208201905081810360008301526147b481614778565b9050919050565b6147c481614232565b82525050565b600060a0820190506147df60008301886147bb565b6147ec60208301876147bb565b6147f960408301866147bb565b6148066060830185614035565b61481360808301846140df565b9695505050505050565b600060608201905061483260008301866147bb565b61483f60208301856147bb565b61484c6040830184614035565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614895600283614854565b91506148a08261485f565b600282019050919050565b6000819050919050565b6148c66148c182614232565b6148ab565b82525050565b60006148d782614888565b91506148e382856148b5565b6020820191506148f382846148b5565b6020820191508190509392505050565b600060808201905061491860008301876147bb565b6149256020830186614116565b61493260408301856147bb565b61493f60608301846147bb565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b600061497e601183613e37565b915061498982614948565b602082019050919050565b600060208201905081810360008301526149ad81614971565b9050919050565b7f496e76616c696420616e746920647261696e6572000000000000000000000000600082015250565b60006149ea601483613e37565b91506149f5826149b4565b602082019050919050565b60006020820190508181036000830152614a19816149dd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a7c602483613e37565b9150614a8782614a20565b604082019050919050565b60006020820190508181036000830152614aab81614a6f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b0e603583613e37565b9150614b1982614ab2565b604082019050919050565b60006020820190508181036000830152614b3d81614b01565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ba0603483613e37565b9150614bab82614b44565b604082019050919050565b60006020820190508181036000830152614bcf81614b93565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c32602683613e37565b9150614c3d82614bd6565b604082019050919050565b60006020820190508181036000830152614c6181614c25565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cc4602483613e37565b9150614ccf82614c68565b604082019050919050565b60006020820190508181036000830152614cf381614cb7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d56602283613e37565b9150614d6182614cfa565b604082019050919050565b60006020820190508181036000830152614d8581614d49565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614de8602583613e37565b9150614df382614d8c565b604082019050919050565b60006020820190508181036000830152614e1781614ddb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e7a602383613e37565b9150614e8582614e1e565b604082019050919050565b60006020820190508181036000830152614ea981614e6d565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614ee6601183613e37565b9150614ef182614eb0565b602082019050919050565b60006020820190508181036000830152614f1581614ed9565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614f52600f83613e37565b9150614f5d82614f1c565b602082019050919050565b60006020820190508181036000830152614f8181614f45565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fbe601683613e37565b9150614fc982614f88565b602082019050919050565b60006020820190508181036000830152614fed81614fb1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615050602f83613e37565b915061505b82614ff4565b604082019050919050565b6000602082019050818103600083015261507f81615043565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150bc601383613e37565b91506150c782615086565b602082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b600061514e603083613e37565b9150615159826150f2565b604082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b6000815190506151938161416d565b92915050565b6000602082840312156151af576151ae613db1565b5b60006151bd84828501615184565b91505092915050565b600060c0820190506151db60008301896140df565b6151e860208301886140df565b6151f560408301876140df565b6152026060830186614035565b61520f6080830185614035565b61521c60a0830184614035565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b600061525d601483613e37565b915061526882615227565b602082019050919050565b6000602082019050818103600083015261528c81615250565b9050919050565b600061529e82613db6565b91506152a983613db6565b9250828210156152bc576152bb614367565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615323602683613e37565b915061532e826152c7565b604082019050919050565b6000602082019050818103600083015261535281615316565b9050919050565b600081905092915050565b50565b6000615374600083615359565b915061537f82615364565b600082019050919050565b600061539582615367565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061540c81613f19565b92915050565b60006020828403121561542857615427613db1565b5b6000615436848285016153fd565b91505092915050565b6000819050919050565b600061546461545f61545a8461543f565b613fbb565b613db6565b9050919050565b61547481615449565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154af81613f07565b82525050565b60006154c183836154a6565b60208301905092915050565b6000602082019050919050565b60006154e58261547a565b6154ef8185615485565b93506154fa83615496565b8060005b8381101561552b57815161551288826154b5565b975061551d836154cd565b9250506001810190506154fe565b5085935050505092915050565b600060a08201905061554d6000830188614035565b61555a602083018761546b565b818103604083015261556c81866154da565b905061557b60608301856140df565b6155886080830184614035565b969550505050505056fea2646970667358221220446cd56ba919c1c8401da97964e9dfd5cf9fd5ce24436214e8e6de3b458922e064736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638da5cb5b11610190578063bae14e1d116100dc578063d85ba06311610095578063e2f456051161006f578063e2f4560514610ba3578063f2fde38b14610bce578063f8b45b0514610bf7578063f8f6329014610c225761030a565b8063d85ba06314610afe578063dd62ed3e14610b29578063e1bc339414610b665761030a565b8063bae14e1d146109f0578063bbc0c74214610a19578063c024666814610a44578063c18bc19514610a6d578063c3f70b5214610a96578063d257b34f14610ac15761030a565b80639fccce3211610149578063a9059cbb11610123578063a9059cbb14610924578063a90eab8c14610961578063aacebbe31461098a578063b62496f5146109b35761030a565b80639fccce3214610891578063a0d82dc5146108bc578063a457c2d7146108e75761030a565b80638da5cb5b1461079357806392136913146107be578063924de9b7146107e957806395d89b41146108125780639a7a23d61461083d5780639c3b4fdc146108665761030a565b80634a62bb651161024f578063703a490211610208578063751039fc116101e2578063751039fc146106fd5780637571336a146107285780637bce5a04146107515780638a8c523c1461077c5761030a565b8063703a49021461068057806370a08231146106a9578063715018a6146106e65761030a565b80634a62bb65146105705780634fbee1931461059b57806366ca9b83146105d857806368092bd9146106015780636a486a8e1461062a5780636ddd1713146106555761030a565b8063203e727e116102bc578063313ce56711610296578063313ce567146104b257806337c2810f146104dd578063395093511461050857806349bd5a5e146105455761030a565b8063203e727e1461042157806323b872dd1461044a5780632598cdb2146104875761030a565b806302dbd8f81461030f57806306fdde0314610338578063095ea7b3146103635780631694505e146103a057806318160ddd146103cb5780631f3fed8f146103f65761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613dec565b610c4d565b005b34801561034457600080fd5b5061034d610d37565b60405161035a9190613ec5565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613f45565b610dc9565b6040516103979190613fa0565b60405180910390f35b3480156103ac57600080fd5b506103b5610de7565b6040516103c2919061401a565b60405180910390f35b3480156103d757600080fd5b506103e0610e0b565b6040516103ed9190614044565b60405180910390f35b34801561040257600080fd5b5061040b610e15565b6040516104189190614044565b60405180910390f35b34801561042d57600080fd5b506104486004803603810190610443919061405f565b610e1b565b005b34801561045657600080fd5b50610471600480360381019061046c919061408c565b610f2a565b60405161047e9190613fa0565b60405180910390f35b34801561049357600080fd5b5061049c611022565b6040516104a991906140ee565b60405180910390f35b3480156104be57600080fd5b506104c7611048565b6040516104d49190614125565b60405180910390f35b3480156104e957600080fd5b506104f2611051565b6040516104ff91906140ee565b60405180910390f35b34801561051457600080fd5b5061052f600480360381019061052a9190613f45565b611077565b60405161053c9190613fa0565b60405180910390f35b34801561055157600080fd5b5061055a611123565b60405161056791906140ee565b60405180910390f35b34801561057c57600080fd5b50610585611149565b6040516105929190613fa0565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd9190614140565b61115c565b6040516105cf9190613fa0565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa9190613dec565b6111b2565b005b34801561060d57600080fd5b5061062860048036038101906106239190614199565b61129c565b005b34801561063657600080fd5b5061063f611373565b60405161064c9190614044565b60405180910390f35b34801561066157600080fd5b5061066a611379565b6040516106779190613fa0565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190614140565b61138c565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190614140565b6114c8565b6040516106dd9190614044565b60405180910390f35b3480156106f257600080fd5b506106fb611510565b005b34801561070957600080fd5b50610712611598565b60405161071f9190613fa0565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190614199565b611638565b005b34801561075d57600080fd5b5061076661170f565b6040516107739190614044565b60405180910390f35b34801561078857600080fd5b50610791611715565b005b34801561079f57600080fd5b506107a86117c9565b6040516107b591906140ee565b60405180910390f35b3480156107ca57600080fd5b506107d36117f3565b6040516107e09190614044565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b91906141d9565b6117f9565b005b34801561081e57600080fd5b50610827611892565b6040516108349190613ec5565b60405180910390f35b34801561084957600080fd5b50610864600480360381019061085f9190614199565b611924565b005b34801561087257600080fd5b5061087b611a3f565b6040516108889190614044565b60405180910390f35b34801561089d57600080fd5b506108a6611a45565b6040516108b39190614044565b60405180910390f35b3480156108c857600080fd5b506108d1611a4b565b6040516108de9190614044565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190613f45565b611a51565b60405161091b9190613fa0565b60405180910390f35b34801561093057600080fd5b5061094b60048036038101906109469190613f45565b611b3c565b6040516109589190613fa0565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614268565b611b5a565b005b34801561099657600080fd5b506109b160048036038101906109ac9190614140565b611de5565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190614140565b611f21565b6040516109e79190613fa0565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a129190614140565b611f41565b005b348015610a2557600080fd5b50610a2e612071565b604051610a3b9190613fa0565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a669190614199565b612084565b005b348015610a7957600080fd5b50610a946004803603810190610a8f919061405f565b6121a9565b005b348015610aa257600080fd5b50610aab6122b8565b604051610ab89190614044565b60405180910390f35b348015610acd57600080fd5b50610ae86004803603810190610ae3919061405f565b6122be565b604051610af59190613fa0565b60405180910390f35b348015610b0a57600080fd5b50610b13612413565b604051610b209190614044565b60405180910390f35b348015610b3557600080fd5b50610b506004803603810190610b4b91906142bb565b612419565b604051610b5d9190614044565b60405180910390f35b348015610b7257600080fd5b50610b8d6004803603810190610b889190614140565b6124a0565b604051610b9a9190613fa0565b60405180910390f35b348015610baf57600080fd5b50610bb86124c0565b604051610bc59190614044565b60405180910390f35b348015610bda57600080fd5b50610bf56004803603810190610bf09190614140565b6124c6565b005b348015610c0357600080fd5b50610c0c6125be565b604051610c199190614044565b60405180910390f35b348015610c2e57600080fd5b50610c376125c4565b604051610c4491906140ee565b60405180910390f35b610c556125ea565b73ffffffffffffffffffffffffffffffffffffffff16610c736117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090614347565b60405180910390fd5b8160128190555080601381905550601354601254610ce79190614396565b60118190555060196011541115610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614438565b60405180910390fd5b5050565b606060038054610d4690614487565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7290614487565b8015610dbf5780601f10610d9457610100808354040283529160200191610dbf565b820191906000526020600020905b815481529060010190602001808311610da257829003601f168201915b5050505050905090565b6000610ddd610dd66125ea565b84846125f2565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60145481565b610e236125ea565b73ffffffffffffffffffffffffffffffffffffffff16610e416117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614347565b60405180910390fd5b670de0b6b3a76400006103e86001610ead610e0b565b610eb791906144b9565b610ec19190614542565b610ecb9190614542565b811015610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906145e5565b60405180910390fd5b670de0b6b3a764000081610f2191906144b9565b600a8190555050565b6000610f378484846127bd565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f826125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990614677565b60405180910390fd5b6110168561100e6125ea565b8584036125f2565b60019150509392505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006111196110846125ea565b8484600160006110926125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111149190614396565b6125f2565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111ba6125ea565b73ffffffffffffffffffffffffffffffffffffffff166111d86117c9565b73ffffffffffffffffffffffffffffffffffffffff161461122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122590614347565b60405180910390fd5b81600f8190555080601081905550601054600f5461124c9190614396565b600e819055506019600e541115611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f90614438565b60405180910390fd5b5050565b6112a46125ea565b73ffffffffffffffffffffffffffffffffffffffff166112c26117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130f90614347565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b600d60029054906101000a900460ff1681565b6113946125ea565b73ffffffffffffffffffffffffffffffffffffffff166113b26117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90614347565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f88bf70d4f3c446213b5064d7cfe95ec0ed196748f014c19a833117bac32468fd60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115186125ea565b73ffffffffffffffffffffffffffffffffffffffff166115366117c9565b73ffffffffffffffffffffffffffffffffffffffff161461158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390614347565b60405180910390fd5b6115966000613555565b565b60006115a26125ea565b73ffffffffffffffffffffffffffffffffffffffff166115c06117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d90614347565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b6116406125ea565b73ffffffffffffffffffffffffffffffffffffffff1661165e6117c9565b73ffffffffffffffffffffffffffffffffffffffff16146116b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ab90614347565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b61171d6125ea565b73ffffffffffffffffffffffffffffffffffffffff1661173b6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178890614347565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b6118016125ea565b73ffffffffffffffffffffffffffffffffffffffff1661181f6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90614347565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b6060600480546118a190614487565b80601f01602080910402602001604051908101604052809291908181526020018280546118cd90614487565b801561191a5780601f106118ef5761010080835404028352916020019161191a565b820191906000526020600020905b8154815290600101906020018083116118fd57829003601f168201915b5050505050905090565b61192c6125ea565b73ffffffffffffffffffffffffffffffffffffffff1661194a6117c9565b73ffffffffffffffffffffffffffffffffffffffff16146119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790614347565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2890614709565b60405180910390fd5b611a3b828261361b565b5050565b60105481565b60155481565b60135481565b60008060016000611a606125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b149061479b565b60405180910390fd5b611b31611b286125ea565b858584036125f2565b600191505092915050565b6000611b50611b496125ea565b84846127bd565b6001905092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611c0d9594939291906147ca565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001206000604051602001611c999392919061481d565b60405160208183030381529060405280519060200120905060008282604051602001611cc69291906148cc565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051611d039493929190614903565b6020604051602081039080840390855afa158015611d25573d6000803e3d6000fd5b505050602060405103519050611d396117c9565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614994565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555050505050505050565b611ded6125ea565b73ffffffffffffffffffffffffffffffffffffffff16611e0b6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890614347565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b611f496125ea565b73ffffffffffffffffffffffffffffffffffffffff16611f676117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490614347565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614a00565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60019054906101000a900460ff1681565b61208c6125ea565b73ffffffffffffffffffffffffffffffffffffffff166120aa6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614612100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f790614347565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161219d9190613fa0565b60405180910390a25050565b6121b16125ea565b73ffffffffffffffffffffffffffffffffffffffff166121cf6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c90614347565b60405180910390fd5b670de0b6b3a76400006103e8600561223b610e0b565b61224591906144b9565b61224f9190614542565b6122599190614542565b81101561229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290614a92565b60405180910390fd5b670de0b6b3a7640000816122af91906144b9565b600c8190555050565b600a5481565b60006122c86125ea565b73ffffffffffffffffffffffffffffffffffffffff166122e66117c9565b73ffffffffffffffffffffffffffffffffffffffff161461233c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233390614347565b60405180910390fd5b620186a0600161234a610e0b565b61235491906144b9565b61235e9190614542565b8210156123a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239790614b24565b60405180910390fd5b6103e860056123ad610e0b565b6123b791906144b9565b6123c19190614542565b821115612403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fa90614bb6565b60405180910390fd5b81600b8190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b6124ce6125ea565b73ffffffffffffffffffffffffffffffffffffffff166124ec6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253990614347565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614c48565b60405180910390fd5b6125bb81613555565b50565b600c5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614cda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c990614d6c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127b09190614044565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561282d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282490614dfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490614e90565b60405180910390fd5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561292a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292190614efc565b60405180910390fd5b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90614f68565b60405180910390fd5b60008114156129d1576129cc838360006136bc565b613550565b600d60009054906101000a900460ff1615612ecc576129ee6117c9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a5c5750612a2c6117c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a955750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612acf575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae85750600760149054906101000a900460ff16155b15612ecb57600d60019054906101000a900460ff16612be257601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ba25750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd890614fd4565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c855750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2c57600a54811115612ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc690615066565b60405180910390fd5b600c54612cdb836114c8565b82612ce69190614396565b1115612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e906150d2565b60405180910390fd5b612eca565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dcf5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e1e57600a54811115612e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1090615164565b60405180910390fd5b612ec9565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ec857600c54612e7b836114c8565b82612e869190614396565b1115612ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebe906150d2565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612fc35750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612f8191906140ee565b602060405180830381865afa158015612f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc29190615199565b5b156130de576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54600a54600b546040518763ffffffff1660e01b8152600401613057969594939291906151c6565b6020604051808303816000875af1158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190615199565b9050806130dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d390615273565b60405180910390fd5b505b60006130e9306114c8565b90506000600b54821015905080801561310e5750600d60029054906101000a900460ff165b80156131275750600760149054906101000a900460ff16155b801561317d5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131d35750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132295750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561326d576001600760146101000a81548160ff02191690831515021790555061325161393d565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133235750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561332d57600090505b6000811561354057601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561339057506000601154115b1561342a576133bd60646133af60115488613b2890919063ffffffff16565b613b3e90919063ffffffff16565b9050601154601354826133d091906144b9565b6133da9190614542565b601560008282546133eb9190614396565b925050819055506011546012548261340391906144b9565b61340d9190614542565b6014600082825461341e9190614396565b9250508190555061351c565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561348557506000600e54115b1561351b576134b260646134a4600e5488613b2890919063ffffffff16565b613b3e90919063ffffffff16565b9050600e54601054826134c591906144b9565b6134cf9190614542565b601560008282546134e09190614396565b92505081905550600e54600f54826134f891906144b9565b6135029190614542565b601460008282546135139190614396565b925050819055505b5b6000811115613531576135308730836136bc565b5b808561353d9190615293565b94505b61354b8787876136bc565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561372c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372390614dfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561379c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379390614e90565b60405180910390fd5b6137a7838383613b54565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561382d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382490615339565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138c09190614396565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139249190614044565b60405180910390a3613937848484613b59565b50505050565b6000613948306114c8565b9050600060155460145461395c9190614396565b905060008083148061396e5750600082145b1561397b57505050613b26565b6014600b5461398a91906144b9565b8311156139a3576014600b546139a091906144b9565b92505b60004790506139b184613b5e565b60006139c68247613d9b90919063ffffffff16565b905060006139f1856139e360155485613b2890919063ffffffff16565b613b3e90919063ffffffff16565b905060006014819055506000601581905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a499061538a565b60006040518083038185875af1925050503d8060008114613a86576040519150601f19603f3d011682016040523d82523d6000602084013e613a8b565b606091505b505080945050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ad79061538a565b60006040518083038185875af1925050503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b5050809450505050505050505b565b60008183613b3691906144b9565b905092915050565b60008183613b4c9190614542565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613b7b57613b7a61539f565b5b604051908082528060200260200182016040528015613ba95781602001602082028036833780820191505090505b5090503081600081518110613bc157613bc06153ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8a9190615412565b81600181518110613c9e57613c9d6153ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d03307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846125f2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d65959493929190615538565b600060405180830381600087803b158015613d7f57600080fd5b505af1158015613d93573d6000803e3d6000fd5b505050505050565b60008183613da99190615293565b905092915050565b600080fd5b6000819050919050565b613dc981613db6565b8114613dd457600080fd5b50565b600081359050613de681613dc0565b92915050565b60008060408385031215613e0357613e02613db1565b5b6000613e1185828601613dd7565b9250506020613e2285828601613dd7565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e66578082015181840152602081019050613e4b565b83811115613e75576000848401525b50505050565b6000601f19601f8301169050919050565b6000613e9782613e2c565b613ea18185613e37565b9350613eb1818560208601613e48565b613eba81613e7b565b840191505092915050565b60006020820190508181036000830152613edf8184613e8c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f1282613ee7565b9050919050565b613f2281613f07565b8114613f2d57600080fd5b50565b600081359050613f3f81613f19565b92915050565b60008060408385031215613f5c57613f5b613db1565b5b6000613f6a85828601613f30565b9250506020613f7b85828601613dd7565b9150509250929050565b60008115159050919050565b613f9a81613f85565b82525050565b6000602082019050613fb56000830184613f91565b92915050565b6000819050919050565b6000613fe0613fdb613fd684613ee7565b613fbb565b613ee7565b9050919050565b6000613ff282613fc5565b9050919050565b600061400482613fe7565b9050919050565b61401481613ff9565b82525050565b600060208201905061402f600083018461400b565b92915050565b61403e81613db6565b82525050565b60006020820190506140596000830184614035565b92915050565b60006020828403121561407557614074613db1565b5b600061408384828501613dd7565b91505092915050565b6000806000606084860312156140a5576140a4613db1565b5b60006140b386828701613f30565b93505060206140c486828701613f30565b92505060406140d586828701613dd7565b9150509250925092565b6140e881613f07565b82525050565b600060208201905061410360008301846140df565b92915050565b600060ff82169050919050565b61411f81614109565b82525050565b600060208201905061413a6000830184614116565b92915050565b60006020828403121561415657614155613db1565b5b600061416484828501613f30565b91505092915050565b61417681613f85565b811461418157600080fd5b50565b6000813590506141938161416d565b92915050565b600080604083850312156141b0576141af613db1565b5b60006141be85828601613f30565b92505060206141cf85828601614184565b9150509250929050565b6000602082840312156141ef576141ee613db1565b5b60006141fd84828501614184565b91505092915050565b61420f81614109565b811461421a57600080fd5b50565b60008135905061422c81614206565b92915050565b6000819050919050565b61424581614232565b811461425057600080fd5b50565b6000813590506142628161423c565b92915050565b60008060006060848603121561428157614280613db1565b5b600061428f8682870161421d565b93505060206142a086828701614253565b92505060406142b186828701614253565b9150509250925092565b600080604083850312156142d2576142d1613db1565b5b60006142e085828601613f30565b92505060206142f185828601613f30565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614331602083613e37565b915061433c826142fb565b602082019050919050565b6000602082019050818103600083015261436081614324565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143a182613db6565b91506143ac83613db6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143e1576143e0614367565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614422601d83613e37565b915061442d826143ec565b602082019050919050565b6000602082019050818103600083015261445181614415565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061449f57607f821691505b602082108114156144b3576144b2614458565b5b50919050565b60006144c482613db6565b91506144cf83613db6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561450857614507614367565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061454d82613db6565b915061455883613db6565b92508261456857614567614513565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006145cf602983613e37565b91506145da82614573565b604082019050919050565b600060208201905081810360008301526145fe816145c2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614661602883613e37565b915061466c82614605565b604082019050919050565b6000602082019050818103600083015261469081614654565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006146f3603983613e37565b91506146fe82614697565b604082019050919050565b60006020820190508181036000830152614722816146e6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614785602583613e37565b915061479082614729565b604082019050919050565b600060208201905081810360008301526147b481614778565b9050919050565b6147c481614232565b82525050565b600060a0820190506147df60008301886147bb565b6147ec60208301876147bb565b6147f960408301866147bb565b6148066060830185614035565b61481360808301846140df565b9695505050505050565b600060608201905061483260008301866147bb565b61483f60208301856147bb565b61484c6040830184614035565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614895600283614854565b91506148a08261485f565b600282019050919050565b6000819050919050565b6148c66148c182614232565b6148ab565b82525050565b60006148d782614888565b91506148e382856148b5565b6020820191506148f382846148b5565b6020820191508190509392505050565b600060808201905061491860008301876147bb565b6149256020830186614116565b61493260408301856147bb565b61493f60608301846147bb565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b600061497e601183613e37565b915061498982614948565b602082019050919050565b600060208201905081810360008301526149ad81614971565b9050919050565b7f496e76616c696420616e746920647261696e6572000000000000000000000000600082015250565b60006149ea601483613e37565b91506149f5826149b4565b602082019050919050565b60006020820190508181036000830152614a19816149dd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a7c602483613e37565b9150614a8782614a20565b604082019050919050565b60006020820190508181036000830152614aab81614a6f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b0e603583613e37565b9150614b1982614ab2565b604082019050919050565b60006020820190508181036000830152614b3d81614b01565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ba0603483613e37565b9150614bab82614b44565b604082019050919050565b60006020820190508181036000830152614bcf81614b93565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c32602683613e37565b9150614c3d82614bd6565b604082019050919050565b60006020820190508181036000830152614c6181614c25565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cc4602483613e37565b9150614ccf82614c68565b604082019050919050565b60006020820190508181036000830152614cf381614cb7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d56602283613e37565b9150614d6182614cfa565b604082019050919050565b60006020820190508181036000830152614d8581614d49565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614de8602583613e37565b9150614df382614d8c565b604082019050919050565b60006020820190508181036000830152614e1781614ddb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e7a602383613e37565b9150614e8582614e1e565b604082019050919050565b60006020820190508181036000830152614ea981614e6d565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614ee6601183613e37565b9150614ef182614eb0565b602082019050919050565b60006020820190508181036000830152614f1581614ed9565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614f52600f83613e37565b9150614f5d82614f1c565b602082019050919050565b60006020820190508181036000830152614f8181614f45565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fbe601683613e37565b9150614fc982614f88565b602082019050919050565b60006020820190508181036000830152614fed81614fb1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615050602f83613e37565b915061505b82614ff4565b604082019050919050565b6000602082019050818103600083015261507f81615043565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006150bc601383613e37565b91506150c782615086565b602082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b600061514e603083613e37565b9150615159826150f2565b604082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b6000815190506151938161416d565b92915050565b6000602082840312156151af576151ae613db1565b5b60006151bd84828501615184565b91505092915050565b600060c0820190506151db60008301896140df565b6151e860208301886140df565b6151f560408301876140df565b6152026060830186614035565b61520f6080830185614035565b61521c60a0830184614035565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b600061525d601483613e37565b915061526882615227565b602082019050919050565b6000602082019050818103600083015261528c81615250565b9050919050565b600061529e82613db6565b91506152a983613db6565b9250828210156152bc576152bb614367565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615323602683613e37565b915061532e826152c7565b604082019050919050565b6000602082019050818103600083015261535281615316565b9050919050565b600081905092915050565b50565b6000615374600083615359565b915061537f82615364565b600082019050919050565b600061539582615367565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061540c81613f19565b92915050565b60006020828403121561542857615427613db1565b5b6000615436848285016153fd565b91505092915050565b6000819050919050565b600061546461545f61545a8461543f565b613fbb565b613db6565b9050919050565b61547481615449565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154af81613f07565b82525050565b60006154c183836154a6565b60208301905092915050565b6000602082019050919050565b60006154e58261547a565b6154ef8185615485565b93506154fa83615496565b8060005b8381101561552b57815161551288826154b5565b975061551d836154cd565b9250506001810190506154fe565b5085935050505092915050565b600060a08201905061554d6000830188614035565b61555a602083018761546b565b818103604083015261556c81866154da565b905061557b60608301856140df565b6155886080830184614035565b969550505050505056fea2646970667358221220446cd56ba919c1c8401da97964e9dfd5cf9fd5ce24436214e8e6de3b458922e064736f6c634300080a0033

Deployed Bytecode Sourcemap

15292:13662:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22152:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2725:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3639:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15369:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3046:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16043:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20933:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3816:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15564:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2945:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15462:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4316:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15427:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15712:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23579:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21833:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20071:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15936:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15792:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23174:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3162:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;873:103;;;;;;;;;;;;;:::i;:::-;;20237:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21468:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15866:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18881:112;;;;;;;;;;;;;:::i;:::-;;650:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15971:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21725:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2833:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22668:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15903:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16083:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16009:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4539:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3297:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19001:1062;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23390:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16296:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18691:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15752:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22478:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21204:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15603:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20428:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15832:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3480:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16230:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15639:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;984:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15679:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15527:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22152:318;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22290:13:::1;22271:16;:32;;;;22327:7;22314:10;:20;;;;22380:10;;22361:16;;:29;;;;:::i;:::-;22345:13;:45;;;;22426:2;22409:13;;:19;;22401:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22152:318:::0;;:::o;2725:100::-;2779:13;2812:5;2805:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2725:100;:::o;3639:169::-;3722:4;3739:39;3748:12;:10;:12::i;:::-;3762:7;3771:6;3739:8;:39::i;:::-;3796:4;3789:11;;3639:169;;;;:::o;15369:51::-;;;:::o;3046:108::-;3107:7;3134:12;;3127:19;;3046:108;:::o;16043:33::-;;;;:::o;20933:263::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21070:4:::1;21062;21057:1;21041:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21040:26;;;;:::i;:::-;21039:35;;;;:::i;:::-;21029:6;:45;;21007:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;21181:6;21171;:17;;;;:::i;:::-;21154:14;:34;;;;20933:263:::0;:::o;3816:492::-;3956:4;3973:36;3983:6;3991:9;4002:6;3973:9;:36::i;:::-;4022:24;4049:11;:19;4061:6;4049:19;;;;;;;;;;;;;;;:33;4069:12;:10;:12::i;:::-;4049:33;;;;;;;;;;;;;;;;4022:60;;4121:6;4101:16;:26;;4093:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4208:57;4217:6;4225:12;:10;:12::i;:::-;4258:6;4239:16;:25;4208:8;:57::i;:::-;4296:4;4289:11;;;3816:492;;;;;:::o;15564:30::-;;;;;;;;;;;;;:::o;2945:93::-;3003:5;3028:2;3021:9;;2945:93;:::o;15462:26::-;;;;;;;;;;;;;:::o;4316:215::-;4404:4;4421:80;4430:12;:10;:12::i;:::-;4444:7;4490:10;4453:11;:25;4465:12;:10;:12::i;:::-;4453:25;;;;;;;;;;;;;;;:34;4479:7;4453:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4421:8;:80::i;:::-;4519:4;4512:11;;4316:215;;;;:::o;15427:28::-;;;;;;;;;;;;;:::o;15712:33::-;;;;;;;;;;;;;:::o;23579:126::-;23645:4;23669:19;:28;23689:7;23669:28;;;;;;;;;;;;;;;;;;;;;;;;;23662:35;;23579:126;;;:::o;21833:311::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21969:13:::1;21951:15;:31;;;;22005:7;21993:9;:19;;;;22056:9;;22038:15;;:27;;;;:::i;:::-;22023:12;:42;;;;22100:2;22084:12;;:18;;22076:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21833:311:::0;;:::o;20071:114::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20171:6:::1;20150:12;:18;20163:4;20150:18;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;20071:114:::0;;:::o;15936:28::-;;;;:::o;15792:31::-;;;;;;;;;;;;;:::o;23174:208::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23311:15:::1;;;;;;;;;;;23268:59;;23291:18;23268:59;;;;;;;;;;;;23356:18;23338:15;;:36;;;;;;;;;;;;;;;;;;23174:208:::0;:::o;3162:127::-;3236:7;3263:9;:18;3273:7;3263:18;;;;;;;;;;;;;;;;3256:25;;3162:127;;;:::o;873:103::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;938:30:::1;965:1;938:18;:30::i;:::-;873:103::o:0;20237:121::-;20289:4;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20323:5:::1;20306:14;;:22;;;;;;;;;;;;;;;;;;20346:4;20339:11;;20237:121:::0;:::o;21468:161::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21617:4:::1;21581:25;:33;21607:6;21581:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;21468:161:::0;;:::o;15866:30::-;;;;:::o;18881:112::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18952:4:::1;18936:13;;:20;;;;;;;;;;;;;;;;;;18981:4;18967:11;;:18;;;;;;;;;;;;;;;;;;18881:112::o:0;650:87::-;696:7;723:6;;;;;;;;;;;716:13;;650:87;:::o;15971:31::-;;;;:::o;21725:100::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21810:7:::1;21796:11;;:21;;;;;;;;;;;;;;;;;;21725:100:::0;:::o;2833:104::-;2889:13;2922:7;2915:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2833:104;:::o;22668:304::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22812:13:::1;;;;;;;;;;;22804:21;;:4;:21;;;;22782:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;22923:41;22952:4;22958:5;22923:28;:41::i;:::-;22668:304:::0;;:::o;15903:24::-;;;;:::o;16083:27::-;;;;:::o;16009:25::-;;;;:::o;4539:413::-;4632:4;4649:24;4676:11;:25;4688:12;:10;:12::i;:::-;4676:25;;;;;;;;;;;;;;;:34;4702:7;4676:34;;;;;;;;;;;;;;;;4649:61;;4749:15;4729:16;:35;;4721:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4842:67;4851:12;:10;:12::i;:::-;4865:7;4893:15;4874:16;:34;4842:8;:67::i;:::-;4940:4;4933:11;;;4539:413;;;;:::o;3297:175::-;3383:4;3400:42;3410:12;:10;:12::i;:::-;3424:9;3435:6;3400:9;:42::i;:::-;3460:4;3453:11;;3297:175;;;;:::o;19001:1062::-;19085:18;19159:95;19283:22;;;;;;;;;;;;;;;;;19273:33;;;;;;19335:10;;;;;;;;;;;;;;;;;19325:21;;;;;;19365:13;19405:4;19130:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19106:330;;;;;;19085:351;;19449:18;19523:49;19601:23;;;;;;;;;;;;;;;;;19591:34;;;;;;19652:1;19494:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19470:210;;;;;;19449:231;;19693:14;19798:10;19827;19734:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19710:169;;;;;;19693:186;;19892:14;19909:26;19919:6;19927:1;19930;19933;19909:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19892:43;;19964:7;:5;:7::i;:::-;19954:17;;:6;:17;;;19946:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;20022:4;20006:13;;:20;;;;;;;;;;;;;;;;;;20051:4;20037:11;;:18;;;;;;;;;;;;;;;;;;19074:989;;;;19001:1062;;;:::o;23390:181::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23509:15:::1;;;;;;;;;;;23475:50;;23498:9;23475:50;;;;;;;;;;;;23554:9;23536:15;;:27;;;;;;;;;;;;;;;;;;23390:181:::0;:::o;16296:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;18691:182::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18799:3:::1;18775:28;;:12;:28;;;;18767:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;18853:12;18839:11;;:26;;;;;;;;;;;;;;;;;;18691:182:::0;:::o;15752:33::-;;;;;;;;;;;;;:::o;22478:182::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22594:8:::1;22563:19;:28;22583:7;22563:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22634:7;22618:34;;;22643:8;22618:34;;;;;;:::i;:::-;;;;;;;;22478:182:::0;;:::o;21204:256::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21344:4:::1;21336;21331:1;21315:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21314:26;;;;:::i;:::-;21313:35;;;;:::i;:::-;21303:6;:45;;21281:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21445:6;21435;:17;;;;:::i;:::-;21423:9;:29;;;;21204:256:::0;:::o;15603:29::-;;;;:::o;20428:497::-;20536:4;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20615:6:::1;20610:1;20594:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20593:28;;;;:::i;:::-;20580:9;:41;;20558:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20770:4;20765:1;20749:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20748:26;;;;:::i;:::-;20735:9;:39;;20713:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20886:9;20865:18;:30;;;;20913:4;20906:11;;20428:497:::0;;;:::o;15832:27::-;;;;:::o;3480:151::-;3569:7;3596:11;:18;3608:5;3596:18;;;;;;;;;;;;;;;:27;3615:7;3596:27;;;;;;;;;;;;;;;;3589:34;;3480:151;;;;:::o;16230:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15639:33::-;;;;:::o;984:201::-;796:12;:10;:12::i;:::-;785:23;;:7;:5;:7::i;:::-;:23;;;777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1093:1:::1;1073:22;;:8;:22;;;;1065:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1149:28;1168:8;1149:18;:28::i;:::-;984:201:::0;:::o;15679:24::-;;;;:::o;15527:30::-;;;;;;;;;;;;;:::o;196:98::-;249:7;276:10;269:17;;196:98;:::o;6707:380::-;6860:1;6843:19;;:5;:19;;;;6835:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6941:1;6922:21;;:7;:21;;;;6914:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7025:6;6995:11;:18;7007:5;6995:18;;;;;;;;;;;;;;;:27;7014:7;6995:27;;;;;;;;;;;;;;;:36;;;;7063:7;7047:32;;7056:5;7047:32;;;7072:6;7047:32;;;;;;:::i;:::-;;;;;;;;6707:380;;;:::o;23713:3606::-;23861:1;23845:18;;:4;:18;;;;23837:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23938:1;23924:16;;:2;:16;;;;23916:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24000:12;:18;24013:4;24000:18;;;;;;;;;;;;;;;;;;;;;;;;;23999:19;23991:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24060:12;:16;24073:2;24060:16;;;;;;;;;;;;;;;;;;;;;;;;;24059:17;24051:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;24123:1;24113:6;:11;24109:93;;;24141:28;24157:4;24163:2;24167:1;24141:15;:28::i;:::-;24184:7;;24109:93;24218:14;;;;;;;;;;;24214:1150;;;24261:7;:5;:7::i;:::-;24253:15;;:4;:15;;;;:49;;;;;24295:7;:5;:7::i;:::-;24289:13;;:2;:13;;;;24253:49;:86;;;;;24337:1;24323:16;;:2;:16;;;;24253:86;:128;;;;;24374:6;24360:21;;:2;:21;;;;24253:128;:158;;;;;24403:8;;;;;;;;;;;24402:9;24253:158;24249:1104;;;24437:13;;;;;;;;;;;24432:150;;24483:19;:25;24503:4;24483:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24512:19;:23;24532:2;24512:23;;;;;;;;;;;;;;;;;;;;;;;;;24483:52;24475:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24432:150;24634:25;:31;24660:4;24634:31;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;24670:25;:29;24696:2;24670:29;;;;;;;;;;;;;;;;;;;;;;;;;24669:30;24634:65;24630:708;;;24742:14;;24732:6;:24;;24724:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;24865:9;;24848:13;24858:2;24848:9;:13::i;:::-;24839:6;:22;;;;:::i;:::-;:35;;24831:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24630:708;;;24974:25;:29;25000:2;24974:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;25008:25;:31;25034:4;25008:31;;;;;;;;;;;;;;;;;;;;;;;;;25007:32;24974:65;24970:368;;;25082:14;;25072:6;:24;;25064:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;24970:368;;;25197:25;:29;25223:2;25197:29;;;;;;;;;;;;;;;;;;;;;;;;;25192:146;;25285:9;;25268:13;25278:2;25268:9;:13::i;:::-;25259:6;:22;;;;:::i;:::-;:35;;25251:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25192:146;24970:368;24630:708;24249:1104;24214:1150;25403:1;25380:25;;:11;;;;;;;;;;;:25;;;;:79;;;;;25422:11;;;;;;;;;;;25409:35;;;25453:4;25409:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25380:79;25376:290;;;25476:10;25502:11;;;;;;;;;;;25489:31;;;25521:4;25527:2;25539:13;;;;;;;;;;;25555:9;;25566:14;;25582:18;;25489:112;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25476:125;;25624:5;25616:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25461:205;25376:290;25678:28;25709:24;25727:4;25709:9;:24::i;:::-;25678:55;;25744:12;25783:18;;25759:20;:42;;25744:57;;25816:7;:35;;;;;25840:11;;;;;;;;;;;25816:35;:61;;;;;25869:8;;;;;;;;;;;25868:9;25816:61;:110;;;;;25895:25;:31;25921:4;25895:31;;;;;;;;;;;;;;;;;;;;;;;;;25894:32;25816:110;:153;;;;;25944:19;:25;25964:4;25944:25;;;;;;;;;;;;;;;;;;;;;;;;;25943:26;25816:153;:194;;;;;25987:19;:23;26007:2;25987:23;;;;;;;;;;;;;;;;;;;;;;;;;25986:24;25816:194;25812:300;;;26040:4;26029:8;;:15;;;;;;;;;;;;;;;;;;26059:10;:8;:10::i;:::-;26095:5;26084:8;;:16;;;;;;;;;;;;;;;;;;25812:300;26124:12;26140:8;;;;;;;;;;;26139:9;26124:24;;26250:19;:25;26270:4;26250:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26279:19;:23;26299:2;26279:23;;;;;;;;;;;;;;;;;;;;;;;;;26250:52;26246:100;;;26329:5;26319:15;;26246:100;26358:12;26463:7;26459:807;;;26515:25;:29;26541:2;26515:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26564:1;26548:13;;:17;26515:50;26511:606;;;26593:34;26623:3;26593:25;26604:13;;26593:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26586:41;;26684:13;;26670:10;;26663:4;:17;;;;:::i;:::-;26662:35;;;;:::i;:::-;26646:12;;:51;;;;;;;:::i;:::-;;;;;;;;26766:13;;26746:16;;26739:4;:23;;;;:::i;:::-;26738:41;;;;:::i;:::-;26716:18;;:63;;;;;;;:::i;:::-;;;;;;;;26511:606;;;26841:25;:31;26867:4;26841:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26891:1;26876:12;;:16;26841:51;26837:280;;;26920:33;26949:3;26920:24;26931:12;;26920:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26913:40;;27009:12;;26996:9;;26989:4;:16;;;;:::i;:::-;26988:33;;;;:::i;:::-;26972:12;;:49;;;;;;;:::i;:::-;;;;;;;;27089:12;;27070:15;;27063:4;:22;;;;:::i;:::-;27062:39;;;;:::i;:::-;27040:18;;:61;;;;;;;:::i;:::-;;;;;;;;26837:280;26511:606;27144:1;27137:4;:8;27133:91;;;27166:42;27182:4;27196;27203;27166:15;:42::i;:::-;27133:91;27250:4;27240:14;;;;;:::i;:::-;;;26459:807;27278:33;27294:4;27300:2;27304:6;27278:15;:33::i;:::-;23826:3493;;;;23713:3606;;;;:::o;1193:191::-;1267:16;1286:6;;;;;;;;;;;1267:25;;1312:8;1303:6;;:17;;;;;;;;;;;;;;;;;;1367:8;1336:40;;1357:8;1336:40;;;;;;;;;;;;1256:128;1193:191;:::o;22980:186::-;23097:5;23063:25;:31;23089:4;23063:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23152:5;23118:40;;23146:4;23118:40;;;;;;;;;;;;22980:186;;:::o;4960:733::-;5118:1;5100:20;;:6;:20;;;;5092:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5202:1;5181:23;;:9;:23;;;;5173:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5257:47;5278:6;5286:9;5297:6;5257:20;:47::i;:::-;5317:21;5341:9;:17;5351:6;5341:17;;;;;;;;;;;;;;;;5317:41;;5394:6;5377:13;:23;;5369:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5515:6;5499:13;:22;5479:9;:17;5489:6;5479:17;;;;;;;;;;;;;;;:42;;;;5567:6;5543:9;:20;5553:9;5543:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5608:9;5591:35;;5600:6;5591:35;;;5619:6;5591:35;;;;;;:::i;:::-;;;;;;;;5639:46;5659:6;5667:9;5678:6;5639:19;:46::i;:::-;5081:612;4960:733;;;:::o;28039:912::-;28078:23;28104:24;28122:4;28104:9;:24::i;:::-;28078:50;;28139:25;28188:12;;28167:18;;:33;;;;:::i;:::-;28139:61;;28211:12;28259:1;28240:15;:20;:46;;;;28285:1;28264:17;:22;28240:46;28236:85;;;28303:7;;;;;28236:85;28376:2;28355:18;;:23;;;;:::i;:::-;28337:15;:41;28333:115;;;28434:2;28413:18;;:23;;;;:::i;:::-;28395:41;;28333:115;28460:25;28488:21;28460:49;;28520:33;28537:15;28520:16;:33::i;:::-;28566:18;28587:44;28613:17;28587:21;:25;;:44;;;;:::i;:::-;28566:65;;28642:17;28662:51;28695:17;28662:28;28677:12;;28662:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28642:71;;28747:1;28726:18;:22;;;;28774:1;28759:12;:16;;;;28810:15;;;;;;;;;;;28802:29;;28839:9;28802:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28788:65;;;;;28886:15;;;;;;;;;;;28878:29;;28916:21;28878:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28864:79;;;;;28067:884;;;;;;28039:912;:::o;8711:98::-;8769:7;8800:1;8796;:5;;;;:::i;:::-;8789:12;;8711:98;;;;:::o;8817:::-;8875:7;8906:1;8902;:5;;;;:::i;:::-;8895:12;;8817:98;;;;:::o;7095:125::-;;;;:::o;7228:124::-;;;;:::o;27442:589::-;27568:21;27606:1;27592:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27568:40;;27637:4;27619;27624:1;27619:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27663:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27653:4;27658:1;27653:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27698:62;27715:4;27730:15;27748:11;27698:8;:62::i;:::-;27799:15;:66;;;27880:11;27906:1;27950:4;27977;27997:15;27799:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27497:534;27442:589;:::o;8605:98::-;8663:7;8694:1;8690;:5;;;;:::i;:::-;8683:12;;8605:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:60::-;4002:3;4023:5;4016:12;;3974:60;;;:::o;4040:142::-;4090:9;4123:53;4141:34;4150:24;4168:5;4150:24;:::i;:::-;4141:34;:::i;:::-;4123:53;:::i;:::-;4110:66;;4040:142;;;:::o;4188:126::-;4238:9;4271:37;4302:5;4271:37;:::i;:::-;4258:50;;4188:126;;;:::o;4320:153::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4320:153;;;:::o;4479:185::-;4593:64;4651:5;4593:64;:::i;:::-;4588:3;4581:77;4479:185;;:::o;4670:276::-;4790:4;4828:2;4817:9;4813:18;4805:26;;4841:98;4936:1;4925:9;4921:17;4912:6;4841:98;:::i;:::-;4670:276;;;;:::o;4952:118::-;5039:24;5057:5;5039:24;:::i;:::-;5034:3;5027:37;4952:118;;:::o;5076:222::-;5169:4;5207:2;5196:9;5192:18;5184:26;;5220:71;5288:1;5277:9;5273:17;5264:6;5220:71;:::i;:::-;5076:222;;;;:::o;5304:329::-;5363:6;5412:2;5400:9;5391:7;5387:23;5383:32;5380:119;;;5418:79;;:::i;:::-;5380:119;5538:1;5563:53;5608:7;5599:6;5588:9;5584:22;5563:53;:::i;:::-;5553:63;;5509:117;5304:329;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:118::-;6351:24;6369:5;6351:24;:::i;:::-;6346:3;6339:37;6264:118;;:::o;6388:222::-;6481:4;6519:2;6508:9;6504:18;6496:26;;6532:71;6600:1;6589:9;6585:17;6576:6;6532:71;:::i;:::-;6388:222;;;;:::o;6616:86::-;6651:7;6691:4;6684:5;6680:16;6669:27;;6616:86;;;:::o;6708:112::-;6791:22;6807:5;6791:22;:::i;:::-;6786:3;6779:35;6708:112;;:::o;6826:214::-;6915:4;6953:2;6942:9;6938:18;6930:26;;6966:67;7030:1;7019:9;7015:17;7006:6;6966:67;:::i;:::-;6826:214;;;;:::o;7046:329::-;7105:6;7154:2;7142:9;7133:7;7129:23;7125:32;7122:119;;;7160:79;;:::i;:::-;7122:119;7280:1;7305:53;7350:7;7341:6;7330:9;7326:22;7305:53;:::i;:::-;7295:63;;7251:117;7046:329;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:323::-;8172:6;8221:2;8209:9;8200:7;8196:23;8192:32;8189:119;;;8227:79;;:::i;:::-;8189:119;8347:1;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8318:114;8116:323;;;;:::o;8445:118::-;8516:22;8532:5;8516:22;:::i;:::-;8509:5;8506:33;8496:61;;8553:1;8550;8543:12;8496:61;8445:118;:::o;8569:135::-;8613:5;8651:6;8638:20;8629:29;;8667:31;8692:5;8667:31;:::i;:::-;8569:135;;;;:::o;8710:77::-;8747:7;8776:5;8765:16;;8710:77;;;:::o;8793:122::-;8866:24;8884:5;8866:24;:::i;:::-;8859:5;8856:35;8846:63;;8905:1;8902;8895:12;8846:63;8793:122;:::o;8921:139::-;8967:5;9005:6;8992:20;8983:29;;9021:33;9048:5;9021:33;:::i;:::-;8921:139;;;;:::o;9066:615::-;9141:6;9149;9157;9206:2;9194:9;9185:7;9181:23;9177:32;9174:119;;;9212:79;;:::i;:::-;9174:119;9332:1;9357:51;9400:7;9391:6;9380:9;9376:22;9357:51;:::i;:::-;9347:61;;9303:115;9457:2;9483:53;9528:7;9519:6;9508:9;9504:22;9483:53;:::i;:::-;9473:63;;9428:118;9585:2;9611:53;9656:7;9647:6;9636:9;9632:22;9611:53;:::i;:::-;9601:63;;9556:118;9066:615;;;;;:::o;9687:474::-;9755:6;9763;9812:2;9800:9;9791:7;9787:23;9783:32;9780:119;;;9818:79;;:::i;:::-;9780:119;9938:1;9963:53;10008:7;9999:6;9988:9;9984:22;9963:53;:::i;:::-;9953:63;;9909:117;10065:2;10091:53;10136:7;10127:6;10116:9;10112:22;10091:53;:::i;:::-;10081:63;;10036:118;9687:474;;;;;:::o;10167:182::-;10307:34;10303:1;10295:6;10291:14;10284:58;10167:182;:::o;10355:366::-;10497:3;10518:67;10582:2;10577:3;10518:67;:::i;:::-;10511:74;;10594:93;10683:3;10594:93;:::i;:::-;10712:2;10707:3;10703:12;10696:19;;10355:366;;;:::o;10727:419::-;10893:4;10931:2;10920:9;10916:18;10908:26;;10980:9;10974:4;10970:20;10966:1;10955:9;10951:17;10944:47;11008:131;11134:4;11008:131;:::i;:::-;11000:139;;10727:419;;;:::o;11152:180::-;11200:77;11197:1;11190:88;11297:4;11294:1;11287:15;11321:4;11318:1;11311:15;11338:305;11378:3;11397:20;11415:1;11397:20;:::i;:::-;11392:25;;11431:20;11449:1;11431:20;:::i;:::-;11426:25;;11585:1;11517:66;11513:74;11510:1;11507:81;11504:107;;;11591:18;;:::i;:::-;11504:107;11635:1;11632;11628:9;11621:16;;11338:305;;;;:::o;11649:179::-;11789:31;11785:1;11777:6;11773:14;11766:55;11649:179;:::o;11834:366::-;11976:3;11997:67;12061:2;12056:3;11997:67;:::i;:::-;11990:74;;12073:93;12162:3;12073:93;:::i;:::-;12191:2;12186:3;12182:12;12175:19;;11834:366;;;:::o;12206:419::-;12372:4;12410:2;12399:9;12395:18;12387:26;;12459:9;12453:4;12449:20;12445:1;12434:9;12430:17;12423:47;12487:131;12613:4;12487:131;:::i;:::-;12479:139;;12206:419;;;:::o;12631:180::-;12679:77;12676:1;12669:88;12776:4;12773:1;12766:15;12800:4;12797:1;12790:15;12817:320;12861:6;12898:1;12892:4;12888:12;12878:22;;12945:1;12939:4;12935:12;12966:18;12956:81;;13022:4;13014:6;13010:17;13000:27;;12956:81;13084:2;13076:6;13073:14;13053:18;13050:38;13047:84;;;13103:18;;:::i;:::-;13047:84;12868:269;12817:320;;;:::o;13143:348::-;13183:7;13206:20;13224:1;13206:20;:::i;:::-;13201:25;;13240:20;13258:1;13240:20;:::i;:::-;13235:25;;13428:1;13360:66;13356:74;13353:1;13350:81;13345:1;13338:9;13331:17;13327:105;13324:131;;;13435:18;;:::i;:::-;13324:131;13483:1;13480;13476:9;13465:20;;13143:348;;;;:::o;13497:180::-;13545:77;13542:1;13535:88;13642:4;13639:1;13632:15;13666:4;13663:1;13656:15;13683:185;13723:1;13740:20;13758:1;13740:20;:::i;:::-;13735:25;;13774:20;13792:1;13774:20;:::i;:::-;13769:25;;13813:1;13803:35;;13818:18;;:::i;:::-;13803:35;13860:1;13857;13853:9;13848:14;;13683:185;;;;:::o;13874:228::-;14014:34;14010:1;14002:6;13998:14;13991:58;14083:11;14078:2;14070:6;14066:15;14059:36;13874:228;:::o;14108:366::-;14250:3;14271:67;14335:2;14330:3;14271:67;:::i;:::-;14264:74;;14347:93;14436:3;14347:93;:::i;:::-;14465:2;14460:3;14456:12;14449:19;;14108:366;;;:::o;14480:419::-;14646:4;14684:2;14673:9;14669:18;14661:26;;14733:9;14727:4;14723:20;14719:1;14708:9;14704:17;14697:47;14761:131;14887:4;14761:131;:::i;:::-;14753:139;;14480:419;;;:::o;14905:227::-;15045:34;15041:1;15033:6;15029:14;15022:58;15114:10;15109:2;15101:6;15097:15;15090:35;14905:227;:::o;15138:366::-;15280:3;15301:67;15365:2;15360:3;15301:67;:::i;:::-;15294:74;;15377:93;15466:3;15377:93;:::i;:::-;15495:2;15490:3;15486:12;15479:19;;15138:366;;;:::o;15510:419::-;15676:4;15714:2;15703:9;15699:18;15691:26;;15763:9;15757:4;15753:20;15749:1;15738:9;15734:17;15727:47;15791:131;15917:4;15791:131;:::i;:::-;15783:139;;15510:419;;;:::o;15935:244::-;16075:34;16071:1;16063:6;16059:14;16052:58;16144:27;16139:2;16131:6;16127:15;16120:52;15935:244;:::o;16185:366::-;16327:3;16348:67;16412:2;16407:3;16348:67;:::i;:::-;16341:74;;16424:93;16513:3;16424:93;:::i;:::-;16542:2;16537:3;16533:12;16526:19;;16185:366;;;:::o;16557:419::-;16723:4;16761:2;16750:9;16746:18;16738:26;;16810:9;16804:4;16800:20;16796:1;16785:9;16781:17;16774:47;16838:131;16964:4;16838:131;:::i;:::-;16830:139;;16557:419;;;:::o;16982:224::-;17122:34;17118:1;17110:6;17106:14;17099:58;17191:7;17186:2;17178:6;17174:15;17167:32;16982:224;:::o;17212:366::-;17354:3;17375:67;17439:2;17434:3;17375:67;:::i;:::-;17368:74;;17451:93;17540:3;17451:93;:::i;:::-;17569:2;17564:3;17560:12;17553:19;;17212:366;;;:::o;17584:419::-;17750:4;17788:2;17777:9;17773:18;17765:26;;17837:9;17831:4;17827:20;17823:1;17812:9;17808:17;17801:47;17865:131;17991:4;17865:131;:::i;:::-;17857:139;;17584:419;;;:::o;18009:118::-;18096:24;18114:5;18096:24;:::i;:::-;18091:3;18084:37;18009:118;;:::o;18133:664::-;18338:4;18376:3;18365:9;18361:19;18353:27;;18390:71;18458:1;18447:9;18443:17;18434:6;18390:71;:::i;:::-;18471:72;18539:2;18528:9;18524:18;18515:6;18471:72;:::i;:::-;18553;18621:2;18610:9;18606:18;18597:6;18553:72;:::i;:::-;18635;18703:2;18692:9;18688:18;18679:6;18635:72;:::i;:::-;18717:73;18785:3;18774:9;18770:19;18761:6;18717:73;:::i;:::-;18133:664;;;;;;;;:::o;18803:442::-;18952:4;18990:2;18979:9;18975:18;18967:26;;19003:71;19071:1;19060:9;19056:17;19047:6;19003:71;:::i;:::-;19084:72;19152:2;19141:9;19137:18;19128:6;19084:72;:::i;:::-;19166;19234:2;19223:9;19219:18;19210:6;19166:72;:::i;:::-;18803:442;;;;;;:::o;19251:148::-;19353:11;19390:3;19375:18;;19251:148;;;;:::o;19405:214::-;19545:66;19541:1;19533:6;19529:14;19522:90;19405:214;:::o;19625:400::-;19785:3;19806:84;19888:1;19883:3;19806:84;:::i;:::-;19799:91;;19899:93;19988:3;19899:93;:::i;:::-;20017:1;20012:3;20008:11;20001:18;;19625:400;;;:::o;20031:79::-;20070:7;20099:5;20088:16;;20031:79;;;:::o;20116:157::-;20221:45;20241:24;20259:5;20241:24;:::i;:::-;20221:45;:::i;:::-;20216:3;20209:58;20116:157;;:::o;20279:663::-;20520:3;20542:148;20686:3;20542:148;:::i;:::-;20535:155;;20700:75;20771:3;20762:6;20700:75;:::i;:::-;20800:2;20795:3;20791:12;20784:19;;20813:75;20884:3;20875:6;20813:75;:::i;:::-;20913:2;20908:3;20904:12;20897:19;;20933:3;20926:10;;20279:663;;;;;:::o;20948:545::-;21121:4;21159:3;21148:9;21144:19;21136:27;;21173:71;21241:1;21230:9;21226:17;21217:6;21173:71;:::i;:::-;21254:68;21318:2;21307:9;21303:18;21294:6;21254:68;:::i;:::-;21332:72;21400:2;21389:9;21385:18;21376:6;21332:72;:::i;:::-;21414;21482:2;21471:9;21467:18;21458:6;21414:72;:::i;:::-;20948:545;;;;;;;:::o;21499:167::-;21639:19;21635:1;21627:6;21623:14;21616:43;21499:167;:::o;21672:366::-;21814:3;21835:67;21899:2;21894:3;21835:67;:::i;:::-;21828:74;;21911:93;22000:3;21911:93;:::i;:::-;22029:2;22024:3;22020:12;22013:19;;21672:366;;;:::o;22044:419::-;22210:4;22248:2;22237:9;22233:18;22225:26;;22297:9;22291:4;22287:20;22283:1;22272:9;22268:17;22261:47;22325:131;22451:4;22325:131;:::i;:::-;22317:139;;22044:419;;;:::o;22469:170::-;22609:22;22605:1;22597:6;22593:14;22586:46;22469:170;:::o;22645:366::-;22787:3;22808:67;22872:2;22867:3;22808:67;:::i;:::-;22801:74;;22884:93;22973:3;22884:93;:::i;:::-;23002:2;22997:3;22993:12;22986:19;;22645:366;;;:::o;23017:419::-;23183:4;23221:2;23210:9;23206:18;23198:26;;23270:9;23264:4;23260:20;23256:1;23245:9;23241:17;23234:47;23298:131;23424:4;23298:131;:::i;:::-;23290:139;;23017:419;;;:::o;23442:223::-;23582:34;23578:1;23570:6;23566:14;23559:58;23651:6;23646:2;23638:6;23634:15;23627:31;23442:223;:::o;23671:366::-;23813:3;23834:67;23898:2;23893:3;23834:67;:::i;:::-;23827:74;;23910:93;23999:3;23910:93;:::i;:::-;24028:2;24023:3;24019:12;24012:19;;23671:366;;;:::o;24043:419::-;24209:4;24247:2;24236:9;24232:18;24224:26;;24296:9;24290:4;24286:20;24282:1;24271:9;24267:17;24260:47;24324:131;24450:4;24324:131;:::i;:::-;24316:139;;24043:419;;;:::o;24468:240::-;24608:34;24604:1;24596:6;24592:14;24585:58;24677:23;24672:2;24664:6;24660:15;24653:48;24468:240;:::o;24714:366::-;24856:3;24877:67;24941:2;24936:3;24877:67;:::i;:::-;24870:74;;24953:93;25042:3;24953:93;:::i;:::-;25071:2;25066:3;25062:12;25055:19;;24714:366;;;:::o;25086:419::-;25252:4;25290:2;25279:9;25275:18;25267:26;;25339:9;25333:4;25329:20;25325:1;25314:9;25310:17;25303:47;25367:131;25493:4;25367:131;:::i;:::-;25359:139;;25086:419;;;:::o;25511:239::-;25651:34;25647:1;25639:6;25635:14;25628:58;25720:22;25715:2;25707:6;25703:15;25696:47;25511:239;:::o;25756:366::-;25898:3;25919:67;25983:2;25978:3;25919:67;:::i;:::-;25912:74;;25995:93;26084:3;25995:93;:::i;:::-;26113:2;26108:3;26104:12;26097:19;;25756:366;;;:::o;26128:419::-;26294:4;26332:2;26321:9;26317:18;26309:26;;26381:9;26375:4;26371:20;26367:1;26356:9;26352:17;26345:47;26409:131;26535:4;26409:131;:::i;:::-;26401:139;;26128:419;;;:::o;26553:225::-;26693:34;26689:1;26681:6;26677:14;26670:58;26762:8;26757:2;26749:6;26745:15;26738:33;26553:225;:::o;26784:366::-;26926:3;26947:67;27011:2;27006:3;26947:67;:::i;:::-;26940:74;;27023:93;27112:3;27023:93;:::i;:::-;27141:2;27136:3;27132:12;27125:19;;26784:366;;;:::o;27156:419::-;27322:4;27360:2;27349:9;27345:18;27337:26;;27409:9;27403:4;27399:20;27395:1;27384:9;27380:17;27373:47;27437:131;27563:4;27437:131;:::i;:::-;27429:139;;27156:419;;;:::o;27581:223::-;27721:34;27717:1;27709:6;27705:14;27698:58;27790:6;27785:2;27777:6;27773:15;27766:31;27581:223;:::o;27810:366::-;27952:3;27973:67;28037:2;28032:3;27973:67;:::i;:::-;27966:74;;28049:93;28138:3;28049:93;:::i;:::-;28167:2;28162:3;28158:12;28151:19;;27810:366;;;:::o;28182:419::-;28348:4;28386:2;28375:9;28371:18;28363:26;;28435:9;28429:4;28425:20;28421:1;28410:9;28406:17;28399:47;28463:131;28589:4;28463:131;:::i;:::-;28455:139;;28182:419;;;:::o;28607:221::-;28747:34;28743:1;28735:6;28731:14;28724:58;28816:4;28811:2;28803:6;28799:15;28792:29;28607:221;:::o;28834:366::-;28976:3;28997:67;29061:2;29056:3;28997:67;:::i;:::-;28990:74;;29073:93;29162:3;29073:93;:::i;:::-;29191:2;29186:3;29182:12;29175:19;;28834:366;;;:::o;29206:419::-;29372:4;29410:2;29399:9;29395:18;29387:26;;29459:9;29453:4;29449:20;29445:1;29434:9;29430:17;29423:47;29487:131;29613:4;29487:131;:::i;:::-;29479:139;;29206:419;;;:::o;29631:224::-;29771:34;29767:1;29759:6;29755:14;29748:58;29840:7;29835:2;29827:6;29823:15;29816:32;29631:224;:::o;29861:366::-;30003:3;30024:67;30088:2;30083:3;30024:67;:::i;:::-;30017:74;;30100:93;30189:3;30100:93;:::i;:::-;30218:2;30213:3;30209:12;30202:19;;29861:366;;;:::o;30233:419::-;30399:4;30437:2;30426:9;30422:18;30414:26;;30486:9;30480:4;30476:20;30472:1;30461:9;30457:17;30450:47;30514:131;30640:4;30514:131;:::i;:::-;30506:139;;30233:419;;;:::o;30658:222::-;30798:34;30794:1;30786:6;30782:14;30775:58;30867:5;30862:2;30854:6;30850:15;30843:30;30658:222;:::o;30886:366::-;31028:3;31049:67;31113:2;31108:3;31049:67;:::i;:::-;31042:74;;31125:93;31214:3;31125:93;:::i;:::-;31243:2;31238:3;31234:12;31227:19;;30886:366;;;:::o;31258:419::-;31424:4;31462:2;31451:9;31447:18;31439:26;;31511:9;31505:4;31501:20;31497:1;31486:9;31482:17;31475:47;31539:131;31665:4;31539:131;:::i;:::-;31531:139;;31258:419;;;:::o;31683:167::-;31823:19;31819:1;31811:6;31807:14;31800:43;31683:167;:::o;31856:366::-;31998:3;32019:67;32083:2;32078:3;32019:67;:::i;:::-;32012:74;;32095:93;32184:3;32095:93;:::i;:::-;32213:2;32208:3;32204:12;32197:19;;31856:366;;;:::o;32228:419::-;32394:4;32432:2;32421:9;32417:18;32409:26;;32481:9;32475:4;32471:20;32467:1;32456:9;32452:17;32445:47;32509:131;32635:4;32509:131;:::i;:::-;32501:139;;32228:419;;;:::o;32653:165::-;32793:17;32789:1;32781:6;32777:14;32770:41;32653:165;:::o;32824:366::-;32966:3;32987:67;33051:2;33046:3;32987:67;:::i;:::-;32980:74;;33063:93;33152:3;33063:93;:::i;:::-;33181:2;33176:3;33172:12;33165:19;;32824:366;;;:::o;33196:419::-;33362:4;33400:2;33389:9;33385:18;33377:26;;33449:9;33443:4;33439:20;33435:1;33424:9;33420:17;33413:47;33477:131;33603:4;33477:131;:::i;:::-;33469:139;;33196:419;;;:::o;33621:172::-;33761:24;33757:1;33749:6;33745:14;33738:48;33621:172;:::o;33799:366::-;33941:3;33962:67;34026:2;34021:3;33962:67;:::i;:::-;33955:74;;34038:93;34127:3;34038:93;:::i;:::-;34156:2;34151:3;34147:12;34140:19;;33799:366;;;:::o;34171:419::-;34337:4;34375:2;34364:9;34360:18;34352:26;;34424:9;34418:4;34414:20;34410:1;34399:9;34395:17;34388:47;34452:131;34578:4;34452:131;:::i;:::-;34444:139;;34171:419;;;:::o;34596:234::-;34736:34;34732:1;34724:6;34720:14;34713:58;34805:17;34800:2;34792:6;34788:15;34781:42;34596:234;:::o;34836:366::-;34978:3;34999:67;35063:2;35058:3;34999:67;:::i;:::-;34992:74;;35075:93;35164:3;35075:93;:::i;:::-;35193:2;35188:3;35184:12;35177:19;;34836:366;;;:::o;35208:419::-;35374:4;35412:2;35401:9;35397:18;35389:26;;35461:9;35455:4;35451:20;35447:1;35436:9;35432:17;35425:47;35489:131;35615:4;35489:131;:::i;:::-;35481:139;;35208:419;;;:::o;35633:169::-;35773:21;35769:1;35761:6;35757:14;35750:45;35633:169;:::o;35808:366::-;35950:3;35971:67;36035:2;36030:3;35971:67;:::i;:::-;35964:74;;36047:93;36136:3;36047:93;:::i;:::-;36165:2;36160:3;36156:12;36149:19;;35808:366;;;:::o;36180:419::-;36346:4;36384:2;36373:9;36369:18;36361:26;;36433:9;36427:4;36423:20;36419:1;36408:9;36404:17;36397:47;36461:131;36587:4;36461:131;:::i;:::-;36453:139;;36180:419;;;:::o;36605:235::-;36745:34;36741:1;36733:6;36729:14;36722:58;36814:18;36809:2;36801:6;36797:15;36790:43;36605:235;:::o;36846:366::-;36988:3;37009:67;37073:2;37068:3;37009:67;:::i;:::-;37002:74;;37085:93;37174:3;37085:93;:::i;:::-;37203:2;37198:3;37194:12;37187:19;;36846:366;;;:::o;37218:419::-;37384:4;37422:2;37411:9;37407:18;37399:26;;37471:9;37465:4;37461:20;37457:1;37446:9;37442:17;37435:47;37499:131;37625:4;37499:131;:::i;:::-;37491:139;;37218:419;;;:::o;37643:137::-;37697:5;37728:6;37722:13;37713:22;;37744:30;37768:5;37744:30;:::i;:::-;37643:137;;;;:::o;37786:345::-;37853:6;37902:2;37890:9;37881:7;37877:23;37873:32;37870:119;;;37908:79;;:::i;:::-;37870:119;38028:1;38053:61;38106:7;38097:6;38086:9;38082:22;38053:61;:::i;:::-;38043:71;;37999:125;37786:345;;;;:::o;38137:775::-;38370:4;38408:3;38397:9;38393:19;38385:27;;38422:71;38490:1;38479:9;38475:17;38466:6;38422:71;:::i;:::-;38503:72;38571:2;38560:9;38556:18;38547:6;38503:72;:::i;:::-;38585;38653:2;38642:9;38638:18;38629:6;38585:72;:::i;:::-;38667;38735:2;38724:9;38720:18;38711:6;38667:72;:::i;:::-;38749:73;38817:3;38806:9;38802:19;38793:6;38749:73;:::i;:::-;38832;38900:3;38889:9;38885:19;38876:6;38832:73;:::i;:::-;38137:775;;;;;;;;;:::o;38918:170::-;39058:22;39054:1;39046:6;39042:14;39035:46;38918:170;:::o;39094:366::-;39236:3;39257:67;39321:2;39316:3;39257:67;:::i;:::-;39250:74;;39333:93;39422:3;39333:93;:::i;:::-;39451:2;39446:3;39442:12;39435:19;;39094:366;;;:::o;39466:419::-;39632:4;39670:2;39659:9;39655:18;39647:26;;39719:9;39713:4;39709:20;39705:1;39694:9;39690:17;39683:47;39747:131;39873:4;39747:131;:::i;:::-;39739:139;;39466:419;;;:::o;39891:191::-;39931:4;39951:20;39969:1;39951:20;:::i;:::-;39946:25;;39985:20;40003:1;39985:20;:::i;:::-;39980:25;;40024:1;40021;40018:8;40015:34;;;40029:18;;:::i;:::-;40015:34;40074:1;40071;40067:9;40059:17;;39891:191;;;;:::o;40088:225::-;40228:34;40224:1;40216:6;40212:14;40205:58;40297:8;40292:2;40284:6;40280:15;40273:33;40088:225;:::o;40319:366::-;40461:3;40482:67;40546:2;40541:3;40482:67;:::i;:::-;40475:74;;40558:93;40647:3;40558:93;:::i;:::-;40676:2;40671:3;40667:12;40660:19;;40319:366;;;:::o;40691:419::-;40857:4;40895:2;40884:9;40880:18;40872:26;;40944:9;40938:4;40934:20;40930:1;40919:9;40915:17;40908:47;40972:131;41098:4;40972:131;:::i;:::-;40964:139;;40691:419;;;:::o;41116:147::-;41217:11;41254:3;41239:18;;41116:147;;;;:::o;41269:114::-;;:::o;41389:398::-;41548:3;41569:83;41650:1;41645:3;41569:83;:::i;:::-;41562:90;;41661:93;41750:3;41661:93;:::i;:::-;41779:1;41774:3;41770:11;41763:18;;41389:398;;;:::o;41793:379::-;41977:3;41999:147;42142:3;41999:147;:::i;:::-;41992:154;;42163:3;42156:10;;41793:379;;;:::o;42178:180::-;42226:77;42223:1;42216:88;42323:4;42320:1;42313:15;42347:4;42344:1;42337:15;42364:180;42412:77;42409:1;42402:88;42509:4;42506:1;42499:15;42533:4;42530:1;42523:15;42550:143;42607:5;42638:6;42632:13;42623:22;;42654:33;42681:5;42654:33;:::i;:::-;42550:143;;;;:::o;42699:351::-;42769:6;42818:2;42806:9;42797:7;42793:23;42789:32;42786:119;;;42824:79;;:::i;:::-;42786:119;42944:1;42969:64;43025:7;43016:6;43005:9;43001:22;42969:64;:::i;:::-;42959:74;;42915:128;42699:351;;;;:::o;43056:85::-;43101:7;43130:5;43119:16;;43056:85;;;:::o;43147:158::-;43205:9;43238:61;43256:42;43265:32;43291:5;43265:32;:::i;:::-;43256:42;:::i;:::-;43238:61;:::i;:::-;43225:74;;43147:158;;;:::o;43311:147::-;43406:45;43445:5;43406:45;:::i;:::-;43401:3;43394:58;43311:147;;:::o;43464:114::-;43531:6;43565:5;43559:12;43549:22;;43464:114;;;:::o;43584:184::-;43683:11;43717:6;43712:3;43705:19;43757:4;43752:3;43748:14;43733:29;;43584:184;;;;:::o;43774:132::-;43841:4;43864:3;43856:11;;43894:4;43889:3;43885:14;43877:22;;43774:132;;;:::o;43912:108::-;43989:24;44007:5;43989:24;:::i;:::-;43984:3;43977:37;43912:108;;:::o;44026:179::-;44095:10;44116:46;44158:3;44150:6;44116:46;:::i;:::-;44194:4;44189:3;44185:14;44171:28;;44026:179;;;;:::o;44211:113::-;44281:4;44313;44308:3;44304:14;44296:22;;44211:113;;;:::o;44360:732::-;44479:3;44508:54;44556:5;44508:54;:::i;:::-;44578:86;44657:6;44652:3;44578:86;:::i;:::-;44571:93;;44688:56;44738:5;44688:56;:::i;:::-;44767:7;44798:1;44783:284;44808:6;44805:1;44802:13;44783:284;;;44884:6;44878:13;44911:63;44970:3;44955:13;44911:63;:::i;:::-;44904:70;;44997:60;45050:6;44997:60;:::i;:::-;44987:70;;44843:224;44830:1;44827;44823:9;44818:14;;44783:284;;;44787:14;45083:3;45076:10;;44484:608;;;44360:732;;;;:::o;45098:831::-;45361:4;45399:3;45388:9;45384:19;45376:27;;45413:71;45481:1;45470:9;45466:17;45457:6;45413:71;:::i;:::-;45494:80;45570:2;45559:9;45555:18;45546:6;45494:80;:::i;:::-;45621:9;45615:4;45611:20;45606:2;45595:9;45591:18;45584:48;45649:108;45752:4;45743:6;45649:108;:::i;:::-;45641:116;;45767:72;45835:2;45824:9;45820:18;45811:6;45767:72;:::i;:::-;45849:73;45917:3;45906:9;45902:19;45893:6;45849:73;:::i;:::-;45098:831;;;;;;;;:::o

Swarm Source

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