ETH Price: $3,483.17 (+2.80%)
Gas: 2 Gwei

Token

Bahamas Network (BN)
 

Overview

Max Total Supply

10,000,000 BN

Holders

117

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
degensamuel.eth
Balance
0.000000001 BN

Value
$0.00
0x612C45551195f15Bf05D722b9f137C914b077FC7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Bahamas Network is a new (PoA) blockchain network that aims to address the shortcomings of low-fee chains that have become breeding grounds for scams and malicious activities.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BahamasNetwork

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
https://t.me/bahamasnetwork
https://bahamasnetwork.finance
https://twitter.com/bahamasnetwork
*/
//  SPDX-License-Identifier: MIT

pragma solidity >=0.8.19;

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

}

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    address public marketingWallet;
    address public devWallet;
    address public lpWallet;

    uint256 public maxTransactionAmount;
    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 buyLiquidityFee;
    uint256 public buyDevFee;

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

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    mapping (address => bool) public _unauthorized;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event LimitsRemoved();

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Bahamas Network", "BN") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 2;

        uint256 _sellMarketingFee = 3;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 2;

        uint256 totalSupply = 10000000 * 1e9;

        maxTransactionAmount = (totalSupply * 1) /100;
        maxWallet = (totalSupply * 1)/ 100;
        swapTokensAtAmount = (totalSupply * 2) / 1000; // 0.2% swap wallet

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

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

        marketingWallet = address(0x3AC56F57a3f5B3874C35536eB0C041536883f2be); 
        devWallet = address(0x3AC56F57a3f5B3874C35536eB0C041536883f2be);
        lpWallet = msg.sender;

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

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

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

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

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

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e9,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * 1e9;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 100) / 1e9,
            "Cannot set maxWallet lower than 1%"
        );
        maxWallet = newNum * 1e9;
    }

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

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
         require((_marketingFee + _liquidityFee + _devFee) <= 25 ,"Buy fee cant be sent more than 25%");
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        require((_marketingFee + _liquidityFee + _devFee) <= 25 ,"Sell fee cant be sent more than 25% ");
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

    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 updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        emit lpWalletUpdated(newLPWallet, lpWallet);
        lpWallet = newLPWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = 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(!_unauthorized[from] && !_unauthorized[to]);

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !inSwap &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapBack();
        }

        bool takeFee = !inSwap;

        // 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);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }
    function manageUnauthorizedAddress(address unauth, bool value) public onlyOwner{
        require(unauth != uniswapV2Pair);
        _unauthorized[unauth] = value;
    }

    function manageUnauthorizedAddresses(address[] memory unauths, bool value) public onlyOwner{
        for(uint256 i = 0; i < unauths.length; i++){
            require(unauths[i] != uniswapV2Pair);
            _unauthorized[unauths[i]] = value;
        }
    }

    function manualSwapBack() external onlyOwner {
           swapBack();
    
    }

    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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpWallet,
            block.timestamp
        );
    }

    function swapBack() private swapping{
        uint256 contractBalance = balanceOf(address(this));

        uint256 TotalLiquidityFee = buyLiquidityFee + sellLiquidityFee;
        uint256 TotalDevFee = buyDevFee + sellDevFee;
        uint256 TotalFees = buyTotalFees + sellTotalFees;

        uint256 totalTokensToSwap = swapTokensAtAmount;
        bool success;

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = ((totalTokensToSwap * TotalLiquidityFee) / TotalFees ) / 2;
        uint256 amountToSwapForETH = totalTokensToSwap.sub(liquidityTokens);

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance;

        uint256 ethForDev = ethBalance.mul(TotalDevFee).div(TotalFees);
        uint256 ethForLiquidity = ethBalance.mul(TotalLiquidityFee).div(TotalFees);
        
        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                liquidityTokens
            );
        }

        (success, ) = address(marketingWallet).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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"lpWalletUpdated","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_unauthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"unauth","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"manageUnauthorizedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"unauths","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"manageUnauthorizedAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","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":"_liquidityFee","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"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600f81526020017f426168616d6173204e6574776f726b00000000000000000000000000000000008152506040518060400160405280600281526020017f424e0000000000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000e01565b508060049081620000f2919062000e01565b50505062000115620001096200064860201b60201c565b6200065060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001418160016200071660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e7919062000f52565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000f52565b6040518363ffffffff1660e01b81526004016200029492919062000f95565b6020604051808303816000875af1158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062000f52565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032260a05160016200071660201b60201c565b6200033760a05160016200080060201b60201c565b60006003905060008060029050600060039050600080600290506000662386f26fc10000905060646001826200036e919062000ff1565b6200037a91906200106b565b600981905550606460018262000391919062000ff1565b6200039d91906200106b565b600b819055506103e8600282620003b5919062000ff1565b620003c191906200106b565b600a8190555086600e8190555085600f8190555084601081905550601054600f54600e54620003f19190620010a3565b620003fd9190620010a3565b600d819055508360128190555082601381905550816014819055506014546013546012546200042d9190620010a3565b620004399190620010a3565b601181905550733ac56f57a3f5b3874c35536eb0c041536883f2be600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733ac56f57a3f5b3874c35536eb0c041536883f2be600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200054c6200053e620008a160201b60201c565b6001620008cb60201b60201c565b6200055f306001620008cb60201b60201c565b6200057461dead6001620008cb60201b60201c565b620005a9600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008cb60201b60201c565b620005cb620005bd620008a160201b60201c565b60016200071660201b60201c565b620005de3060016200071660201b60201c565b620005f361dead60016200071660201b60201c565b62000628600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200071660201b60201c565b6200063a338262000a0560201b60201c565b50505050505050506200123b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007266200064860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200074c620008a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200079c906200113f565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008db6200064860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000901620008a160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000951906200113f565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009f991906200117e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a6e90620011eb565b60405180910390fd5b62000a8b6000838362000b7d60201b60201c565b806002600082825462000a9f9190620010a3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000af69190620010a3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b5d91906200121e565b60405180910390a362000b796000838362000b8260201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c0957607f821691505b60208210810362000c1f5762000c1e62000bc1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c4a565b62000c95868362000c4a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ce262000cdc62000cd68462000cad565b62000cb7565b62000cad565b9050919050565b6000819050919050565b62000cfe8362000cc1565b62000d1662000d0d8262000ce9565b84845462000c57565b825550505050565b600090565b62000d2d62000d1e565b62000d3a81848462000cf3565b505050565b5b8181101562000d625762000d5660008262000d23565b60018101905062000d40565b5050565b601f82111562000db15762000d7b8162000c25565b62000d868462000c3a565b8101602085101562000d96578190505b62000dae62000da58562000c3a565b83018262000d3f565b50505b505050565b600082821c905092915050565b600062000dd66000198460080262000db6565b1980831691505092915050565b600062000df1838362000dc3565b9150826002028217905092915050565b62000e0c8262000b87565b67ffffffffffffffff81111562000e285762000e2762000b92565b5b62000e34825462000bf0565b62000e4182828562000d66565b600060209050601f83116001811462000e79576000841562000e64578287015190505b62000e70858262000de3565b86555062000ee0565b601f19841662000e898662000c25565b60005b8281101562000eb35784890151825560018201915060208501945060208101905062000e8c565b8683101562000ed3578489015162000ecf601f89168262000dc3565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f1a8262000eed565b9050919050565b62000f2c8162000f0d565b811462000f3857600080fd5b50565b60008151905062000f4c8162000f21565b92915050565b60006020828403121562000f6b5762000f6a62000ee8565b5b600062000f7b8482850162000f3b565b91505092915050565b62000f8f8162000f0d565b82525050565b600060408201905062000fac600083018562000f84565b62000fbb602083018462000f84565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ffe8262000cad565b91506200100b8362000cad565b92508282026200101b8162000cad565b9150828204841483151762001035576200103462000fc2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010788262000cad565b9150620010858362000cad565b9250826200109857620010976200103c565b5b828204905092915050565b6000620010b08262000cad565b9150620010bd8362000cad565b9250828201905080821115620010d857620010d762000fc2565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001127602083620010de565b91506200113482620010ef565b602082019050919050565b600060208201905081810360008301526200115a8162001118565b9050919050565b60008115159050919050565b620011788162001161565b82525050565b60006020820190506200119560008301846200116d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011d3601f83620010de565b9150620011e0826200119b565b602082019050919050565b600060208201905081810360008301526200120681620011c4565b9050919050565b620012188162000cad565b82525050565b60006020820190506200123560008301846200120d565b92915050565b60805160a05161538a62001299600039600081816112630152818161131601528181611acb01526121b1015260008181610da901528181613a7d01528181613b5e01528181613b8501528181613c210152613c48015261538a6000f3fe6080604052600436106103395760003560e01c80638da5cb5b116101ab578063c0246668116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c2f578063f637434214610c58578063f8b45b0514610c83578063fbc10c5514610cae57610340565b8063dd62ed3e14610b9c578063e2f4560514610bd9578063f11a24d314610c0457610340565b8063c8a11ca8116100d1578063c8a11ca814610ae0578063c8c8ebe414610b09578063d257b34f14610b34578063d85ba06314610b7157610340565b8063c024666814610a65578063c17b5b8c14610a8e578063c18bc19514610ab757610340565b80639c3b4fdc11610164578063a9059cbb1161013e578063a9059cbb14610997578063aacebbe3146109d4578063b62496f5146109fd578063bbc0c74214610a3a57610340565b80639c3b4fdc14610904578063a0d82dc51461092f578063a457c2d71461095a57610340565b80638da5cb5b146108065780638ea5220f14610831578063921369131461085c578063924de9b71461088757806395d89b41146108b05780639a7a23d6146108db57610340565b80634a62bb6511610285578063715018a61161022357806375f0a874116101fd57806375f0a874146107705780637bce5a041461079b5780638095d564146107c65780638a8c523c146107ef57610340565b8063715018a614610705578063751039fc1461071c5780637571336a1461074757610340565b806366eb37851161025f57806366eb37851461065b5780636a486a8e146106725780636ddd17131461069d57806370a08231146106c857610340565b80634a62bb65146105c85780634fbee193146105f35780636303516c1461063057610340565b8063203e727e116102f2578063313ce567116102cc578063313ce5671461050c578063395093511461053757806345a4b8e51461057457806349bd5a5e1461059d57610340565b8063203e727e1461046957806323b872dd146104925780632402ab05146104cf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd146104155780631816467f1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cd7565b6040516103679190613db1565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613e7b565b610d69565b6040516103a49190613ed6565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613ef1565b610d87565b6040516103e19190613ed6565b60405180910390f35b3480156103f657600080fd5b506103ff610da7565b60405161040c9190613f7d565b60405180910390f35b34801561042157600080fd5b5061042a610dcb565b6040516104379190613fa7565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613ef1565b610dd5565b005b34801561047557600080fd5b50610490600480360381019061048b9190613fc2565b610f11565b005b34801561049e57600080fd5b506104b960048036038101906104b49190613fef565b611018565b6040516104c69190613ed6565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613ef1565b611110565b6040516105039190613ed6565b60405180910390f35b34801561051857600080fd5b50610521611130565b60405161052e919061405e565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613e7b565b611139565b60405161056b9190613ed6565b60405180910390f35b34801561058057600080fd5b5061059b600480360381019061059691906140a5565b6111e5565b005b3480156105a957600080fd5b506105b2611314565b6040516105bf91906140f4565b60405180910390f35b3480156105d457600080fd5b506105dd611338565b6040516105ea9190613ed6565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190613ef1565b61134b565b6040516106279190613ed6565b60405180910390f35b34801561063c57600080fd5b506106456113a1565b60405161065291906140f4565b60405180910390f35b34801561066757600080fd5b506106706113c7565b005b34801561067e57600080fd5b5061068761144d565b6040516106949190613fa7565b60405180910390f35b3480156106a957600080fd5b506106b2611453565b6040516106bf9190613ed6565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea9190613ef1565b611466565b6040516106fc9190613fa7565b60405180910390f35b34801561071157600080fd5b5061071a6114ae565b005b34801561072857600080fd5b50610731611536565b60405161073e9190613ed6565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906140a5565b611602565b005b34801561077c57600080fd5b506107856116d9565b60405161079291906140f4565b60405180910390f35b3480156107a757600080fd5b506107b06116ff565b6040516107bd9190613fa7565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e8919061410f565b611705565b005b3480156107fb57600080fd5b50610804611818565b005b34801561081257600080fd5b5061081b6118cc565b60405161082891906140f4565b60405180910390f35b34801561083d57600080fd5b506108466118f6565b60405161085391906140f4565b60405180910390f35b34801561086857600080fd5b5061087161191c565b60405161087e9190613fa7565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190614162565b611922565b005b3480156108bc57600080fd5b506108c56119bb565b6040516108d29190613db1565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd91906140a5565b611a4d565b005b34801561091057600080fd5b50610919611b65565b6040516109269190613fa7565b60405180910390f35b34801561093b57600080fd5b50610944611b6b565b6040516109519190613fa7565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c9190613e7b565b611b71565b60405161098e9190613ed6565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b99190613e7b565b611c5c565b6040516109cb9190613ed6565b60405180910390f35b3480156109e057600080fd5b506109fb60048036038101906109f69190613ef1565b611c7a565b005b348015610a0957600080fd5b50610a246004803603810190610a1f9190613ef1565b611db6565b604051610a319190613ed6565b60405180910390f35b348015610a4657600080fd5b50610a4f611dd6565b604051610a5c9190613ed6565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a8791906140a5565b611de9565b005b348015610a9a57600080fd5b50610ab56004803603810190610ab0919061410f565b611f0e565b005b348015610ac357600080fd5b50610ade6004803603810190610ad99190613fc2565b612021565b005b348015610aec57600080fd5b50610b076004803603810190610b0291906142d7565b612127565b005b348015610b1557600080fd5b50610b1e6122aa565b604051610b2b9190613fa7565b60405180910390f35b348015610b4057600080fd5b50610b5b6004803603810190610b569190613fc2565b6122b0565b604051610b689190613ed6565b60405180910390f35b348015610b7d57600080fd5b50610b86612430565b604051610b939190613fa7565b60405180910390f35b348015610ba857600080fd5b50610bc36004803603810190610bbe9190614333565b612436565b604051610bd09190613fa7565b60405180910390f35b348015610be557600080fd5b50610bee6124bd565b604051610bfb9190613fa7565b60405180910390f35b348015610c1057600080fd5b50610c196124c3565b604051610c269190613fa7565b60405180910390f35b348015610c3b57600080fd5b50610c566004803603810190610c519190613ef1565b6124c9565b005b348015610c6457600080fd5b50610c6d6125c0565b604051610c7a9190613fa7565b60405180910390f35b348015610c8f57600080fd5b50610c986125c6565b604051610ca59190613fa7565b60405180910390f35b348015610cba57600080fd5b50610cd56004803603810190610cd09190613ef1565b6125cc565b005b606060038054610ce6906143a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d12906143a2565b8015610d5f5780601f10610d3457610100808354040283529160200191610d5f565b820191906000526020600020905b815481529060010190602001808311610d4257829003601f168201915b5050505050905090565b6000610d7d610d76612708565b8484612710565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610ddd612708565b73ffffffffffffffffffffffffffffffffffffffff16610dfb6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e489061441f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f19612708565b73ffffffffffffffffffffffffffffffffffffffff16610f376118cc565b73ffffffffffffffffffffffffffffffffffffffff1614610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f849061441f565b60405180910390fd5b633b9aca006103e86005610f9f610dcb565b610fa9919061446e565b610fb391906144df565b610fbd91906144df565b811015610fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff690614582565b60405180910390fd5b633b9aca008161100f919061446e565b60098190555050565b60006110258484846128d9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611070612708565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790614614565b60405180910390fd5b611104856110fc612708565b858403612710565b60019150509392505050565b60186020528060005260406000206000915054906101000a900460ff1681565b60006009905090565b60006111db611146612708565b848460016000611154612708565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d69190614634565b612710565b6001905092915050565b6111ed612708565b73ffffffffffffffffffffffffffffffffffffffff1661120b6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112589061441f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112b957600080fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113cf612708565b73ffffffffffffffffffffffffffffffffffffffff166113ed6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a9061441f565b60405180910390fd5b61144b6132ed565b565b60115481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114b6612708565b73ffffffffffffffffffffffffffffffffffffffff166114d46118cc565b73ffffffffffffffffffffffffffffffffffffffff161461152a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115219061441f565b60405180910390fd5b61153460006135b6565b565b6000611540612708565b73ffffffffffffffffffffffffffffffffffffffff1661155e6118cc565b73ffffffffffffffffffffffffffffffffffffffff16146115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab9061441f565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b61160a612708565b73ffffffffffffffffffffffffffffffffffffffff166116286118cc565b73ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116759061441f565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b61170d612708565b73ffffffffffffffffffffffffffffffffffffffff1661172b6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611781576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117789061441f565b60405180910390fd5b60198183856117909190614634565b61179a9190614634565b11156117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d2906146da565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546118039190614634565b61180d9190614634565b600d81905550505050565b611820612708565b73ffffffffffffffffffffffffffffffffffffffff1661183e6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b9061441f565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b61192a612708565b73ffffffffffffffffffffffffffffffffffffffff166119486118cc565b73ffffffffffffffffffffffffffffffffffffffff161461199e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119959061441f565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546119ca906143a2565b80601f01602080910402602001604051908101604052809291908181526020018280546119f6906143a2565b8015611a435780601f10611a1857610100808354040283529160200191611a43565b820191906000526020600020905b815481529060010190602001808311611a2657829003601f168201915b5050505050905090565b611a55612708565b73ffffffffffffffffffffffffffffffffffffffff16611a736118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac09061441f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e9061476c565b60405180910390fd5b611b61828261367c565b5050565b60105481565b60145481565b60008060016000611b80612708565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c34906147fe565b60405180910390fd5b611c51611c48612708565b85858403612710565b600191505092915050565b6000611c70611c69612708565b84846128d9565b6001905092915050565b611c82612708565b73ffffffffffffffffffffffffffffffffffffffff16611ca06118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced9061441f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611df1612708565b73ffffffffffffffffffffffffffffffffffffffff16611e0f6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c9061441f565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f029190613ed6565b60405180910390a25050565b611f16612708565b73ffffffffffffffffffffffffffffffffffffffff16611f346118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f819061441f565b60405180910390fd5b6019818385611f999190614634565b611fa39190614634565b1115611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb90614890565b60405180910390fd5b82601281905550816013819055508060148190555060145460135460125461200c9190614634565b6120169190614634565b601181905550505050565b612029612708565b73ffffffffffffffffffffffffffffffffffffffff166120476118cc565b73ffffffffffffffffffffffffffffffffffffffff161461209d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120949061441f565b60405180910390fd5b633b9aca00606460016120ae610dcb565b6120b8919061446e565b6120c291906144df565b6120cc91906144df565b81101561210e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210590614922565b60405180910390fd5b633b9aca008161211e919061446e565b600b8190555050565b61212f612708565b73ffffffffffffffffffffffffffffffffffffffff1661214d6118cc565b73ffffffffffffffffffffffffffffffffffffffff16146121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a9061441f565b60405180910390fd5b60005b82518110156122a5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168382815181106121f9576121f8614942565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361222157600080fd5b816018600085848151811061223957612238614942565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061229d90614971565b9150506121a6565b505050565b60095481565b60006122ba612708565b73ffffffffffffffffffffffffffffffffffffffff166122d86118cc565b73ffffffffffffffffffffffffffffffffffffffff161461232e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123259061441f565b60405180910390fd5b633b9aca006127106001612340610dcb565b61234a919061446e565b61235491906144df565b61235e91906144df565b8210156123a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239790614a2b565b60405180910390fd5b633b9aca00606460016123b1610dcb565b6123bb919061446e565b6123c591906144df565b6123cf91906144df565b821115612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240890614abd565b60405180910390fd5b633b9aca0082612421919061446e565b600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600f5481565b6124d1612708565b73ffffffffffffffffffffffffffffffffffffffff166124ef6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c9061441f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90614b4f565b60405180910390fd5b6125bd816135b6565b50565b60135481565b600b5481565b6125d4612708565b73ffffffffffffffffffffffffffffffffffffffff166125f26118cc565b73ffffffffffffffffffffffffffffffffffffffff1614612648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263f9061441f565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361277f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277690614be1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e590614c73565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128cc9190613fa7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293f90614d05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90614d97565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a5b5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a6457600080fd5b60008103612a7d57612a788383600061371d565b6132e8565b600c60009054906101000a900460ff1615612f7857612a9a6118cc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b085750612ad86118cc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b415750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b945750601760009054906101000a900460ff16155b15612f7757600c60019054906101000a900460ff16612c8e57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c4e5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8490614e03565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d315750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dd857600954811115612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7290614e95565b60405180910390fd5b600b54612d8783611466565b82612d929190614634565b1115612dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dca90614f01565b60405180910390fd5b612f76565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7b5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eca57600954811115612ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebc90614f93565b60405180910390fd5b612f75565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f7457600b54612f2783611466565b82612f329190614634565b1115612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a90614f01565b60405180910390fd5b5b5b5b5b5b6000612f8330611466565b90506000600a548210159050808015612fa85750600c60029054906101000a900460ff165b8015612fc15750601760009054906101000a900460ff16155b80156130175750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561306d5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130c35750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130d1576130d06132ed565b5b6000601760009054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131875750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561319157600090505b600081156132d857601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131f457506000601154115b156132285761322160646132136011548861399c90919063ffffffff16565b6139b290919063ffffffff16565b90506132b4565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561328357506000600d54115b156132b3576132b060646132a2600d548861399c90919063ffffffff16565b6139b290919063ffffffff16565b90505b5b60008111156132c9576132c887308361371d565b5b80856132d59190614fb3565b94505b6132e387878761371d565b505050505b505050565b6001601760006101000a81548160ff021916908315150217905550600061331330611466565b90506000601354600f546133279190614634565b9050600060145460105461333b9190614634565b90506000601154600d5461334f9190614634565b90506000600a5490506000808614806133685750600082145b1561337857505050505050613599565b60006002848785613389919061446e565b61339391906144df565b61339d91906144df565b905060006133b482856139c890919063ffffffff16565b90506133bf816139de565b600047905060006133eb876133dd8a8561399c90919063ffffffff16565b6139b290919063ffffffff16565b90506000613414886134068c8661399c90919063ffffffff16565b6139b290919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161345c90615018565b60006040518083038185875af1925050503d8060008114613499576040519150601f19603f3d011682016040523d82523d6000602084013e61349e565b606091505b5050809650506000851180156134b45750600081115b156134ff576134c38582613c1b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482876040516134f69392919061502d565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161354590615018565b60006040518083038185875af1925050503d8060008114613582576040519150601f19603f3d011682016040523d82523d6000602084013e613587565b606091505b50508096505050505050505050505050505b6000601760006101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361378c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378390614d05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036137fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f290614d97565b60405180910390fd5b613806838383613d17565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561388c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613883906150d6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461391f9190614634565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139839190613fa7565b60405180910390a3613996848484613d1c565b50505050565b600081836139aa919061446e565b905092915050565b600081836139c091906144df565b905092915050565b600081836139d69190614fb3565b905092915050565b6000600267ffffffffffffffff8111156139fb576139fa614194565b5b604051908082528060200260200182016040528015613a295781602001602082028036833780820191505090505b5090503081600081518110613a4157613a40614942565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0a919061510b565b81600181518110613b1e57613b1d614942565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b83307f000000000000000000000000000000000000000000000000000000000000000084612710565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613be5959493929190615231565b600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b505050505050565b613c46307f000000000000000000000000000000000000000000000000000000000000000084612710565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613ccd9695949392919061528b565b60606040518083038185885af1158015613ceb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d109190615301565b5050505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d5b578082015181840152602081019050613d40565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d8382613d21565b613d8d8185613d2c565b9350613d9d818560208601613d3d565b613da681613d67565b840191505092915050565b60006020820190508181036000830152613dcb8184613d78565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1282613de7565b9050919050565b613e2281613e07565b8114613e2d57600080fd5b50565b600081359050613e3f81613e19565b92915050565b6000819050919050565b613e5881613e45565b8114613e6357600080fd5b50565b600081359050613e7581613e4f565b92915050565b60008060408385031215613e9257613e91613ddd565b5b6000613ea085828601613e30565b9250506020613eb185828601613e66565b9150509250929050565b60008115159050919050565b613ed081613ebb565b82525050565b6000602082019050613eeb6000830184613ec7565b92915050565b600060208284031215613f0757613f06613ddd565b5b6000613f1584828501613e30565b91505092915050565b6000819050919050565b6000613f43613f3e613f3984613de7565b613f1e565b613de7565b9050919050565b6000613f5582613f28565b9050919050565b6000613f6782613f4a565b9050919050565b613f7781613f5c565b82525050565b6000602082019050613f926000830184613f6e565b92915050565b613fa181613e45565b82525050565b6000602082019050613fbc6000830184613f98565b92915050565b600060208284031215613fd857613fd7613ddd565b5b6000613fe684828501613e66565b91505092915050565b60008060006060848603121561400857614007613ddd565b5b600061401686828701613e30565b935050602061402786828701613e30565b925050604061403886828701613e66565b9150509250925092565b600060ff82169050919050565b61405881614042565b82525050565b6000602082019050614073600083018461404f565b92915050565b61408281613ebb565b811461408d57600080fd5b50565b60008135905061409f81614079565b92915050565b600080604083850312156140bc576140bb613ddd565b5b60006140ca85828601613e30565b92505060206140db85828601614090565b9150509250929050565b6140ee81613e07565b82525050565b600060208201905061410960008301846140e5565b92915050565b60008060006060848603121561412857614127613ddd565b5b600061413686828701613e66565b935050602061414786828701613e66565b925050604061415886828701613e66565b9150509250925092565b60006020828403121561417857614177613ddd565b5b600061418684828501614090565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141cc82613d67565b810181811067ffffffffffffffff821117156141eb576141ea614194565b5b80604052505050565b60006141fe613dd3565b905061420a82826141c3565b919050565b600067ffffffffffffffff82111561422a57614229614194565b5b602082029050602081019050919050565b600080fd5b600061425361424e8461420f565b6141f4565b905080838252602082019050602084028301858111156142765761427561423b565b5b835b8181101561429f578061428b8882613e30565b845260208401935050602081019050614278565b5050509392505050565b600082601f8301126142be576142bd61418f565b5b81356142ce848260208601614240565b91505092915050565b600080604083850312156142ee576142ed613ddd565b5b600083013567ffffffffffffffff81111561430c5761430b613de2565b5b614318858286016142a9565b925050602061432985828601614090565b9150509250929050565b6000806040838503121561434a57614349613ddd565b5b600061435885828601613e30565b925050602061436985828601613e30565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143ba57607f821691505b6020821081036143cd576143cc614373565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614409602083613d2c565b9150614414826143d3565b602082019050919050565b60006020820190508181036000830152614438816143fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061447982613e45565b915061448483613e45565b925082820261449281613e45565b915082820484148315176144a9576144a861443f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144ea82613e45565b91506144f583613e45565b925082614505576145046144b0565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061456c602f83613d2c565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006145fe602883613d2c565b9150614609826145a2565b604082019050919050565b6000602082019050818103600083015261462d816145f1565b9050919050565b600061463f82613e45565b915061464a83613e45565b92508282019050808211156146625761466161443f565b5b92915050565b7f427579206665652063616e742062652073656e74206d6f7265207468616e203260008201527f3525000000000000000000000000000000000000000000000000000000000000602082015250565b60006146c4602283613d2c565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614756603983613d2c565b9150614761826146fa565b604082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147e8602583613d2c565b91506147f38261478c565b604082019050919050565b60006020820190508181036000830152614817816147db565b9050919050565b7f53656c6c206665652063616e742062652073656e74206d6f7265207468616e2060008201527f3235252000000000000000000000000000000000000000000000000000000000602082015250565b600061487a602483613d2c565b91506148858261481e565b604082019050919050565b600060208201905081810360008301526148a98161486d565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061490c602283613d2c565b9150614917826148b0565b604082019050919050565b6000602082019050818103600083015261493b816148ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061497c82613e45565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149ae576149ad61443f565b5b600182019050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a15603483613d2c565b9150614a20826149b9565b604082019050919050565b60006020820190508181036000830152614a4481614a08565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614aa7603283613d2c565b9150614ab282614a4b565b604082019050919050565b60006020820190508181036000830152614ad681614a9a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b39602683613d2c565b9150614b4482614add565b604082019050919050565b60006020820190508181036000830152614b6881614b2c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bcb602483613d2c565b9150614bd682614b6f565b604082019050919050565b60006020820190508181036000830152614bfa81614bbe565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c5d602283613d2c565b9150614c6882614c01565b604082019050919050565b60006020820190508181036000830152614c8c81614c50565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cef602583613d2c565b9150614cfa82614c93565b604082019050919050565b60006020820190508181036000830152614d1e81614ce2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d81602383613d2c565b9150614d8c82614d25565b604082019050919050565b60006020820190508181036000830152614db081614d74565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ded601683613d2c565b9150614df882614db7565b602082019050919050565b60006020820190508181036000830152614e1c81614de0565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614e7f603583613d2c565b9150614e8a82614e23565b604082019050919050565b60006020820190508181036000830152614eae81614e72565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614eeb601383613d2c565b9150614ef682614eb5565b602082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f7d603683613d2c565b9150614f8882614f21565b604082019050919050565b60006020820190508181036000830152614fac81614f70565b9050919050565b6000614fbe82613e45565b9150614fc983613e45565b9250828203905081811115614fe157614fe061443f565b5b92915050565b600081905092915050565b50565b6000615002600083614fe7565b915061500d82614ff2565b600082019050919050565b600061502382614ff5565b9150819050919050565b60006060820190506150426000830186613f98565b61504f6020830185613f98565b61505c6040830184613f98565b949350505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150c0602683613d2c565b91506150cb82615064565b604082019050919050565b600060208201905081810360008301526150ef816150b3565b9050919050565b60008151905061510581613e19565b92915050565b60006020828403121561512157615120613ddd565b5b600061512f848285016150f6565b91505092915050565b6000819050919050565b600061515d61515861515384615138565b613f1e565b613e45565b9050919050565b61516d81615142565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151a881613e07565b82525050565b60006151ba838361519f565b60208301905092915050565b6000602082019050919050565b60006151de82615173565b6151e8818561517e565b93506151f38361518f565b8060005b8381101561522457815161520b88826151ae565b9750615216836151c6565b9250506001810190506151f7565b5085935050505092915050565b600060a0820190506152466000830188613f98565b6152536020830187615164565b818103604083015261526581866151d3565b905061527460608301856140e5565b6152816080830184613f98565b9695505050505050565b600060c0820190506152a060008301896140e5565b6152ad6020830188613f98565b6152ba6040830187615164565b6152c76060830186615164565b6152d460808301856140e5565b6152e160a0830184613f98565b979650505050505050565b6000815190506152fb81613e4f565b92915050565b60008060006060848603121561531a57615319613ddd565b5b6000615328868287016152ec565b9350506020615339868287016152ec565b925050604061534a868287016152ec565b915050925092509256fea2646970667358221220da84e851f11f9305e70d182465bfea68cd664c0d50eab5df6610c7427549089f64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638da5cb5b116101ab578063c0246668116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c2f578063f637434214610c58578063f8b45b0514610c83578063fbc10c5514610cae57610340565b8063dd62ed3e14610b9c578063e2f4560514610bd9578063f11a24d314610c0457610340565b8063c8a11ca8116100d1578063c8a11ca814610ae0578063c8c8ebe414610b09578063d257b34f14610b34578063d85ba06314610b7157610340565b8063c024666814610a65578063c17b5b8c14610a8e578063c18bc19514610ab757610340565b80639c3b4fdc11610164578063a9059cbb1161013e578063a9059cbb14610997578063aacebbe3146109d4578063b62496f5146109fd578063bbc0c74214610a3a57610340565b80639c3b4fdc14610904578063a0d82dc51461092f578063a457c2d71461095a57610340565b80638da5cb5b146108065780638ea5220f14610831578063921369131461085c578063924de9b71461088757806395d89b41146108b05780639a7a23d6146108db57610340565b80634a62bb6511610285578063715018a61161022357806375f0a874116101fd57806375f0a874146107705780637bce5a041461079b5780638095d564146107c65780638a8c523c146107ef57610340565b8063715018a614610705578063751039fc1461071c5780637571336a1461074757610340565b806366eb37851161025f57806366eb37851461065b5780636a486a8e146106725780636ddd17131461069d57806370a08231146106c857610340565b80634a62bb65146105c85780634fbee193146105f35780636303516c1461063057610340565b8063203e727e116102f2578063313ce567116102cc578063313ce5671461050c578063395093511461053757806345a4b8e51461057457806349bd5a5e1461059d57610340565b8063203e727e1461046957806323b872dd146104925780632402ab05146104cf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd146104155780631816467f1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cd7565b6040516103679190613db1565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613e7b565b610d69565b6040516103a49190613ed6565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613ef1565b610d87565b6040516103e19190613ed6565b60405180910390f35b3480156103f657600080fd5b506103ff610da7565b60405161040c9190613f7d565b60405180910390f35b34801561042157600080fd5b5061042a610dcb565b6040516104379190613fa7565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613ef1565b610dd5565b005b34801561047557600080fd5b50610490600480360381019061048b9190613fc2565b610f11565b005b34801561049e57600080fd5b506104b960048036038101906104b49190613fef565b611018565b6040516104c69190613ed6565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613ef1565b611110565b6040516105039190613ed6565b60405180910390f35b34801561051857600080fd5b50610521611130565b60405161052e919061405e565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613e7b565b611139565b60405161056b9190613ed6565b60405180910390f35b34801561058057600080fd5b5061059b600480360381019061059691906140a5565b6111e5565b005b3480156105a957600080fd5b506105b2611314565b6040516105bf91906140f4565b60405180910390f35b3480156105d457600080fd5b506105dd611338565b6040516105ea9190613ed6565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190613ef1565b61134b565b6040516106279190613ed6565b60405180910390f35b34801561063c57600080fd5b506106456113a1565b60405161065291906140f4565b60405180910390f35b34801561066757600080fd5b506106706113c7565b005b34801561067e57600080fd5b5061068761144d565b6040516106949190613fa7565b60405180910390f35b3480156106a957600080fd5b506106b2611453565b6040516106bf9190613ed6565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea9190613ef1565b611466565b6040516106fc9190613fa7565b60405180910390f35b34801561071157600080fd5b5061071a6114ae565b005b34801561072857600080fd5b50610731611536565b60405161073e9190613ed6565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906140a5565b611602565b005b34801561077c57600080fd5b506107856116d9565b60405161079291906140f4565b60405180910390f35b3480156107a757600080fd5b506107b06116ff565b6040516107bd9190613fa7565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e8919061410f565b611705565b005b3480156107fb57600080fd5b50610804611818565b005b34801561081257600080fd5b5061081b6118cc565b60405161082891906140f4565b60405180910390f35b34801561083d57600080fd5b506108466118f6565b60405161085391906140f4565b60405180910390f35b34801561086857600080fd5b5061087161191c565b60405161087e9190613fa7565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190614162565b611922565b005b3480156108bc57600080fd5b506108c56119bb565b6040516108d29190613db1565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd91906140a5565b611a4d565b005b34801561091057600080fd5b50610919611b65565b6040516109269190613fa7565b60405180910390f35b34801561093b57600080fd5b50610944611b6b565b6040516109519190613fa7565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c9190613e7b565b611b71565b60405161098e9190613ed6565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b99190613e7b565b611c5c565b6040516109cb9190613ed6565b60405180910390f35b3480156109e057600080fd5b506109fb60048036038101906109f69190613ef1565b611c7a565b005b348015610a0957600080fd5b50610a246004803603810190610a1f9190613ef1565b611db6565b604051610a319190613ed6565b60405180910390f35b348015610a4657600080fd5b50610a4f611dd6565b604051610a5c9190613ed6565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a8791906140a5565b611de9565b005b348015610a9a57600080fd5b50610ab56004803603810190610ab0919061410f565b611f0e565b005b348015610ac357600080fd5b50610ade6004803603810190610ad99190613fc2565b612021565b005b348015610aec57600080fd5b50610b076004803603810190610b0291906142d7565b612127565b005b348015610b1557600080fd5b50610b1e6122aa565b604051610b2b9190613fa7565b60405180910390f35b348015610b4057600080fd5b50610b5b6004803603810190610b569190613fc2565b6122b0565b604051610b689190613ed6565b60405180910390f35b348015610b7d57600080fd5b50610b86612430565b604051610b939190613fa7565b60405180910390f35b348015610ba857600080fd5b50610bc36004803603810190610bbe9190614333565b612436565b604051610bd09190613fa7565b60405180910390f35b348015610be557600080fd5b50610bee6124bd565b604051610bfb9190613fa7565b60405180910390f35b348015610c1057600080fd5b50610c196124c3565b604051610c269190613fa7565b60405180910390f35b348015610c3b57600080fd5b50610c566004803603810190610c519190613ef1565b6124c9565b005b348015610c6457600080fd5b50610c6d6125c0565b604051610c7a9190613fa7565b60405180910390f35b348015610c8f57600080fd5b50610c986125c6565b604051610ca59190613fa7565b60405180910390f35b348015610cba57600080fd5b50610cd56004803603810190610cd09190613ef1565b6125cc565b005b606060038054610ce6906143a2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d12906143a2565b8015610d5f5780601f10610d3457610100808354040283529160200191610d5f565b820191906000526020600020905b815481529060010190602001808311610d4257829003601f168201915b5050505050905090565b6000610d7d610d76612708565b8484612710565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610ddd612708565b73ffffffffffffffffffffffffffffffffffffffff16610dfb6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e489061441f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f19612708565b73ffffffffffffffffffffffffffffffffffffffff16610f376118cc565b73ffffffffffffffffffffffffffffffffffffffff1614610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f849061441f565b60405180910390fd5b633b9aca006103e86005610f9f610dcb565b610fa9919061446e565b610fb391906144df565b610fbd91906144df565b811015610fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff690614582565b60405180910390fd5b633b9aca008161100f919061446e565b60098190555050565b60006110258484846128d9565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611070612708565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790614614565b60405180910390fd5b611104856110fc612708565b858403612710565b60019150509392505050565b60186020528060005260406000206000915054906101000a900460ff1681565b60006009905090565b60006111db611146612708565b848460016000611154612708565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d69190614634565b612710565b6001905092915050565b6111ed612708565b73ffffffffffffffffffffffffffffffffffffffff1661120b6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112589061441f565b60405180910390fd5b7f0000000000000000000000003703f1aa54a00bfb8177d18b1a18aa854112bfcc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112b957600080fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f0000000000000000000000003703f1aa54a00bfb8177d18b1a18aa854112bfcc81565b600c60009054906101000a900460ff1681565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113cf612708565b73ffffffffffffffffffffffffffffffffffffffff166113ed6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a9061441f565b60405180910390fd5b61144b6132ed565b565b60115481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114b6612708565b73ffffffffffffffffffffffffffffffffffffffff166114d46118cc565b73ffffffffffffffffffffffffffffffffffffffff161461152a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115219061441f565b60405180910390fd5b61153460006135b6565b565b6000611540612708565b73ffffffffffffffffffffffffffffffffffffffff1661155e6118cc565b73ffffffffffffffffffffffffffffffffffffffff16146115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab9061441f565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b61160a612708565b73ffffffffffffffffffffffffffffffffffffffff166116286118cc565b73ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116759061441f565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b61170d612708565b73ffffffffffffffffffffffffffffffffffffffff1661172b6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611781576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117789061441f565b60405180910390fd5b60198183856117909190614634565b61179a9190614634565b11156117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d2906146da565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546118039190614634565b61180d9190614634565b600d81905550505050565b611820612708565b73ffffffffffffffffffffffffffffffffffffffff1661183e6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b9061441f565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b61192a612708565b73ffffffffffffffffffffffffffffffffffffffff166119486118cc565b73ffffffffffffffffffffffffffffffffffffffff161461199e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119959061441f565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546119ca906143a2565b80601f01602080910402602001604051908101604052809291908181526020018280546119f6906143a2565b8015611a435780601f10611a1857610100808354040283529160200191611a43565b820191906000526020600020905b815481529060010190602001808311611a2657829003601f168201915b5050505050905090565b611a55612708565b73ffffffffffffffffffffffffffffffffffffffff16611a736118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac09061441f565b60405180910390fd5b7f0000000000000000000000003703f1aa54a00bfb8177d18b1a18aa854112bfcc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e9061476c565b60405180910390fd5b611b61828261367c565b5050565b60105481565b60145481565b60008060016000611b80612708565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c34906147fe565b60405180910390fd5b611c51611c48612708565b85858403612710565b600191505092915050565b6000611c70611c69612708565b84846128d9565b6001905092915050565b611c82612708565b73ffffffffffffffffffffffffffffffffffffffff16611ca06118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced9061441f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611df1612708565b73ffffffffffffffffffffffffffffffffffffffff16611e0f6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c9061441f565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f029190613ed6565b60405180910390a25050565b611f16612708565b73ffffffffffffffffffffffffffffffffffffffff16611f346118cc565b73ffffffffffffffffffffffffffffffffffffffff1614611f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f819061441f565b60405180910390fd5b6019818385611f999190614634565b611fa39190614634565b1115611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb90614890565b60405180910390fd5b82601281905550816013819055508060148190555060145460135460125461200c9190614634565b6120169190614634565b601181905550505050565b612029612708565b73ffffffffffffffffffffffffffffffffffffffff166120476118cc565b73ffffffffffffffffffffffffffffffffffffffff161461209d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120949061441f565b60405180910390fd5b633b9aca00606460016120ae610dcb565b6120b8919061446e565b6120c291906144df565b6120cc91906144df565b81101561210e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210590614922565b60405180910390fd5b633b9aca008161211e919061446e565b600b8190555050565b61212f612708565b73ffffffffffffffffffffffffffffffffffffffff1661214d6118cc565b73ffffffffffffffffffffffffffffffffffffffff16146121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a9061441f565b60405180910390fd5b60005b82518110156122a5577f0000000000000000000000003703f1aa54a00bfb8177d18b1a18aa854112bfcc73ffffffffffffffffffffffffffffffffffffffff168382815181106121f9576121f8614942565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361222157600080fd5b816018600085848151811061223957612238614942565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061229d90614971565b9150506121a6565b505050565b60095481565b60006122ba612708565b73ffffffffffffffffffffffffffffffffffffffff166122d86118cc565b73ffffffffffffffffffffffffffffffffffffffff161461232e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123259061441f565b60405180910390fd5b633b9aca006127106001612340610dcb565b61234a919061446e565b61235491906144df565b61235e91906144df565b8210156123a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239790614a2b565b60405180910390fd5b633b9aca00606460016123b1610dcb565b6123bb919061446e565b6123c591906144df565b6123cf91906144df565b821115612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240890614abd565b60405180910390fd5b633b9aca0082612421919061446e565b600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600f5481565b6124d1612708565b73ffffffffffffffffffffffffffffffffffffffff166124ef6118cc565b73ffffffffffffffffffffffffffffffffffffffff1614612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c9061441f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90614b4f565b60405180910390fd5b6125bd816135b6565b50565b60135481565b600b5481565b6125d4612708565b73ffffffffffffffffffffffffffffffffffffffff166125f26118cc565b73ffffffffffffffffffffffffffffffffffffffff1614612648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263f9061441f565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361277f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277690614be1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e590614c73565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128cc9190613fa7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293f90614d05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ae90614d97565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a5b5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a6457600080fd5b60008103612a7d57612a788383600061371d565b6132e8565b600c60009054906101000a900460ff1615612f7857612a9a6118cc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b085750612ad86118cc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b415750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b7b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b945750601760009054906101000a900460ff16155b15612f7757600c60019054906101000a900460ff16612c8e57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c4e5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8490614e03565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d315750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dd857600954811115612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7290614e95565b60405180910390fd5b600b54612d8783611466565b82612d929190614634565b1115612dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dca90614f01565b60405180910390fd5b612f76565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7b5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eca57600954811115612ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebc90614f93565b60405180910390fd5b612f75565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f7457600b54612f2783611466565b82612f329190614634565b1115612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a90614f01565b60405180910390fd5b5b5b5b5b5b6000612f8330611466565b90506000600a548210159050808015612fa85750600c60029054906101000a900460ff165b8015612fc15750601760009054906101000a900460ff16155b80156130175750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561306d5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130c35750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130d1576130d06132ed565b5b6000601760009054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131875750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561319157600090505b600081156132d857601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131f457506000601154115b156132285761322160646132136011548861399c90919063ffffffff16565b6139b290919063ffffffff16565b90506132b4565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561328357506000600d54115b156132b3576132b060646132a2600d548861399c90919063ffffffff16565b6139b290919063ffffffff16565b90505b5b60008111156132c9576132c887308361371d565b5b80856132d59190614fb3565b94505b6132e387878761371d565b505050505b505050565b6001601760006101000a81548160ff021916908315150217905550600061331330611466565b90506000601354600f546133279190614634565b9050600060145460105461333b9190614634565b90506000601154600d5461334f9190614634565b90506000600a5490506000808614806133685750600082145b1561337857505050505050613599565b60006002848785613389919061446e565b61339391906144df565b61339d91906144df565b905060006133b482856139c890919063ffffffff16565b90506133bf816139de565b600047905060006133eb876133dd8a8561399c90919063ffffffff16565b6139b290919063ffffffff16565b90506000613414886134068c8661399c90919063ffffffff16565b6139b290919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161345c90615018565b60006040518083038185875af1925050503d8060008114613499576040519150601f19603f3d011682016040523d82523d6000602084013e61349e565b606091505b5050809650506000851180156134b45750600081115b156134ff576134c38582613c1b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482876040516134f69392919061502d565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161354590615018565b60006040518083038185875af1925050503d8060008114613582576040519150601f19603f3d011682016040523d82523d6000602084013e613587565b606091505b50508096505050505050505050505050505b6000601760006101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361378c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378390614d05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036137fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f290614d97565b60405180910390fd5b613806838383613d17565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561388c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613883906150d6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461391f9190614634565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139839190613fa7565b60405180910390a3613996848484613d1c565b50505050565b600081836139aa919061446e565b905092915050565b600081836139c091906144df565b905092915050565b600081836139d69190614fb3565b905092915050565b6000600267ffffffffffffffff8111156139fb576139fa614194565b5b604051908082528060200260200182016040528015613a295781602001602082028036833780820191505090505b5090503081600081518110613a4157613a40614942565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0a919061510b565b81600181518110613b1e57613b1d614942565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b83307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612710565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613be5959493929190615231565b600060405180830381600087803b158015613bff57600080fd5b505af1158015613c13573d6000803e3d6000fd5b505050505050565b613c46307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612710565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613ccd9695949392919061528b565b60606040518083038185885af1158015613ceb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d109190615301565b5050505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d5b578082015181840152602081019050613d40565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d8382613d21565b613d8d8185613d2c565b9350613d9d818560208601613d3d565b613da681613d67565b840191505092915050565b60006020820190508181036000830152613dcb8184613d78565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1282613de7565b9050919050565b613e2281613e07565b8114613e2d57600080fd5b50565b600081359050613e3f81613e19565b92915050565b6000819050919050565b613e5881613e45565b8114613e6357600080fd5b50565b600081359050613e7581613e4f565b92915050565b60008060408385031215613e9257613e91613ddd565b5b6000613ea085828601613e30565b9250506020613eb185828601613e66565b9150509250929050565b60008115159050919050565b613ed081613ebb565b82525050565b6000602082019050613eeb6000830184613ec7565b92915050565b600060208284031215613f0757613f06613ddd565b5b6000613f1584828501613e30565b91505092915050565b6000819050919050565b6000613f43613f3e613f3984613de7565b613f1e565b613de7565b9050919050565b6000613f5582613f28565b9050919050565b6000613f6782613f4a565b9050919050565b613f7781613f5c565b82525050565b6000602082019050613f926000830184613f6e565b92915050565b613fa181613e45565b82525050565b6000602082019050613fbc6000830184613f98565b92915050565b600060208284031215613fd857613fd7613ddd565b5b6000613fe684828501613e66565b91505092915050565b60008060006060848603121561400857614007613ddd565b5b600061401686828701613e30565b935050602061402786828701613e30565b925050604061403886828701613e66565b9150509250925092565b600060ff82169050919050565b61405881614042565b82525050565b6000602082019050614073600083018461404f565b92915050565b61408281613ebb565b811461408d57600080fd5b50565b60008135905061409f81614079565b92915050565b600080604083850312156140bc576140bb613ddd565b5b60006140ca85828601613e30565b92505060206140db85828601614090565b9150509250929050565b6140ee81613e07565b82525050565b600060208201905061410960008301846140e5565b92915050565b60008060006060848603121561412857614127613ddd565b5b600061413686828701613e66565b935050602061414786828701613e66565b925050604061415886828701613e66565b9150509250925092565b60006020828403121561417857614177613ddd565b5b600061418684828501614090565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141cc82613d67565b810181811067ffffffffffffffff821117156141eb576141ea614194565b5b80604052505050565b60006141fe613dd3565b905061420a82826141c3565b919050565b600067ffffffffffffffff82111561422a57614229614194565b5b602082029050602081019050919050565b600080fd5b600061425361424e8461420f565b6141f4565b905080838252602082019050602084028301858111156142765761427561423b565b5b835b8181101561429f578061428b8882613e30565b845260208401935050602081019050614278565b5050509392505050565b600082601f8301126142be576142bd61418f565b5b81356142ce848260208601614240565b91505092915050565b600080604083850312156142ee576142ed613ddd565b5b600083013567ffffffffffffffff81111561430c5761430b613de2565b5b614318858286016142a9565b925050602061432985828601614090565b9150509250929050565b6000806040838503121561434a57614349613ddd565b5b600061435885828601613e30565b925050602061436985828601613e30565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143ba57607f821691505b6020821081036143cd576143cc614373565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614409602083613d2c565b9150614414826143d3565b602082019050919050565b60006020820190508181036000830152614438816143fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061447982613e45565b915061448483613e45565b925082820261449281613e45565b915082820484148315176144a9576144a861443f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144ea82613e45565b91506144f583613e45565b925082614505576145046144b0565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061456c602f83613d2c565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006145fe602883613d2c565b9150614609826145a2565b604082019050919050565b6000602082019050818103600083015261462d816145f1565b9050919050565b600061463f82613e45565b915061464a83613e45565b92508282019050808211156146625761466161443f565b5b92915050565b7f427579206665652063616e742062652073656e74206d6f7265207468616e203260008201527f3525000000000000000000000000000000000000000000000000000000000000602082015250565b60006146c4602283613d2c565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614756603983613d2c565b9150614761826146fa565b604082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147e8602583613d2c565b91506147f38261478c565b604082019050919050565b60006020820190508181036000830152614817816147db565b9050919050565b7f53656c6c206665652063616e742062652073656e74206d6f7265207468616e2060008201527f3235252000000000000000000000000000000000000000000000000000000000602082015250565b600061487a602483613d2c565b91506148858261481e565b604082019050919050565b600060208201905081810360008301526148a98161486d565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061490c602283613d2c565b9150614917826148b0565b604082019050919050565b6000602082019050818103600083015261493b816148ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061497c82613e45565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149ae576149ad61443f565b5b600182019050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614a15603483613d2c565b9150614a20826149b9565b604082019050919050565b60006020820190508181036000830152614a4481614a08565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614aa7603283613d2c565b9150614ab282614a4b565b604082019050919050565b60006020820190508181036000830152614ad681614a9a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b39602683613d2c565b9150614b4482614add565b604082019050919050565b60006020820190508181036000830152614b6881614b2c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bcb602483613d2c565b9150614bd682614b6f565b604082019050919050565b60006020820190508181036000830152614bfa81614bbe565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c5d602283613d2c565b9150614c6882614c01565b604082019050919050565b60006020820190508181036000830152614c8c81614c50565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cef602583613d2c565b9150614cfa82614c93565b604082019050919050565b60006020820190508181036000830152614d1e81614ce2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d81602383613d2c565b9150614d8c82614d25565b604082019050919050565b60006020820190508181036000830152614db081614d74565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ded601683613d2c565b9150614df882614db7565b602082019050919050565b60006020820190508181036000830152614e1c81614de0565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614e7f603583613d2c565b9150614e8a82614e23565b604082019050919050565b60006020820190508181036000830152614eae81614e72565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614eeb601383613d2c565b9150614ef682614eb5565b602082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f7d603683613d2c565b9150614f8882614f21565b604082019050919050565b60006020820190508181036000830152614fac81614f70565b9050919050565b6000614fbe82613e45565b9150614fc983613e45565b9250828203905081811115614fe157614fe061443f565b5b92915050565b600081905092915050565b50565b6000615002600083614fe7565b915061500d82614ff2565b600082019050919050565b600061502382614ff5565b9150819050919050565b60006060820190506150426000830186613f98565b61504f6020830185613f98565b61505c6040830184613f98565b949350505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150c0602683613d2c565b91506150cb82615064565b604082019050919050565b600060208201905081810360008301526150ef816150b3565b9050919050565b60008151905061510581613e19565b92915050565b60006020828403121561512157615120613ddd565b5b600061512f848285016150f6565b91505092915050565b6000819050919050565b600061515d61515861515384615138565b613f1e565b613e45565b9050919050565b61516d81615142565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151a881613e07565b82525050565b60006151ba838361519f565b60208301905092915050565b6000602082019050919050565b60006151de82615173565b6151e8818561517e565b93506151f38361518f565b8060005b8381101561522457815161520b88826151ae565b9750615216836151c6565b9250506001810190506151f7565b5085935050505092915050565b600060a0820190506152466000830188613f98565b6152536020830187615164565b818103604083015261526581866151d3565b905061527460608301856140e5565b6152816080830184613f98565b9695505050505050565b600060c0820190506152a060008301896140e5565b6152ad6020830188613f98565b6152ba6040830187615164565b6152c76060830186615164565b6152d460808301856140e5565b6152e160a0830184613f98565b979650505050505050565b6000815190506152fb81613e4f565b92915050565b60008060006060848603121561531a57615319613ddd565b5b6000615328868287016152ec565b9350506020615339868287016152ec565b925050604061534a868287016152ec565b915050925092509256fea2646970667358221220da84e851f11f9305e70d182465bfea68cd664c0d50eab5df6610c7427549089f64736f6c63430008130033

Deployed Bytecode Sourcemap

12286:15244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2652:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3565:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13236:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12370:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2972:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20668:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17737:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3742:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13387:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2872:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4242:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24426:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12428:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12690:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20833:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12543:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24875:83;;;;;;;;;;;;;:::i;:::-;;12951:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12770:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3088:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;774:103;;;;;;;;;;;;;:::i;:::-;;16992:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18269:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12475:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12844;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18640:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16828:112;;;;;;;;;;;;;:::i;:::-;;551:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12512:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12986:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18532:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2760:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19731:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12918:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13062:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4465:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3223:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20239:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13591:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12730:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19541:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19086:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18014:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24604:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12575:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17214:515;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12810:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3406:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12617:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12881:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;885:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13024:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12657:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20478:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2652:100;2706:13;2739:5;2732:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2652:100;:::o;3565:169::-;3648:4;3665:39;3674:12;:10;:12::i;:::-;3688:7;3697:6;3665:8;:39::i;:::-;3722:4;3715:11;;3565:169;;;;:::o;13236:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12370:51::-;;;:::o;2972:108::-;3033:7;3060:12;;3053:19;;2972:108;:::o;20668:157::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20775:9:::1;;;;;;;;;;;20747:38;;20764:9;20747:38;;;;;;;;;;;;20808:9;20796;;:21;;;;;;;;;;;;;;;;;;20668:157:::0;:::o;17737:269::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17874:3:::1;17866:4;17861:1;17845:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17844:26;;;;:::i;:::-;17843:34;;;;:::i;:::-;17833:6;:44;;17811:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;17995:3;17986:6;:12;;;;:::i;:::-;17963:20;:35;;;;17737:269:::0;:::o;3742:492::-;3882:4;3899:36;3909:6;3917:9;3928:6;3899:9;:36::i;:::-;3948:24;3975:11;:19;3987:6;3975:19;;;;;;;;;;;;;;;:33;3995:12;:10;:12::i;:::-;3975:33;;;;;;;;;;;;;;;;3948:60;;4047:6;4027:16;:26;;4019:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4134:57;4143:6;4151:12;:10;:12::i;:::-;4184:6;4165:16;:25;4134:8;:57::i;:::-;4222:4;4215:11;;;3742:492;;;;;:::o;13387:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;2872:92::-;2930:5;2955:1;2948:8;;2872:92;:::o;4242:215::-;4330:4;4347:80;4356:12;:10;:12::i;:::-;4370:7;4416:10;4379:11;:25;4391:12;:10;:12::i;:::-;4379:25;;;;;;;;;;;;;;;:34;4405:7;4379:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4347:8;:80::i;:::-;4445:4;4438:11;;4242:215;;;;:::o;24426:170::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24534:13:::1;24524:23;;:6;:23;;::::0;24516:32:::1;;;::::0;::::1;;24583:5;24559:13;:21;24573:6;24559:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24426:170:::0;;:::o;12428:38::-;;;:::o;12690:33::-;;;;;;;;;;;;;:::o;20833:126::-;20899:4;20923:19;:28;20943:7;20923:28;;;;;;;;;;;;;;;;;;;;;;;;;20916:35;;20833:126;;;:::o;12543:23::-;;;;;;;;;;;;;:::o;24875:83::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24934:10:::1;:8;:10::i;:::-;24875:83::o:0;12951:28::-;;;;:::o;12770:31::-;;;;;;;;;;;;;:::o;3088:127::-;3162:7;3189:9;:18;3199:7;3189:18;;;;;;;;;;;;;;;;3182:25;;3088:127;;;:::o;774:103::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;839:30:::1;866:1;839:18;:30::i;:::-;774:103::o:0;16992:152::-;17044:4;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17078:5:::1;17061:14;;:22;;;;;;;;;;;;;;;;;;17099:15;;;;;;;;;;17132:4;17125:11;;16992:152:::0;:::o;18269:167::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18424:4:::1;18382:31;:39;18414:6;18382:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18269:167:::0;;:::o;12475:30::-;;;;;;;;;;;;;:::o;12844:::-;;;;:::o;18640:438::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18844:2:::1;18832:7;18816:13;18800;:29;;;;:::i;:::-;:39;;;;:::i;:::-;18799:47;;18791:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;18914:13;18896:15;:31;;;;18956:13;18938:15;:31;;;;18992:7;18980:9;:19;;;;19061:9;;19043:15;;19025;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;19010:12;:60;;;;18640:438:::0;;;:::o;16828:112::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16899:4:::1;16883:13;;:20;;;;;;;;;;;;;;;;;;16928:4;16914:11;;:18;;;;;;;;;;;;;;;;;;16828:112::o:0;551:87::-;597:7;624:6;;;;;;;;;;;617:13;;551:87;:::o;12512:24::-;;;;;;;;;;;;;:::o;12986:31::-;;;;:::o;18532:100::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18617:7:::1;18603:11;;:21;;;;;;;;;;;;;;;;;;18532:100:::0;:::o;2760:104::-;2816:13;2849:7;2842:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2760:104;:::o;19731:304::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19875:13:::1;19867:21;;:4;:21;;::::0;19845:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19986:41;20015:4;20021:5;19986:28;:41::i;:::-;19731:304:::0;;:::o;12918:24::-;;;;:::o;13062:25::-;;;;:::o;4465:413::-;4558:4;4575:24;4602:11;:25;4614:12;:10;:12::i;:::-;4602:25;;;;;;;;;;;;;;;:34;4628:7;4602:34;;;;;;;;;;;;;;;;4575:61;;4675:15;4655:16;:35;;4647:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4768:67;4777:12;:10;:12::i;:::-;4791:7;4819:15;4800:16;:34;4768:8;:67::i;:::-;4866:4;4859:11;;;4465:413;;;;:::o;3223:175::-;3309:4;3326:42;3336:12;:10;:12::i;:::-;3350:9;3361:6;3326:9;:42::i;:::-;3386:4;3379:11;;3223:175;;;;:::o;20239:231::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20399:15:::1;;;;;;;;;;;20356:59;;20379:18;20356:59;;;;;;;;;;;;20444:18;20426:15;;:36;;;;;;;;;;;;;;;;;;20239:231:::0;:::o;13591:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;12730:33::-;;;;;;;;;;;;;:::o;19541:182::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19657:8:::1;19626:19;:28;19646:7;19626:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19697:7;19681:34;;;19706:8;19681:34;;;;;;:::i;:::-;;;;;;;;19541:182:::0;;:::o;19086:447::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19290:2:::1;19278:7;19262:13;19246;:29;;;;:::i;:::-;:39;;;;:::i;:::-;19245:47;;19237:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;19363:13;19344:16;:32;;;;19406:13;19387:16;:32;;;;19443:7;19430:10;:20;;;;19515:10;;19496:16;;19477;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;19461:13;:64;;;;19086:447:::0;;;:::o;18014:247::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18153:3:::1;18146;18141:1;18125:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18124:25;;;;:::i;:::-;18123:33;;;;:::i;:::-;18113:6;:43;;18091:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;18250:3;18241:6;:12;;;;:::i;:::-;18229:9;:24;;;;18014:247:::0;:::o;24604:263::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24710:9:::1;24706:154;24729:7;:14;24725:1;:18;24706:154;;;24786:13;24772:27;;:7;24780:1;24772:10;;;;;;;;:::i;:::-;;;;;;;;:27;;::::0;24764:36:::1;;;::::0;::::1;;24843:5;24815:13;:25;24829:7;24837:1;24829:10;;;;;;;;:::i;:::-;;;;;;;;24815:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;24745:3;;;;;:::i;:::-;;;;24706:154;;;;24604:263:::0;;:::o;12575:35::-;;;;:::o;17214:515::-;17322:4;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17412:3:::1;17403:5;17398:1;17382:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17381:27;;;;:::i;:::-;17380:35;;;;:::i;:::-;17367:9;:48;;17345:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;17571:3;17564;17559:1;17543:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17542:25;;;;:::i;:::-;17541:33;;;;:::i;:::-;17528:9;:46;;17506:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;17696:3;17684:9;:15;;;;:::i;:::-;17663:18;:36;;;;17717:4;17710:11;;17214:515:::0;;;:::o;12810:27::-;;;;:::o;3406:151::-;3495:7;3522:11;:18;3534:5;3522:18;;;;;;;;;;;;;;;:27;3541:7;3522:27;;;;;;;;;;;;;;;;3515:34;;3406:151;;;;:::o;12617:33::-;;;;:::o;12881:30::-;;;;:::o;885:201::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;994:1:::1;974:22;;:8;:22;;::::0;966:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1050:28;1069:8;1050:18;:28::i;:::-;885:201:::0;:::o;13024:31::-;;;;:::o;12657:24::-;;;;:::o;20478:182::-;697:12;:10;:12::i;:::-;686:23;;:7;:5;:7::i;:::-;:23;;;678:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20610:8:::1;;;;;;;;;;;20581:38;;20597:11;20581:38;;;;;;;;;;;;20641:11;20630:8;;:22;;;;;;;;;;;;;;;;;;20478:182:::0;:::o;204:98::-;257:7;284:10;277:17;;204:98;:::o;6034:380::-;6187:1;6170:19;;:5;:19;;;6162:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6268:1;6249:21;;:7;:21;;;6241:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6352:6;6322:11;:18;6334:5;6322:18;;;;;;;;;;;;;;;:27;6341:7;6322:27;;;;;;;;;;;;;;;:36;;;;6390:7;6374:32;;6383:5;6374:32;;;6399:6;6374:32;;;;;;:::i;:::-;;;;;;;;6034:380;;;:::o;20967:3453::-;21115:1;21099:18;;:4;:18;;;21091:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21192:1;21178:16;;:2;:16;;;21170:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21254:13;:19;21268:4;21254:19;;;;;;;;;;;;;;;;;;;;;;;;;21253:20;:42;;;;;21278:13;:17;21292:2;21278:17;;;;;;;;;;;;;;;;;;;;;;;;;21277:18;21253:42;21245:51;;;;;;21323:1;21313:6;:11;21309:93;;21341:28;21357:4;21363:2;21367:1;21341:15;:28::i;:::-;21384:7;;21309:93;21418:14;;;;;;;;;;;21414:1692;;;21479:7;:5;:7::i;:::-;21471:15;;:4;:15;;;;:49;;;;;21513:7;:5;:7::i;:::-;21507:13;;:2;:13;;;;21471:49;:86;;;;;21555:1;21541:16;;:2;:16;;;;21471:86;:128;;;;;21592:6;21578:21;;:2;:21;;;;21471:128;:156;;;;;21621:6;;;;;;;;;;;21620:7;21471:156;21449:1646;;;21667:13;;;;;;;;;;;21662:223;;21739:19;:25;21759:4;21739:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21768:19;:23;21788:2;21768:23;;;;;;;;;;;;;;;;;;;;;;;;;21739:52;21705:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;21662:223;21959:25;:31;21985:4;21959:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22016:31;:35;22048:2;22016:35;;;;;;;;;;;;;;;;;;;;;;;;;22015:36;21959:92;21933:1147;;;22138:20;;22128:6;:30;;22094:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;22346:9;;22329:13;22339:2;22329:9;:13::i;:::-;22320:6;:22;;;;:::i;:::-;:35;;22286:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21933:1147;;;22524:25;:29;22550:2;22524:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22579:31;:37;22611:4;22579:37;;;;;;;;;;;;;;;;;;;;;;;;;22578:38;22524:92;22498:582;;;22703:20;;22693:6;:30;;22659:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;22498:582;;;22860:31;:35;22892:2;22860:35;;;;;;;;;;;;;;;;;;;;;;;;;22855:225;;22980:9;;22963:13;22973:2;22963:9;:13::i;:::-;22954:6;:22;;;;:::i;:::-;:35;;22920:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22855:225;22498:582;21933:1147;21449:1646;21414:1692;23118:28;23149:24;23167:4;23149:9;:24::i;:::-;23118:55;;23186:12;23225:18;;23201:20;:42;;23186:57;;23274:7;:35;;;;;23298:11;;;;;;;;;;;23274:35;:59;;;;;23327:6;;;;;;;;;;;23326:7;23274:59;:108;;;;;23351:25;:31;23377:4;23351:31;;;;;;;;;;;;;;;;;;;;;;;;;23350:32;23274:108;:151;;;;;23400:19;:25;23420:4;23400:25;;;;;;;;;;;;;;;;;;;;;;;;;23399:26;23274:151;:192;;;;;23443:19;:23;23463:2;23443:23;;;;;;;;;;;;;;;;;;;;;;;;;23442:24;23274:192;23256:259;;;23493:10;:8;:10::i;:::-;23256:259;23527:12;23543:6;;;;;;;;;;;23542:7;23527:22;;23651:19;:25;23671:4;23651:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23680:19;:23;23700:2;23680:23;;;;;;;;;;;;;;;;;;;;;;;;;23651:52;23647:100;;;23730:5;23720:15;;23647:100;23759:12;23864:7;23860:507;;;23916:25;:29;23942:2;23916:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;23965:1;23949:13;;:17;23916:50;23912:306;;;23994:34;24024:3;23994:25;24005:13;;23994:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;23987:41;;23912:306;;;24090:25;:31;24116:4;24090:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24140:1;24125:12;;:16;24090:51;24086:132;;;24169:33;24198:3;24169:24;24180:12;;24169:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24162:40;;24086:132;23912:306;24245:1;24238:4;:8;24234:91;;;24267:42;24283:4;24297;24304;24267:15;:42::i;:::-;24234:91;24351:4;24341:14;;;;;:::i;:::-;;;23860:507;24379:33;24395:4;24401:2;24405:6;24379:15;:33::i;:::-;21080:3340;;;;20967:3453;;;;:::o;26085:1442::-;13355:4;13346:6;;:13;;;;;;;;;;;;;;;;;;26132:23:::1;26158:24;26176:4;26158:9;:24::i;:::-;26132:50;;26195:25;26241:16;;26223:15;;:34;;;;:::i;:::-;26195:62;;26268:19;26302:10;;26290:9;;:22;;;;:::i;:::-;26268:44;;26323:17;26358:13;;26343:12;;:28;;;;:::i;:::-;26323:48;;26384:25;26412:18;;26384:46;;26441:12;26489:1:::0;26470:15:::1;:20;:46;;;;26515:1;26494:17;:22;26470:46;26466:85;;;26533:7;;;;;;;;26466:85;26612:23;26695:1;26681:9;26660:17;26640;:37;;;;:::i;:::-;26639:51;;;;:::i;:::-;26638:58;;;;:::i;:::-;26612:84;;26707:26;26736:38;26758:15;26736:17;:21;;:38;;;;:::i;:::-;26707:67;;26787:36;26804:18;26787:16;:36::i;:::-;26836:18;26857:21;26836:42;;26891:17;26911:42;26943:9;26911:27;26926:11;26911:10;:14;;:27;;;;:::i;:::-;:31;;:42;;;;:::i;:::-;26891:62;;26964:23;26990:48;27028:9;26990:33;27005:17;26990:10;:14;;:33;;;;:::i;:::-;:37;;:48;;;;:::i;:::-;26964:74;;27081:9;;;;;;;;;;;27073:23;;27104:9;27073:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27059:59;;;;;27153:1;27135:15;:19;:42;;;;;27176:1;27158:15;:19;27135:42;27131:275;;;27194:46;27207:15;27224;27194:12;:46::i;:::-;27260:134;27293:18;27330:15;27364;27260:134;;;;;;;;:::i;:::-;;;;;;;;27131:275;27440:15;;;;;;;;;;;27432:29;;27483:21;27432:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27418:101;;;;;26121:1406;;;;;;;;;;;13361:1;13373:5:::0;13364:6;;:14;;;;;;;;;;;;;;;;;;26085:1442::o;1094:191::-;1168:16;1187:6;;;;;;;;;;;1168:25;;1213:8;1204:6;;:17;;;;;;;;;;;;;;;;;;1268:8;1237:40;;1258:8;1237:40;;;;;;;;;;;;1157:128;1094:191;:::o;20043:188::-;20160:5;20126:25;:31;20152:4;20126:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20217:5;20183:40;;20211:4;20183:40;;;;;;;;;;;;20043:188;;:::o;4886:733::-;5044:1;5026:20;;:6;:20;;;5018:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5128:1;5107:23;;:9;:23;;;5099:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5183:47;5204:6;5212:9;5223:6;5183:20;:47::i;:::-;5243:21;5267:9;:17;5277:6;5267:17;;;;;;;;;;;;;;;;5243:41;;5320:6;5303:13;:23;;5295:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5441:6;5425:13;:22;5405:9;:17;5415:6;5405:17;;;;;;;;;;;;;;;:42;;;;5493:6;5469:9;:20;5479:9;5469:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5534:9;5517:35;;5526:6;5517:35;;;5545:6;5517:35;;;;;;:::i;:::-;;;;;;;;5565:46;5585:6;5593:9;5604:6;5565:19;:46::i;:::-;5007:612;4886:733;;;:::o;6818:98::-;6876:7;6907:1;6903;:5;;;;:::i;:::-;6896:12;;6818:98;;;;:::o;6924:::-;6982:7;7013:1;7009;:5;;;;:::i;:::-;7002:12;;6924:98;;;;:::o;6712:::-;6770:7;6801:1;6797;:5;;;;:::i;:::-;6790:12;;6712:98;;;;:::o;24966:589::-;25092:21;25130:1;25116:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25092:40;;25161:4;25143;25148:1;25143:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25187:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25177:4;25182:1;25177:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25222:62;25239:4;25254:15;25272:11;25222:8;:62::i;:::-;25323:15;:66;;;25404:11;25430:1;25474:4;25501;25521:15;25323:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25021:534;24966:589;:::o;25563:514::-;25711:62;25728:4;25743:15;25761:11;25711:8;:62::i;:::-;25816:15;:31;;;25855:9;25888:4;25908:11;25934:1;25977;26020:8;;;;;;;;;;;26043:15;25816:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25563:514;;:::o;6422:125::-;;;;:::o;6555:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:116::-;6571:21;6586:5;6571:21;:::i;:::-;6564:5;6561:32;6551:60;;6607:1;6604;6597:12;6551:60;6501:116;:::o;6623:133::-;6666:5;6704:6;6691:20;6682:29;;6720:30;6744:5;6720:30;:::i;:::-;6623:133;;;;:::o;6762:468::-;6827:6;6835;6884:2;6872:9;6863:7;6859:23;6855:32;6852:119;;;6890:79;;:::i;:::-;6852:119;7010:1;7035:53;7080:7;7071:6;7060:9;7056:22;7035:53;:::i;:::-;7025:63;;6981:117;7137:2;7163:50;7205:7;7196:6;7185:9;7181:22;7163:50;:::i;:::-;7153:60;;7108:115;6762:468;;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:117::-;8651:1;8648;8641:12;8665:180;8713:77;8710:1;8703:88;8810:4;8807:1;8800:15;8834:4;8831:1;8824:15;8851:281;8934:27;8956:4;8934:27;:::i;:::-;8926:6;8922:40;9064:6;9052:10;9049:22;9028:18;9016:10;9013:34;9010:62;9007:88;;;9075:18;;:::i;:::-;9007:88;9115:10;9111:2;9104:22;8894:238;8851:281;;:::o;9138:129::-;9172:6;9199:20;;:::i;:::-;9189:30;;9228:33;9256:4;9248:6;9228:33;:::i;:::-;9138:129;;;:::o;9273:311::-;9350:4;9440:18;9432:6;9429:30;9426:56;;;9462:18;;:::i;:::-;9426:56;9512:4;9504:6;9500:17;9492:25;;9572:4;9566;9562:15;9554:23;;9273:311;;;:::o;9590:117::-;9699:1;9696;9689:12;9730:710;9826:5;9851:81;9867:64;9924:6;9867:64;:::i;:::-;9851:81;:::i;:::-;9842:90;;9952:5;9981:6;9974:5;9967:21;10015:4;10008:5;10004:16;9997:23;;10068:4;10060:6;10056:17;10048:6;10044:30;10097:3;10089:6;10086:15;10083:122;;;10116:79;;:::i;:::-;10083:122;10231:6;10214:220;10248:6;10243:3;10240:15;10214:220;;;10323:3;10352:37;10385:3;10373:10;10352:37;:::i;:::-;10347:3;10340:50;10419:4;10414:3;10410:14;10403:21;;10290:144;10274:4;10269:3;10265:14;10258:21;;10214:220;;;10218:21;9832:608;;9730:710;;;;;:::o;10463:370::-;10534:5;10583:3;10576:4;10568:6;10564:17;10560:27;10550:122;;10591:79;;:::i;:::-;10550:122;10708:6;10695:20;10733:94;10823:3;10815:6;10808:4;10800:6;10796:17;10733:94;:::i;:::-;10724:103;;10540:293;10463:370;;;;:::o;10839:678::-;10929:6;10937;10986:2;10974:9;10965:7;10961:23;10957:32;10954:119;;;10992:79;;:::i;:::-;10954:119;11140:1;11129:9;11125:17;11112:31;11170:18;11162:6;11159:30;11156:117;;;11192:79;;:::i;:::-;11156:117;11297:78;11367:7;11358:6;11347:9;11343:22;11297:78;:::i;:::-;11287:88;;11083:302;11424:2;11450:50;11492:7;11483:6;11472:9;11468:22;11450:50;:::i;:::-;11440:60;;11395:115;10839:678;;;;;:::o;11523:474::-;11591:6;11599;11648:2;11636:9;11627:7;11623:23;11619:32;11616:119;;;11654:79;;:::i;:::-;11616:119;11774:1;11799:53;11844:7;11835:6;11824:9;11820:22;11799:53;:::i;:::-;11789:63;;11745:117;11901:2;11927:53;11972:7;11963:6;11952:9;11948:22;11927:53;:::i;:::-;11917:63;;11872:118;11523:474;;;;;:::o;12003:180::-;12051:77;12048:1;12041:88;12148:4;12145:1;12138:15;12172:4;12169:1;12162:15;12189:320;12233:6;12270:1;12264:4;12260:12;12250:22;;12317:1;12311:4;12307:12;12338:18;12328:81;;12394:4;12386:6;12382:17;12372:27;;12328:81;12456:2;12448:6;12445:14;12425:18;12422:38;12419:84;;12475:18;;:::i;:::-;12419:84;12240:269;12189:320;;;:::o;12515:182::-;12655:34;12651:1;12643:6;12639:14;12632:58;12515:182;:::o;12703:366::-;12845:3;12866:67;12930:2;12925:3;12866:67;:::i;:::-;12859:74;;12942:93;13031:3;12942:93;:::i;:::-;13060:2;13055:3;13051:12;13044:19;;12703:366;;;:::o;13075:419::-;13241:4;13279:2;13268:9;13264:18;13256:26;;13328:9;13322:4;13318:20;13314:1;13303:9;13299:17;13292:47;13356:131;13482:4;13356:131;:::i;:::-;13348:139;;13075:419;;;:::o;13500:180::-;13548:77;13545:1;13538:88;13645:4;13642:1;13635:15;13669:4;13666:1;13659:15;13686:410;13726:7;13749:20;13767:1;13749:20;:::i;:::-;13744:25;;13783:20;13801:1;13783:20;:::i;:::-;13778:25;;13838:1;13835;13831:9;13860:30;13878:11;13860:30;:::i;:::-;13849:41;;14039:1;14030:7;14026:15;14023:1;14020:22;14000:1;13993:9;13973:83;13950:139;;14069:18;;:::i;:::-;13950:139;13734:362;13686:410;;;;:::o;14102:180::-;14150:77;14147:1;14140:88;14247:4;14244:1;14237:15;14271:4;14268:1;14261:15;14288:185;14328:1;14345:20;14363:1;14345:20;:::i;:::-;14340:25;;14379:20;14397:1;14379:20;:::i;:::-;14374:25;;14418:1;14408:35;;14423:18;;:::i;:::-;14408:35;14465:1;14462;14458:9;14453:14;;14288:185;;;;:::o;14479:234::-;14619:34;14615:1;14607:6;14603:14;14596:58;14688:17;14683:2;14675:6;14671:15;14664:42;14479:234;:::o;14719:366::-;14861:3;14882:67;14946:2;14941:3;14882:67;:::i;:::-;14875:74;;14958:93;15047:3;14958:93;:::i;:::-;15076:2;15071:3;15067:12;15060:19;;14719:366;;;:::o;15091:419::-;15257:4;15295:2;15284:9;15280:18;15272:26;;15344:9;15338:4;15334:20;15330:1;15319:9;15315:17;15308:47;15372:131;15498:4;15372:131;:::i;:::-;15364:139;;15091:419;;;:::o;15516:227::-;15656:34;15652:1;15644:6;15640:14;15633:58;15725:10;15720:2;15712:6;15708:15;15701:35;15516:227;:::o;15749:366::-;15891:3;15912:67;15976:2;15971:3;15912:67;:::i;:::-;15905:74;;15988:93;16077:3;15988:93;:::i;:::-;16106:2;16101:3;16097:12;16090:19;;15749:366;;;:::o;16121:419::-;16287:4;16325:2;16314:9;16310:18;16302:26;;16374:9;16368:4;16364:20;16360:1;16349:9;16345:17;16338:47;16402:131;16528:4;16402:131;:::i;:::-;16394:139;;16121:419;;;:::o;16546:191::-;16586:3;16605:20;16623:1;16605:20;:::i;:::-;16600:25;;16639:20;16657:1;16639:20;:::i;:::-;16634:25;;16682:1;16679;16675:9;16668:16;;16703:3;16700:1;16697:10;16694:36;;;16710:18;;:::i;:::-;16694:36;16546:191;;;;:::o;16743:221::-;16883:34;16879:1;16871:6;16867:14;16860:58;16952:4;16947:2;16939:6;16935:15;16928:29;16743:221;:::o;16970:366::-;17112:3;17133:67;17197:2;17192:3;17133:67;:::i;:::-;17126:74;;17209:93;17298:3;17209:93;:::i;:::-;17327:2;17322:3;17318:12;17311:19;;16970:366;;;:::o;17342:419::-;17508:4;17546:2;17535:9;17531:18;17523:26;;17595:9;17589:4;17585:20;17581:1;17570:9;17566:17;17559:47;17623:131;17749:4;17623:131;:::i;:::-;17615:139;;17342:419;;;:::o;17767:244::-;17907:34;17903:1;17895:6;17891:14;17884:58;17976:27;17971:2;17963:6;17959:15;17952:52;17767:244;:::o;18017:366::-;18159:3;18180:67;18244:2;18239:3;18180:67;:::i;:::-;18173:74;;18256:93;18345:3;18256:93;:::i;:::-;18374:2;18369:3;18365:12;18358:19;;18017:366;;;:::o;18389:419::-;18555:4;18593:2;18582:9;18578:18;18570:26;;18642:9;18636:4;18632:20;18628:1;18617:9;18613:17;18606:47;18670:131;18796:4;18670:131;:::i;:::-;18662:139;;18389:419;;;:::o;18814:224::-;18954:34;18950:1;18942:6;18938:14;18931:58;19023:7;19018:2;19010:6;19006:15;18999:32;18814:224;:::o;19044:366::-;19186:3;19207:67;19271:2;19266:3;19207:67;:::i;:::-;19200:74;;19283:93;19372:3;19283:93;:::i;:::-;19401:2;19396:3;19392:12;19385:19;;19044:366;;;:::o;19416:419::-;19582:4;19620:2;19609:9;19605:18;19597:26;;19669:9;19663:4;19659:20;19655:1;19644:9;19640:17;19633:47;19697:131;19823:4;19697:131;:::i;:::-;19689:139;;19416:419;;;:::o;19841:223::-;19981:34;19977:1;19969:6;19965:14;19958:58;20050:6;20045:2;20037:6;20033:15;20026:31;19841:223;:::o;20070:366::-;20212:3;20233:67;20297:2;20292:3;20233:67;:::i;:::-;20226:74;;20309:93;20398:3;20309:93;:::i;:::-;20427:2;20422:3;20418:12;20411:19;;20070:366;;;:::o;20442:419::-;20608:4;20646:2;20635:9;20631:18;20623:26;;20695:9;20689:4;20685:20;20681:1;20670:9;20666:17;20659:47;20723:131;20849:4;20723:131;:::i;:::-;20715:139;;20442:419;;;:::o;20867:221::-;21007:34;21003:1;20995:6;20991:14;20984:58;21076:4;21071:2;21063:6;21059:15;21052:29;20867:221;:::o;21094:366::-;21236:3;21257:67;21321:2;21316:3;21257:67;:::i;:::-;21250:74;;21333:93;21422:3;21333:93;:::i;:::-;21451:2;21446:3;21442:12;21435:19;;21094:366;;;:::o;21466:419::-;21632:4;21670:2;21659:9;21655:18;21647:26;;21719:9;21713:4;21709:20;21705:1;21694:9;21690:17;21683:47;21747:131;21873:4;21747:131;:::i;:::-;21739:139;;21466:419;;;:::o;21891:180::-;21939:77;21936:1;21929:88;22036:4;22033:1;22026:15;22060:4;22057:1;22050:15;22077:233;22116:3;22139:24;22157:5;22139:24;:::i;:::-;22130:33;;22185:66;22178:5;22175:77;22172:103;;22255:18;;:::i;:::-;22172:103;22302:1;22295:5;22291:13;22284:20;;22077:233;;;:::o;22316:239::-;22456:34;22452:1;22444:6;22440:14;22433:58;22525:22;22520:2;22512:6;22508:15;22501:47;22316:239;:::o;22561:366::-;22703:3;22724:67;22788:2;22783:3;22724:67;:::i;:::-;22717:74;;22800:93;22889:3;22800:93;:::i;:::-;22918:2;22913:3;22909:12;22902:19;;22561:366;;;:::o;22933:419::-;23099:4;23137:2;23126:9;23122:18;23114:26;;23186:9;23180:4;23176:20;23172:1;23161:9;23157:17;23150:47;23214:131;23340:4;23214:131;:::i;:::-;23206:139;;22933:419;;;:::o;23358:237::-;23498:34;23494:1;23486:6;23482:14;23475:58;23567:20;23562:2;23554:6;23550:15;23543:45;23358:237;:::o;23601:366::-;23743:3;23764:67;23828:2;23823:3;23764:67;:::i;:::-;23757:74;;23840:93;23929:3;23840:93;:::i;:::-;23958:2;23953:3;23949:12;23942:19;;23601:366;;;:::o;23973:419::-;24139:4;24177:2;24166:9;24162:18;24154:26;;24226:9;24220:4;24216:20;24212:1;24201:9;24197:17;24190:47;24254:131;24380:4;24254:131;:::i;:::-;24246:139;;23973:419;;;:::o;24398:225::-;24538:34;24534:1;24526:6;24522:14;24515:58;24607:8;24602:2;24594:6;24590:15;24583:33;24398:225;:::o;24629:366::-;24771:3;24792:67;24856:2;24851:3;24792:67;:::i;:::-;24785:74;;24868:93;24957:3;24868:93;:::i;:::-;24986:2;24981:3;24977:12;24970:19;;24629:366;;;:::o;25001:419::-;25167:4;25205:2;25194:9;25190:18;25182:26;;25254:9;25248:4;25244:20;25240:1;25229:9;25225:17;25218:47;25282:131;25408:4;25282:131;:::i;:::-;25274:139;;25001:419;;;:::o;25426:223::-;25566:34;25562:1;25554:6;25550:14;25543:58;25635:6;25630:2;25622:6;25618:15;25611:31;25426:223;:::o;25655:366::-;25797:3;25818:67;25882:2;25877:3;25818:67;:::i;:::-;25811:74;;25894:93;25983:3;25894:93;:::i;:::-;26012:2;26007:3;26003:12;25996:19;;25655:366;;;:::o;26027:419::-;26193:4;26231:2;26220:9;26216:18;26208:26;;26280:9;26274:4;26270:20;26266:1;26255:9;26251:17;26244:47;26308:131;26434:4;26308:131;:::i;:::-;26300:139;;26027:419;;;:::o;26452:221::-;26592:34;26588:1;26580:6;26576:14;26569:58;26661:4;26656:2;26648:6;26644:15;26637:29;26452:221;:::o;26679:366::-;26821:3;26842:67;26906:2;26901:3;26842:67;:::i;:::-;26835:74;;26918:93;27007:3;26918:93;:::i;:::-;27036:2;27031:3;27027:12;27020:19;;26679:366;;;:::o;27051:419::-;27217:4;27255:2;27244:9;27240:18;27232:26;;27304:9;27298:4;27294:20;27290:1;27279:9;27275:17;27268:47;27332:131;27458:4;27332:131;:::i;:::-;27324:139;;27051:419;;;:::o;27476:224::-;27616:34;27612:1;27604:6;27600:14;27593:58;27685:7;27680:2;27672:6;27668:15;27661:32;27476:224;:::o;27706:366::-;27848:3;27869:67;27933:2;27928:3;27869:67;:::i;:::-;27862:74;;27945:93;28034:3;27945:93;:::i;:::-;28063:2;28058:3;28054:12;28047:19;;27706:366;;;:::o;28078:419::-;28244:4;28282:2;28271:9;28267:18;28259:26;;28331:9;28325:4;28321:20;28317:1;28306:9;28302:17;28295:47;28359:131;28485:4;28359:131;:::i;:::-;28351:139;;28078:419;;;:::o;28503:222::-;28643:34;28639:1;28631:6;28627:14;28620:58;28712:5;28707:2;28699:6;28695:15;28688:30;28503:222;:::o;28731:366::-;28873:3;28894:67;28958:2;28953:3;28894:67;:::i;:::-;28887:74;;28970:93;29059:3;28970:93;:::i;:::-;29088:2;29083:3;29079:12;29072:19;;28731:366;;;:::o;29103:419::-;29269:4;29307:2;29296:9;29292:18;29284:26;;29356:9;29350:4;29346:20;29342:1;29331:9;29327:17;29320:47;29384:131;29510:4;29384:131;:::i;:::-;29376:139;;29103:419;;;:::o;29528:172::-;29668:24;29664:1;29656:6;29652:14;29645:48;29528:172;:::o;29706:366::-;29848:3;29869:67;29933:2;29928:3;29869:67;:::i;:::-;29862:74;;29945:93;30034:3;29945:93;:::i;:::-;30063:2;30058:3;30054:12;30047:19;;29706:366;;;:::o;30078:419::-;30244:4;30282:2;30271:9;30267:18;30259:26;;30331:9;30325:4;30321:20;30317:1;30306:9;30302:17;30295:47;30359:131;30485:4;30359:131;:::i;:::-;30351:139;;30078:419;;;:::o;30503:240::-;30643:34;30639:1;30631:6;30627:14;30620:58;30712:23;30707:2;30699:6;30695:15;30688:48;30503:240;:::o;30749:366::-;30891:3;30912:67;30976:2;30971:3;30912:67;:::i;:::-;30905:74;;30988:93;31077:3;30988:93;:::i;:::-;31106:2;31101:3;31097:12;31090:19;;30749:366;;;:::o;31121:419::-;31287:4;31325:2;31314:9;31310:18;31302:26;;31374:9;31368:4;31364:20;31360:1;31349:9;31345:17;31338:47;31402:131;31528:4;31402:131;:::i;:::-;31394:139;;31121:419;;;:::o;31546:169::-;31686:21;31682:1;31674:6;31670:14;31663:45;31546:169;:::o;31721:366::-;31863:3;31884:67;31948:2;31943:3;31884:67;:::i;:::-;31877:74;;31960:93;32049:3;31960:93;:::i;:::-;32078:2;32073:3;32069:12;32062:19;;31721:366;;;:::o;32093:419::-;32259:4;32297:2;32286:9;32282:18;32274:26;;32346:9;32340:4;32336:20;32332:1;32321:9;32317:17;32310:47;32374:131;32500:4;32374:131;:::i;:::-;32366:139;;32093:419;;;:::o;32518:241::-;32658:34;32654:1;32646:6;32642:14;32635:58;32727:24;32722:2;32714:6;32710:15;32703:49;32518:241;:::o;32765:366::-;32907:3;32928:67;32992:2;32987:3;32928:67;:::i;:::-;32921:74;;33004:93;33093:3;33004:93;:::i;:::-;33122:2;33117:3;33113:12;33106:19;;32765:366;;;:::o;33137:419::-;33303:4;33341:2;33330:9;33326:18;33318:26;;33390:9;33384:4;33380:20;33376:1;33365:9;33361:17;33354:47;33418:131;33544:4;33418:131;:::i;:::-;33410:139;;33137:419;;;:::o;33562:194::-;33602:4;33622:20;33640:1;33622:20;:::i;:::-;33617:25;;33656:20;33674:1;33656:20;:::i;:::-;33651:25;;33700:1;33697;33693:9;33685:17;;33724:1;33718:4;33715:11;33712:37;;;33729:18;;:::i;:::-;33712:37;33562:194;;;;:::o;33762:147::-;33863:11;33900:3;33885:18;;33762:147;;;;:::o;33915:114::-;;:::o;34035:398::-;34194:3;34215:83;34296:1;34291:3;34215:83;:::i;:::-;34208:90;;34307:93;34396:3;34307:93;:::i;:::-;34425:1;34420:3;34416:11;34409:18;;34035:398;;;:::o;34439:379::-;34623:3;34645:147;34788:3;34645:147;:::i;:::-;34638:154;;34809:3;34802:10;;34439:379;;;:::o;34824:442::-;34973:4;35011:2;35000:9;34996:18;34988:26;;35024:71;35092:1;35081:9;35077:17;35068:6;35024:71;:::i;:::-;35105:72;35173:2;35162:9;35158:18;35149:6;35105:72;:::i;:::-;35187;35255:2;35244:9;35240:18;35231:6;35187:72;:::i;:::-;34824:442;;;;;;:::o;35272:225::-;35412:34;35408:1;35400:6;35396:14;35389:58;35481:8;35476:2;35468:6;35464:15;35457:33;35272:225;:::o;35503:366::-;35645:3;35666:67;35730:2;35725:3;35666:67;:::i;:::-;35659:74;;35742:93;35831:3;35742:93;:::i;:::-;35860:2;35855:3;35851:12;35844:19;;35503:366;;;:::o;35875:419::-;36041:4;36079:2;36068:9;36064:18;36056:26;;36128:9;36122:4;36118:20;36114:1;36103:9;36099:17;36092:47;36156:131;36282:4;36156:131;:::i;:::-;36148:139;;35875:419;;;:::o;36300:143::-;36357:5;36388:6;36382:13;36373:22;;36404:33;36431:5;36404:33;:::i;:::-;36300:143;;;;:::o;36449:351::-;36519:6;36568:2;36556:9;36547:7;36543:23;36539:32;36536:119;;;36574:79;;:::i;:::-;36536:119;36694:1;36719:64;36775:7;36766:6;36755:9;36751:22;36719:64;:::i;:::-;36709:74;;36665:128;36449:351;;;;:::o;36806:85::-;36851:7;36880:5;36869:16;;36806:85;;;:::o;36897:158::-;36955:9;36988:61;37006:42;37015:32;37041:5;37015:32;:::i;:::-;37006:42;:::i;:::-;36988:61;:::i;:::-;36975:74;;36897:158;;;:::o;37061:147::-;37156:45;37195:5;37156:45;:::i;:::-;37151:3;37144:58;37061:147;;:::o;37214:114::-;37281:6;37315:5;37309:12;37299:22;;37214:114;;;:::o;37334:184::-;37433:11;37467:6;37462:3;37455:19;37507:4;37502:3;37498:14;37483:29;;37334:184;;;;:::o;37524:132::-;37591:4;37614:3;37606:11;;37644:4;37639:3;37635:14;37627:22;;37524:132;;;:::o;37662:108::-;37739:24;37757:5;37739:24;:::i;:::-;37734:3;37727:37;37662:108;;:::o;37776:179::-;37845:10;37866:46;37908:3;37900:6;37866:46;:::i;:::-;37944:4;37939:3;37935:14;37921:28;;37776:179;;;;:::o;37961:113::-;38031:4;38063;38058:3;38054:14;38046:22;;37961:113;;;:::o;38110:732::-;38229:3;38258:54;38306:5;38258:54;:::i;:::-;38328:86;38407:6;38402:3;38328:86;:::i;:::-;38321:93;;38438:56;38488:5;38438:56;:::i;:::-;38517:7;38548:1;38533:284;38558:6;38555:1;38552:13;38533:284;;;38634:6;38628:13;38661:63;38720:3;38705:13;38661:63;:::i;:::-;38654:70;;38747:60;38800:6;38747:60;:::i;:::-;38737:70;;38593:224;38580:1;38577;38573:9;38568:14;;38533:284;;;38537:14;38833:3;38826:10;;38234:608;;;38110:732;;;;:::o;38848:831::-;39111:4;39149:3;39138:9;39134:19;39126:27;;39163:71;39231:1;39220:9;39216:17;39207:6;39163:71;:::i;:::-;39244:80;39320:2;39309:9;39305:18;39296:6;39244:80;:::i;:::-;39371:9;39365:4;39361:20;39356:2;39345:9;39341:18;39334:48;39399:108;39502:4;39493:6;39399:108;:::i;:::-;39391:116;;39517:72;39585:2;39574:9;39570:18;39561:6;39517:72;:::i;:::-;39599:73;39667:3;39656:9;39652:19;39643:6;39599:73;:::i;:::-;38848:831;;;;;;;;:::o;39685:807::-;39934:4;39972:3;39961:9;39957:19;39949:27;;39986:71;40054:1;40043:9;40039:17;40030:6;39986:71;:::i;:::-;40067:72;40135:2;40124:9;40120:18;40111:6;40067:72;:::i;:::-;40149:80;40225:2;40214:9;40210:18;40201:6;40149:80;:::i;:::-;40239;40315:2;40304:9;40300:18;40291:6;40239:80;:::i;:::-;40329:73;40397:3;40386:9;40382:19;40373:6;40329:73;:::i;:::-;40412;40480:3;40469:9;40465:19;40456:6;40412:73;:::i;:::-;39685:807;;;;;;;;;:::o;40498:143::-;40555:5;40586:6;40580:13;40571:22;;40602:33;40629:5;40602:33;:::i;:::-;40498:143;;;;:::o;40647:663::-;40735:6;40743;40751;40800:2;40788:9;40779:7;40775:23;40771:32;40768:119;;;40806:79;;:::i;:::-;40768:119;40926:1;40951:64;41007:7;40998:6;40987:9;40983:22;40951:64;:::i;:::-;40941:74;;40897:128;41064:2;41090:64;41146:7;41137:6;41126:9;41122:22;41090:64;:::i;:::-;41080:74;;41035:129;41203:2;41229:64;41285:7;41276:6;41265:9;41261:22;41229:64;:::i;:::-;41219:74;;41174:129;40647:663;;;;;:::o

Swarm Source

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