ETH Price: $3,268.09 (+0.77%)
Gas: 1 Gwei

Token

BIKINI (BIKINI)
 

Overview

Max Total Supply

100,000,000,000 BIKINI

Holders

12

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
269,940,890.262147341272281789 BIKINI

Value
$0.00
0xf21c2dcad04bd2f4381c3cc49722d9f2198d9abb
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BIKINI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-14
*/

//https://t.me/BikiniOffBot -> official bot
//https://t.me/bikinioffeth -> official chatroom

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

    bool private swapping;

    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;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // 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("BIKINI", "BIKINI") {
        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 = 9;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 19;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 100000000000 * 1e18;

        maxTransactionAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

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

        marketingWallet = address(0x9Fc5c7D62DB4B037276bA6CBf02C72118d820bC7);
        devWallet = address(0x9Fc5c7D62DB4B037276bA6CBf02C72118d820bC7);
        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) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

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

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

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _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 {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(
            buyTotalFees <= 5,
            "Buy fees cannot be higher than 5% of transaction."
        );
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(
            sellTotalFees <= 10,
            "Sell fees cannot be higher than 10% of transaction."
        );
    }

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

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

    function updateNewDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

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

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

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_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 &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

    function 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 {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

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

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

    function airdrop(
        address[] memory recipients,
        uint256[] memory amounts
    ) external onlyOwner {
        require(
            recipients.length == amounts.length,
            "recipients and amounts must be same length"
        );
        for (uint256 i = 0; i < recipients.length; i++) {
            super._transfer(msg.sender, recipients[i], amounts[i]);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[],"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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","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":"address","name":"newWallet","type":"address"}],"name":"updateNewDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateNewMarketingWallet","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"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600681526020017f42494b494e4900000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f42494b494e4900000000000000000000000000000000000000000000000000008152508160039081620000e0919062000e07565b508060049081620000f2919062000e07565b50505062000115620001096200064e60201b60201c565b6200065660201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001418160016200071c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e7919062000f58565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000f58565b6040518363ffffffff1660e01b81526004016200029492919062000f9b565b6020604051808303816000875af1158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062000f58565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032260a05160016200071c60201b60201c565b6200033760a05160016200080660201b60201c565b600060099050600060019050600080601390506000600190506000806c01431e0fae6d7217caa00000009050606460018262000374919062000ff7565b62000380919062001071565b600981905550606460028262000397919062000ff7565b620003a3919062001071565b600b81905550612710600582620003bb919062000ff7565b620003c7919062001071565b600a8190555086600e8190555085600f8190555084601081905550601054600f54600e54620003f79190620010a9565b620004039190620010a9565b600d81905550836012819055508260138190555081601481905550601454601354601254620004339190620010a9565b6200043f9190620010a9565b601181905550739fc5c7d62db4b037276ba6cbf02c72118d820bc7600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739fc5c7d62db4b037276ba6cbf02c72118d820bc7600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055262000544620008a760201b60201c565b6001620008d160201b60201c565b62000565306001620008d160201b60201c565b6200057a61dead6001620008d160201b60201c565b620005af600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008d160201b60201c565b620005d1620005c3620008a760201b60201c565b60016200071c60201b60201c565b620005e43060016200071c60201b60201c565b620005f961dead60016200071c60201b60201c565b6200062e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200071c60201b60201c565b62000640338262000a0b60201b60201c565b505050505050505062001241565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200072c6200064e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000752620008a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a29062001145565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008e16200064e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000907620008a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009579062001145565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009ff919062001184565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7490620011f1565b60405180910390fd5b62000a916000838362000b8360201b60201c565b806002600082825462000aa59190620010a9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000afc9190620010a9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b63919062001224565b60405180910390a362000b7f6000838362000b8860201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c0f57607f821691505b60208210810362000c255762000c2462000bc7565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c50565b62000c9b868362000c50565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ce862000ce262000cdc8462000cb3565b62000cbd565b62000cb3565b9050919050565b6000819050919050565b62000d048362000cc7565b62000d1c62000d138262000cef565b84845462000c5d565b825550505050565b600090565b62000d3362000d24565b62000d4081848462000cf9565b505050565b5b8181101562000d685762000d5c60008262000d29565b60018101905062000d46565b5050565b601f82111562000db75762000d818162000c2b565b62000d8c8462000c40565b8101602085101562000d9c578190505b62000db462000dab8562000c40565b83018262000d45565b50505b505050565b600082821c905092915050565b600062000ddc6000198460080262000dbc565b1980831691505092915050565b600062000df7838362000dc9565b9150826002028217905092915050565b62000e128262000b8d565b67ffffffffffffffff81111562000e2e5762000e2d62000b98565b5b62000e3a825462000bf6565b62000e4782828562000d6c565b600060209050601f83116001811462000e7f576000841562000e6a578287015190505b62000e76858262000de9565b86555062000ee6565b601f19841662000e8f8662000c2b565b60005b8281101562000eb95784890151825560018201915060208501945060208101905062000e92565b8683101562000ed9578489015162000ed5601f89168262000dc9565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f208262000ef3565b9050919050565b62000f328162000f13565b811462000f3e57600080fd5b50565b60008151905062000f528162000f27565b92915050565b60006020828403121562000f715762000f7062000eee565b5b600062000f818482850162000f41565b91505092915050565b62000f958162000f13565b82525050565b600060408201905062000fb2600083018562000f8a565b62000fc1602083018462000f8a565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010048262000cb3565b9150620010118362000cb3565b9250828202620010218162000cb3565b915082820484148315176200103b576200103a62000fc8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200107e8262000cb3565b91506200108b8362000cb3565b9250826200109e576200109d62001042565b5b828204905092915050565b6000620010b68262000cb3565b9150620010c38362000cb3565b9250828201905080821115620010de57620010dd62000fc8565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200112d602083620010e4565b91506200113a82620010f5565b602082019050919050565b6000602082019050818103600083015262001160816200111e565b9050919050565b60008115159050919050565b6200117e8162001167565b82525050565b60006020820190506200119b600083018462001173565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011d9601f83620010e4565b9150620011e682620011a1565b602082019050919050565b600060208201905081810360008301526200120c81620011ca565b9050919050565b6200121e8162000cb3565b82525050565b60006020820190506200123b600083018462001213565b92915050565b60805160a05161539762001291600039600081816110ef0152611a69015260008181610df30152818161392301528181613a0401528181613a2b01528181613ac70152613aee01526153976000f3fe6080604052600436106103545760003560e01c80638a8c523c116101c6578063c0246668116100f7578063e158633811610095578063f2fde38b1161006f578063f2fde38b14610c79578063f637434214610ca2578063f8b45b0514610ccd578063fbc10c5514610cf85761035b565b8063e158633814610bfa578063e2f4560514610c23578063f11a24d314610c4e5761035b565b8063c8c8ebe4116100d1578063c8c8ebe414610b2a578063d257b34f14610b55578063d85ba06314610b92578063dd62ed3e14610bbd5761035b565b8063c024666814610aaf578063c17b5b8c14610ad8578063c18bc19514610b015761035b565b80639c3b4fdc11610164578063a457c2d71161013e578063a457c2d7146109cd578063a9059cbb14610a0a578063b62496f514610a47578063bbc0c74214610a845761035b565b80639c3b4fdc1461094c5780639fccce3214610977578063a0d82dc5146109a25761035b565b806392136913116101a057806392136913146108a4578063924de9b7146108cf57806395d89b41146108f85780639a7a23d6146109235761035b565b80638a8c523c146108375780638da5cb5b1461084e5780638ea5220f146108795761035b565b80634a62bb65116102a057806370a082311161023e5780637571336a116102185780637571336a1461078f57806375f0a874146107b85780637bce5a04146107e35780638095d5641461080e5761035b565b806370a0823114610710578063715018a61461074d578063751039fc146107645761035b565b80636303516c1161027a5780636303516c1461066657806367243482146106915780636a486a8e146106ba5780636ddd1713146106e55761035b565b80634a62bb65146105d55780634a8483ed146106005780634fbee193146106295761035b565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f83514610517578063313ce56714610542578063395093511461056d57806349bd5a5e146105aa5761035b565b80631f3fed8f14610486578063203e727e146104b157806323b872dd146104da5761035b565b806306fdde0314610360578063095ea7b31461038b57806310d5de53146103c85780631694505e1461040557806318160ddd146104305780631a8145bb1461045b5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d21565b6040516103829190613c4d565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613d17565b610db3565b6040516103bf9190613d72565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613d8d565b610dd1565b6040516103fc9190613d72565b60405180910390f35b34801561041157600080fd5b5061041a610df1565b6040516104279190613e19565b60405180910390f35b34801561043c57600080fd5b50610445610e15565b6040516104529190613e43565b60405180910390f35b34801561046757600080fd5b50610470610e1f565b60405161047d9190613e43565b60405180910390f35b34801561049257600080fd5b5061049b610e25565b6040516104a89190613e43565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190613e5e565b610e2b565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190613e8b565b610f3a565b60405161050e9190613d72565b60405180910390f35b34801561052357600080fd5b5061052c611032565b6040516105399190613eed565b60405180910390f35b34801561054e57600080fd5b50610557611038565b6040516105649190613f24565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f9190613d17565b611041565b6040516105a19190613d72565b60405180910390f35b3480156105b657600080fd5b506105bf6110ed565b6040516105cc9190613eed565b60405180910390f35b3480156105e157600080fd5b506105ea611111565b6040516105f79190613d72565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190613d8d565b611124565b005b34801561063557600080fd5b50610650600480360381019061064b9190613d8d565b611260565b60405161065d9190613d72565b60405180910390f35b34801561067257600080fd5b5061067b6112b6565b6040516106889190613eed565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b3919061414a565b6112dc565b005b3480156106c657600080fd5b506106cf6113ff565b6040516106dc9190613e43565b60405180910390f35b3480156106f157600080fd5b506106fa611405565b6040516107079190613d72565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613d8d565b611418565b6040516107449190613e43565b60405180910390f35b34801561075957600080fd5b50610762611460565b005b34801561077057600080fd5b506107796114e8565b6040516107869190613d72565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b191906141ee565b6115b4565b005b3480156107c457600080fd5b506107cd61168b565b6040516107da9190613eed565b60405180910390f35b3480156107ef57600080fd5b506107f86116b1565b6040516108059190613e43565b60405180910390f35b34801561081a57600080fd5b506108356004803603810190610830919061422e565b6116b7565b005b34801561084357600080fd5b5061084c6117b6565b005b34801561085a57600080fd5b5061086361186a565b6040516108709190613eed565b60405180910390f35b34801561088557600080fd5b5061088e611894565b60405161089b9190613eed565b60405180910390f35b3480156108b057600080fd5b506108b96118ba565b6040516108c69190613e43565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f19190614281565b6118c0565b005b34801561090457600080fd5b5061090d611959565b60405161091a9190613c4d565b60405180910390f35b34801561092f57600080fd5b5061094a600480360381019061094591906141ee565b6119eb565b005b34801561095857600080fd5b50610961611b03565b60405161096e9190613e43565b60405180910390f35b34801561098357600080fd5b5061098c611b09565b6040516109999190613e43565b60405180910390f35b3480156109ae57600080fd5b506109b7611b0f565b6040516109c49190613e43565b60405180910390f35b3480156109d957600080fd5b506109f460048036038101906109ef9190613d17565b611b15565b604051610a019190613d72565b60405180910390f35b348015610a1657600080fd5b50610a316004803603810190610a2c9190613d17565b611c00565b604051610a3e9190613d72565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a699190613d8d565b611c1e565b604051610a7b9190613d72565b60405180910390f35b348015610a9057600080fd5b50610a99611c3e565b604051610aa69190613d72565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad191906141ee565b611c51565b005b348015610ae457600080fd5b50610aff6004803603810190610afa919061422e565b611d76565b005b348015610b0d57600080fd5b50610b286004803603810190610b239190613e5e565b611e75565b005b348015610b3657600080fd5b50610b3f611f84565b604051610b4c9190613e43565b60405180910390f35b348015610b6157600080fd5b50610b7c6004803603810190610b779190613e5e565b611f8a565b604051610b899190613d72565b60405180910390f35b348015610b9e57600080fd5b50610ba76120df565b604051610bb49190613e43565b60405180910390f35b348015610bc957600080fd5b50610be46004803603810190610bdf91906142ae565b6120e5565b604051610bf19190613e43565b60405180910390f35b348015610c0657600080fd5b50610c216004803603810190610c1c9190613d8d565b61216c565b005b348015610c2f57600080fd5b50610c386122a8565b604051610c459190613e43565b60405180910390f35b348015610c5a57600080fd5b50610c636122ae565b604051610c709190613e43565b60405180910390f35b348015610c8557600080fd5b50610ca06004803603810190610c9b9190613d8d565b6122b4565b005b348015610cae57600080fd5b50610cb76123ab565b604051610cc49190613e43565b60405180910390f35b348015610cd957600080fd5b50610ce26123b1565b604051610cef9190613e43565b60405180910390f35b348015610d0457600080fd5b50610d1f6004803603810190610d1a9190613d8d565b6123b7565b005b606060038054610d309061431d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5c9061431d565b8015610da95780601f10610d7e57610100808354040283529160200191610da9565b820191906000526020600020905b815481529060010190602001808311610d8c57829003601f168201915b5050505050905090565b6000610dc7610dc06124f3565b84846124fb565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60165481565b60155481565b610e336124f3565b73ffffffffffffffffffffffffffffffffffffffff16610e5161186a565b73ffffffffffffffffffffffffffffffffffffffff1614610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e9061439a565b60405180910390fd5b670de0b6b3a76400006103e86001610ebd610e15565b610ec791906143e9565b610ed1919061445a565b610edb919061445a565b811015610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f14906144fd565b60405180910390fd5b670de0b6b3a764000081610f3191906143e9565b60098190555050565b6000610f478484846126c4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f926124f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611012576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110099061458f565b60405180910390fd5b6110268561101e6124f3565b8584036124fb565b60019150509392505050565b61dead81565b60006012905090565b60006110e361104e6124f3565b84846001600061105c6124f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110de91906145af565b6124fb565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b61112c6124f3565b73ffffffffffffffffffffffffffffffffffffffff1661114a61186a565b73ffffffffffffffffffffffffffffffffffffffff16146111a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111979061439a565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112e46124f3565b73ffffffffffffffffffffffffffffffffffffffff1661130261186a565b73ffffffffffffffffffffffffffffffffffffffff1614611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f9061439a565b60405180910390fd5b805182511461139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390614655565b60405180910390fd5b60005b82518110156113fa576113e7338483815181106113bf576113be614675565b5b60200260200101518484815181106113da576113d9614675565b5b6020026020010151613193565b80806113f2906146a4565b91505061139f565b505050565b60115481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114686124f3565b73ffffffffffffffffffffffffffffffffffffffff1661148661186a565b73ffffffffffffffffffffffffffffffffffffffff16146114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d39061439a565b60405180910390fd5b6114e66000613412565b565b60006114f26124f3565b73ffffffffffffffffffffffffffffffffffffffff1661151061186a565b73ffffffffffffffffffffffffffffffffffffffff1614611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d9061439a565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b6115bc6124f3565b73ffffffffffffffffffffffffffffffffffffffff166115da61186a565b73ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116279061439a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6116bf6124f3565b73ffffffffffffffffffffffffffffffffffffffff166116dd61186a565b73ffffffffffffffffffffffffffffffffffffffff1614611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a9061439a565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e5461175b91906145af565b61176591906145af565b600d819055506005600d5411156117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a89061475e565b60405180910390fd5b505050565b6117be6124f3565b73ffffffffffffffffffffffffffffffffffffffff166117dc61186a565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118299061439a565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6118c86124f3565b73ffffffffffffffffffffffffffffffffffffffff166118e661186a565b73ffffffffffffffffffffffffffffffffffffffff161461193c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119339061439a565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546119689061431d565b80601f01602080910402602001604051908101604052809291908181526020018280546119949061431d565b80156119e15780601f106119b6576101008083540402835291602001916119e1565b820191906000526020600020905b8154815290600101906020018083116119c457829003601f168201915b5050505050905090565b6119f36124f3565b73ffffffffffffffffffffffffffffffffffffffff16611a1161186a565b73ffffffffffffffffffffffffffffffffffffffff1614611a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5e9061439a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec906147f0565b60405180910390fd5b611aff82826134d8565b5050565b60105481565b60175481565b60145481565b60008060016000611b246124f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890614882565b60405180910390fd5b611bf5611bec6124f3565b858584036124fb565b600191505092915050565b6000611c14611c0d6124f3565b84846126c4565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611c596124f3565b73ffffffffffffffffffffffffffffffffffffffff16611c7761186a565b73ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc49061439a565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d6a9190613d72565b60405180910390a25050565b611d7e6124f3565b73ffffffffffffffffffffffffffffffffffffffff16611d9c61186a565b73ffffffffffffffffffffffffffffffffffffffff1614611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de99061439a565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611e1a91906145af565b611e2491906145af565b601181905550600a6011541115611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790614914565b60405180910390fd5b505050565b611e7d6124f3565b73ffffffffffffffffffffffffffffffffffffffff16611e9b61186a565b73ffffffffffffffffffffffffffffffffffffffff1614611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee89061439a565b60405180910390fd5b670de0b6b3a76400006103e86005611f07610e15565b611f1191906143e9565b611f1b919061445a565b611f25919061445a565b811015611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e906149a6565b60405180910390fd5b670de0b6b3a764000081611f7b91906143e9565b600b8190555050565b60095481565b6000611f946124f3565b73ffffffffffffffffffffffffffffffffffffffff16611fb261186a565b73ffffffffffffffffffffffffffffffffffffffff1614612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff9061439a565b60405180910390fd5b620186a06001612016610e15565b61202091906143e9565b61202a919061445a565b82101561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614a38565b60405180910390fd5b6103e86005612079610e15565b61208391906143e9565b61208d919061445a565b8211156120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c690614aca565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121746124f3565b73ffffffffffffffffffffffffffffffffffffffff1661219261186a565b73ffffffffffffffffffffffffffffffffffffffff16146121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df9061439a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600f5481565b6122bc6124f3565b73ffffffffffffffffffffffffffffffffffffffff166122da61186a565b73ffffffffffffffffffffffffffffffffffffffff1614612330576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123279061439a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239690614b5c565b60405180910390fd5b6123a881613412565b50565b60135481565b600b5481565b6123bf6124f3565b73ffffffffffffffffffffffffffffffffffffffff166123dd61186a565b73ffffffffffffffffffffffffffffffffffffffff1614612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a9061439a565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256190614bee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d090614c80565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b79190613e43565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90614d12565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279990614da4565b60405180910390fd5b600081036127bb576127b683836000613193565b61318e565b600c60009054906101000a900460ff1615612cb6576127d861186a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612846575061281661186a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561287f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128d25750600560149054906101000a900460ff16155b15612cb557600c60019054906101000a900460ff166129cc57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061298c5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c290614e10565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a6f5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1657600954811115612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab090614ea2565b60405180910390fd5b600b54612ac583611418565b82612ad091906145af565b1115612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0890614f0e565b60405180910390fd5b612cb4565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bb95750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0857600954811115612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90614fa0565b60405180910390fd5b612cb3565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cb257600b54612c6583611418565b82612c7091906145af565b1115612cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca890614f0e565b60405180910390fd5b5b5b5b5b5b6000612cc130611418565b90506000600a548210159050808015612ce65750600c60029054906101000a900460ff165b8015612cff5750600560149054906101000a900460ff16155b8015612d555750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dab5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e015750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e45576001600560146101000a81548160ff021916908315150217905550612e29613579565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612efb5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f0557600090505b6000811561317e57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6857506000601154115b1561303557612f956064612f876011548861383890919063ffffffff16565b61384e90919063ffffffff16565b905060115460135482612fa891906143e9565b612fb2919061445a565b60166000828254612fc391906145af565b9250508190555060115460145482612fdb91906143e9565b612fe5919061445a565b60176000828254612ff691906145af565b925050819055506011546012548261300e91906143e9565b613018919061445a565b6015600082825461302991906145af565b9250508190555061315a565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561309057506000600d54115b15613159576130bd60646130af600d548861383890919063ffffffff16565b61384e90919063ffffffff16565b9050600d54600f54826130d091906143e9565b6130da919061445a565b601660008282546130eb91906145af565b92505081905550600d546010548261310391906143e9565b61310d919061445a565b6017600082825461311e91906145af565b92505081905550600d54600e548261313691906143e9565b613140919061445a565b6015600082825461315191906145af565b925050819055505b5b600081111561316f5761316e873083613193565b5b808561317b9190614fc0565b94505b613189878787613193565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f990614d12565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326890614da4565b60405180910390fd5b61327c838383613864565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f990615066565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339591906145af565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133f99190613e43565b60405180910390a361340c848484613869565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600061358430611418565b9050600060175460155460165461359b91906145af565b6135a591906145af565b90506000808314806135b75750600082145b156135c457505050613836565b6000600283601654866135d791906143e9565b6135e1919061445a565b6135eb919061445a565b90506000613602828661386e90919063ffffffff16565b9050600047905061361282613884565b6000613627824761386e90919063ffffffff16565b90506000613652876136446015548561383890919063ffffffff16565b61384e90919063ffffffff16565b9050600061367d8861366f6017548661383890919063ffffffff16565b61384e90919063ffffffff16565b9050600081838561368e9190614fc0565b6136989190614fc0565b9050600060168190555060006015819055506000601781905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516136f8906150b7565b60006040518083038185875af1925050503d8060008114613735576040519150601f19603f3d011682016040523d82523d6000602084013e61373a565b606091505b5050809850506000871180156137505750600081115b1561379d5761375f8782613ac1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601654604051613794939291906150cc565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516137e3906150b7565b60006040518083038185875af1925050503d8060008114613820576040519150601f19603f3d011682016040523d82523d6000602084013e613825565b606091505b505080985050505050505050505050505b565b6000818361384691906143e9565b905092915050565b6000818361385c919061445a565b905092915050565b505050565b505050565b6000818361387c9190614fc0565b905092915050565b6000600267ffffffffffffffff8111156138a1576138a0613f44565b5b6040519080825280602002602001820160405280156138cf5781602001602082028036833780820191505090505b50905030816000815181106138e7576138e6614675565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561398c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b09190615118565b816001815181106139c4576139c3614675565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a29307f0000000000000000000000000000000000000000000000000000000000000000846124fb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a8b95949392919061523e565b600060405180830381600087803b158015613aa557600080fd5b505af1158015613ab9573d6000803e3d6000fd5b505050505050565b613aec307f0000000000000000000000000000000000000000000000000000000000000000846124fb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b7396959493929190615298565b60606040518083038185885af1158015613b91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bb6919061530e565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bf7578082015181840152602081019050613bdc565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c1f82613bbd565b613c298185613bc8565b9350613c39818560208601613bd9565b613c4281613c03565b840191505092915050565b60006020820190508181036000830152613c678184613c14565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cae82613c83565b9050919050565b613cbe81613ca3565b8114613cc957600080fd5b50565b600081359050613cdb81613cb5565b92915050565b6000819050919050565b613cf481613ce1565b8114613cff57600080fd5b50565b600081359050613d1181613ceb565b92915050565b60008060408385031215613d2e57613d2d613c79565b5b6000613d3c85828601613ccc565b9250506020613d4d85828601613d02565b9150509250929050565b60008115159050919050565b613d6c81613d57565b82525050565b6000602082019050613d876000830184613d63565b92915050565b600060208284031215613da357613da2613c79565b5b6000613db184828501613ccc565b91505092915050565b6000819050919050565b6000613ddf613dda613dd584613c83565b613dba565b613c83565b9050919050565b6000613df182613dc4565b9050919050565b6000613e0382613de6565b9050919050565b613e1381613df8565b82525050565b6000602082019050613e2e6000830184613e0a565b92915050565b613e3d81613ce1565b82525050565b6000602082019050613e586000830184613e34565b92915050565b600060208284031215613e7457613e73613c79565b5b6000613e8284828501613d02565b91505092915050565b600080600060608486031215613ea457613ea3613c79565b5b6000613eb286828701613ccc565b9350506020613ec386828701613ccc565b9250506040613ed486828701613d02565b9150509250925092565b613ee781613ca3565b82525050565b6000602082019050613f026000830184613ede565b92915050565b600060ff82169050919050565b613f1e81613f08565b82525050565b6000602082019050613f396000830184613f15565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f7c82613c03565b810181811067ffffffffffffffff82111715613f9b57613f9a613f44565b5b80604052505050565b6000613fae613c6f565b9050613fba8282613f73565b919050565b600067ffffffffffffffff821115613fda57613fd9613f44565b5b602082029050602081019050919050565b600080fd5b6000614003613ffe84613fbf565b613fa4565b9050808382526020820190506020840283018581111561402657614025613feb565b5b835b8181101561404f578061403b8882613ccc565b845260208401935050602081019050614028565b5050509392505050565b600082601f83011261406e5761406d613f3f565b5b813561407e848260208601613ff0565b91505092915050565b600067ffffffffffffffff8211156140a2576140a1613f44565b5b602082029050602081019050919050565b60006140c66140c184614087565b613fa4565b905080838252602082019050602084028301858111156140e9576140e8613feb565b5b835b8181101561411257806140fe8882613d02565b8452602084019350506020810190506140eb565b5050509392505050565b600082601f83011261413157614130613f3f565b5b81356141418482602086016140b3565b91505092915050565b6000806040838503121561416157614160613c79565b5b600083013567ffffffffffffffff81111561417f5761417e613c7e565b5b61418b85828601614059565b925050602083013567ffffffffffffffff8111156141ac576141ab613c7e565b5b6141b88582860161411c565b9150509250929050565b6141cb81613d57565b81146141d657600080fd5b50565b6000813590506141e8816141c2565b92915050565b6000806040838503121561420557614204613c79565b5b600061421385828601613ccc565b9250506020614224858286016141d9565b9150509250929050565b60008060006060848603121561424757614246613c79565b5b600061425586828701613d02565b935050602061426686828701613d02565b925050604061427786828701613d02565b9150509250925092565b60006020828403121561429757614296613c79565b5b60006142a5848285016141d9565b91505092915050565b600080604083850312156142c5576142c4613c79565b5b60006142d385828601613ccc565b92505060206142e485828601613ccc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061433557607f821691505b602082108103614348576143476142ee565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614384602083613bc8565b915061438f8261434e565b602082019050919050565b600060208201905081810360008301526143b381614377565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143f482613ce1565b91506143ff83613ce1565b925082820261440d81613ce1565b91508282048414831517614424576144236143ba565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061446582613ce1565b915061447083613ce1565b9250826144805761447f61442b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006144e7602f83613bc8565b91506144f28261448b565b604082019050919050565b60006020820190508181036000830152614516816144da565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614579602883613bc8565b91506145848261451d565b604082019050919050565b600060208201905081810360008301526145a88161456c565b9050919050565b60006145ba82613ce1565b91506145c583613ce1565b92508282019050808211156145dd576145dc6143ba565b5b92915050565b7f726563697069656e747320616e6420616d6f756e7473206d757374206265207360008201527f616d65206c656e67746800000000000000000000000000000000000000000000602082015250565b600061463f602a83613bc8565b915061464a826145e3565b604082019050919050565b6000602082019050818103600083015261466e81614632565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006146af82613ce1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146e1576146e06143ba565b5b600182019050919050565b7f42757920666565732063616e6e6f7420626520686967686572207468616e203560008201527f25206f66207472616e73616374696f6e2e000000000000000000000000000000602082015250565b6000614748603183613bc8565b9150614753826146ec565b604082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147da603983613bc8565b91506147e58261477e565b604082019050919050565b60006020820190508181036000830152614809816147cd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061486c602583613bc8565b915061487782614810565b604082019050919050565b6000602082019050818103600083015261489b8161485f565b9050919050565b7f53656c6c20666565732063616e6e6f7420626520686967686572207468616e2060008201527f313025206f66207472616e73616374696f6e2e00000000000000000000000000602082015250565b60006148fe603383613bc8565b9150614909826148a2565b604082019050919050565b6000602082019050818103600083015261492d816148f1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614990602483613bc8565b915061499b82614934565b604082019050919050565b600060208201905081810360008301526149bf81614983565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a22603583613bc8565b9150614a2d826149c6565b604082019050919050565b60006020820190508181036000830152614a5181614a15565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ab4603483613bc8565b9150614abf82614a58565b604082019050919050565b60006020820190508181036000830152614ae381614aa7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b46602683613bc8565b9150614b5182614aea565b604082019050919050565b60006020820190508181036000830152614b7581614b39565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bd8602483613bc8565b9150614be382614b7c565b604082019050919050565b60006020820190508181036000830152614c0781614bcb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6a602283613bc8565b9150614c7582614c0e565b604082019050919050565b60006020820190508181036000830152614c9981614c5d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cfc602583613bc8565b9150614d0782614ca0565b604082019050919050565b60006020820190508181036000830152614d2b81614cef565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d8e602383613bc8565b9150614d9982614d32565b604082019050919050565b60006020820190508181036000830152614dbd81614d81565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614dfa601683613bc8565b9150614e0582614dc4565b602082019050919050565b60006020820190508181036000830152614e2981614ded565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614e8c603583613bc8565b9150614e9782614e30565b604082019050919050565b60006020820190508181036000830152614ebb81614e7f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614ef8601383613bc8565b9150614f0382614ec2565b602082019050919050565b60006020820190508181036000830152614f2781614eeb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f8a603683613bc8565b9150614f9582614f2e565b604082019050919050565b60006020820190508181036000830152614fb981614f7d565b9050919050565b6000614fcb82613ce1565b9150614fd683613ce1565b9250828203905081811115614fee57614fed6143ba565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615050602683613bc8565b915061505b82614ff4565b604082019050919050565b6000602082019050818103600083015261507f81615043565b9050919050565b600081905092915050565b50565b60006150a1600083615086565b91506150ac82615091565b600082019050919050565b60006150c282615094565b9150819050919050565b60006060820190506150e16000830186613e34565b6150ee6020830185613e34565b6150fb6040830184613e34565b949350505050565b60008151905061511281613cb5565b92915050565b60006020828403121561512e5761512d613c79565b5b600061513c84828501615103565b91505092915050565b6000819050919050565b600061516a61516561516084615145565b613dba565b613ce1565b9050919050565b61517a8161514f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151b581613ca3565b82525050565b60006151c783836151ac565b60208301905092915050565b6000602082019050919050565b60006151eb82615180565b6151f5818561518b565b93506152008361519c565b8060005b8381101561523157815161521888826151bb565b9750615223836151d3565b925050600181019050615204565b5085935050505092915050565b600060a0820190506152536000830188613e34565b6152606020830187615171565b818103604083015261527281866151e0565b90506152816060830185613ede565b61528e6080830184613e34565b9695505050505050565b600060c0820190506152ad6000830189613ede565b6152ba6020830188613e34565b6152c76040830187615171565b6152d46060830186615171565b6152e16080830185613ede565b6152ee60a0830184613e34565b979650505050505050565b60008151905061530881613ceb565b92915050565b60008060006060848603121561532757615326613c79565b5b6000615335868287016152f9565b9350506020615346868287016152f9565b9250506040615357868287016152f9565b915050925092509256fea26469706673582212204b3b380d2c199992f8f52a19e06e871041d9615b31b893cef2eee14d9abbe8de64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80638a8c523c116101c6578063c0246668116100f7578063e158633811610095578063f2fde38b1161006f578063f2fde38b14610c79578063f637434214610ca2578063f8b45b0514610ccd578063fbc10c5514610cf85761035b565b8063e158633814610bfa578063e2f4560514610c23578063f11a24d314610c4e5761035b565b8063c8c8ebe4116100d1578063c8c8ebe414610b2a578063d257b34f14610b55578063d85ba06314610b92578063dd62ed3e14610bbd5761035b565b8063c024666814610aaf578063c17b5b8c14610ad8578063c18bc19514610b015761035b565b80639c3b4fdc11610164578063a457c2d71161013e578063a457c2d7146109cd578063a9059cbb14610a0a578063b62496f514610a47578063bbc0c74214610a845761035b565b80639c3b4fdc1461094c5780639fccce3214610977578063a0d82dc5146109a25761035b565b806392136913116101a057806392136913146108a4578063924de9b7146108cf57806395d89b41146108f85780639a7a23d6146109235761035b565b80638a8c523c146108375780638da5cb5b1461084e5780638ea5220f146108795761035b565b80634a62bb65116102a057806370a082311161023e5780637571336a116102185780637571336a1461078f57806375f0a874146107b85780637bce5a04146107e35780638095d5641461080e5761035b565b806370a0823114610710578063715018a61461074d578063751039fc146107645761035b565b80636303516c1161027a5780636303516c1461066657806367243482146106915780636a486a8e146106ba5780636ddd1713146106e55761035b565b80634a62bb65146105d55780634a8483ed146106005780634fbee193146106295761035b565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f83514610517578063313ce56714610542578063395093511461056d57806349bd5a5e146105aa5761035b565b80631f3fed8f14610486578063203e727e146104b157806323b872dd146104da5761035b565b806306fdde0314610360578063095ea7b31461038b57806310d5de53146103c85780631694505e1461040557806318160ddd146104305780631a8145bb1461045b5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d21565b6040516103829190613c4d565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613d17565b610db3565b6040516103bf9190613d72565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613d8d565b610dd1565b6040516103fc9190613d72565b60405180910390f35b34801561041157600080fd5b5061041a610df1565b6040516104279190613e19565b60405180910390f35b34801561043c57600080fd5b50610445610e15565b6040516104529190613e43565b60405180910390f35b34801561046757600080fd5b50610470610e1f565b60405161047d9190613e43565b60405180910390f35b34801561049257600080fd5b5061049b610e25565b6040516104a89190613e43565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d39190613e5e565b610e2b565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190613e8b565b610f3a565b60405161050e9190613d72565b60405180910390f35b34801561052357600080fd5b5061052c611032565b6040516105399190613eed565b60405180910390f35b34801561054e57600080fd5b50610557611038565b6040516105649190613f24565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f9190613d17565b611041565b6040516105a19190613d72565b60405180910390f35b3480156105b657600080fd5b506105bf6110ed565b6040516105cc9190613eed565b60405180910390f35b3480156105e157600080fd5b506105ea611111565b6040516105f79190613d72565b60405180910390f35b34801561060c57600080fd5b5061062760048036038101906106229190613d8d565b611124565b005b34801561063557600080fd5b50610650600480360381019061064b9190613d8d565b611260565b60405161065d9190613d72565b60405180910390f35b34801561067257600080fd5b5061067b6112b6565b6040516106889190613eed565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b3919061414a565b6112dc565b005b3480156106c657600080fd5b506106cf6113ff565b6040516106dc9190613e43565b60405180910390f35b3480156106f157600080fd5b506106fa611405565b6040516107079190613d72565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613d8d565b611418565b6040516107449190613e43565b60405180910390f35b34801561075957600080fd5b50610762611460565b005b34801561077057600080fd5b506107796114e8565b6040516107869190613d72565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b191906141ee565b6115b4565b005b3480156107c457600080fd5b506107cd61168b565b6040516107da9190613eed565b60405180910390f35b3480156107ef57600080fd5b506107f86116b1565b6040516108059190613e43565b60405180910390f35b34801561081a57600080fd5b506108356004803603810190610830919061422e565b6116b7565b005b34801561084357600080fd5b5061084c6117b6565b005b34801561085a57600080fd5b5061086361186a565b6040516108709190613eed565b60405180910390f35b34801561088557600080fd5b5061088e611894565b60405161089b9190613eed565b60405180910390f35b3480156108b057600080fd5b506108b96118ba565b6040516108c69190613e43565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f19190614281565b6118c0565b005b34801561090457600080fd5b5061090d611959565b60405161091a9190613c4d565b60405180910390f35b34801561092f57600080fd5b5061094a600480360381019061094591906141ee565b6119eb565b005b34801561095857600080fd5b50610961611b03565b60405161096e9190613e43565b60405180910390f35b34801561098357600080fd5b5061098c611b09565b6040516109999190613e43565b60405180910390f35b3480156109ae57600080fd5b506109b7611b0f565b6040516109c49190613e43565b60405180910390f35b3480156109d957600080fd5b506109f460048036038101906109ef9190613d17565b611b15565b604051610a019190613d72565b60405180910390f35b348015610a1657600080fd5b50610a316004803603810190610a2c9190613d17565b611c00565b604051610a3e9190613d72565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a699190613d8d565b611c1e565b604051610a7b9190613d72565b60405180910390f35b348015610a9057600080fd5b50610a99611c3e565b604051610aa69190613d72565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad191906141ee565b611c51565b005b348015610ae457600080fd5b50610aff6004803603810190610afa919061422e565b611d76565b005b348015610b0d57600080fd5b50610b286004803603810190610b239190613e5e565b611e75565b005b348015610b3657600080fd5b50610b3f611f84565b604051610b4c9190613e43565b60405180910390f35b348015610b6157600080fd5b50610b7c6004803603810190610b779190613e5e565b611f8a565b604051610b899190613d72565b60405180910390f35b348015610b9e57600080fd5b50610ba76120df565b604051610bb49190613e43565b60405180910390f35b348015610bc957600080fd5b50610be46004803603810190610bdf91906142ae565b6120e5565b604051610bf19190613e43565b60405180910390f35b348015610c0657600080fd5b50610c216004803603810190610c1c9190613d8d565b61216c565b005b348015610c2f57600080fd5b50610c386122a8565b604051610c459190613e43565b60405180910390f35b348015610c5a57600080fd5b50610c636122ae565b604051610c709190613e43565b60405180910390f35b348015610c8557600080fd5b50610ca06004803603810190610c9b9190613d8d565b6122b4565b005b348015610cae57600080fd5b50610cb76123ab565b604051610cc49190613e43565b60405180910390f35b348015610cd957600080fd5b50610ce26123b1565b604051610cef9190613e43565b60405180910390f35b348015610d0457600080fd5b50610d1f6004803603810190610d1a9190613d8d565b6123b7565b005b606060038054610d309061431d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5c9061431d565b8015610da95780601f10610d7e57610100808354040283529160200191610da9565b820191906000526020600020905b815481529060010190602001808311610d8c57829003601f168201915b5050505050905090565b6000610dc7610dc06124f3565b84846124fb565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60165481565b60155481565b610e336124f3565b73ffffffffffffffffffffffffffffffffffffffff16610e5161186a565b73ffffffffffffffffffffffffffffffffffffffff1614610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e9061439a565b60405180910390fd5b670de0b6b3a76400006103e86001610ebd610e15565b610ec791906143e9565b610ed1919061445a565b610edb919061445a565b811015610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f14906144fd565b60405180910390fd5b670de0b6b3a764000081610f3191906143e9565b60098190555050565b6000610f478484846126c4565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f926124f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611012576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110099061458f565b60405180910390fd5b6110268561101e6124f3565b8584036124fb565b60019150509392505050565b61dead81565b60006012905090565b60006110e361104e6124f3565b84846001600061105c6124f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110de91906145af565b6124fb565b6001905092915050565b7f000000000000000000000000405b9ea2a8f77ae5908a420f764621b12e5a83d881565b600c60009054906101000a900460ff1681565b61112c6124f3565b73ffffffffffffffffffffffffffffffffffffffff1661114a61186a565b73ffffffffffffffffffffffffffffffffffffffff16146111a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111979061439a565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112e46124f3565b73ffffffffffffffffffffffffffffffffffffffff1661130261186a565b73ffffffffffffffffffffffffffffffffffffffff1614611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f9061439a565b60405180910390fd5b805182511461139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390614655565b60405180910390fd5b60005b82518110156113fa576113e7338483815181106113bf576113be614675565b5b60200260200101518484815181106113da576113d9614675565b5b6020026020010151613193565b80806113f2906146a4565b91505061139f565b505050565b60115481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114686124f3565b73ffffffffffffffffffffffffffffffffffffffff1661148661186a565b73ffffffffffffffffffffffffffffffffffffffff16146114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d39061439a565b60405180910390fd5b6114e66000613412565b565b60006114f26124f3565b73ffffffffffffffffffffffffffffffffffffffff1661151061186a565b73ffffffffffffffffffffffffffffffffffffffff1614611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d9061439a565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b6115bc6124f3565b73ffffffffffffffffffffffffffffffffffffffff166115da61186a565b73ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116279061439a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6116bf6124f3565b73ffffffffffffffffffffffffffffffffffffffff166116dd61186a565b73ffffffffffffffffffffffffffffffffffffffff1614611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a9061439a565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e5461175b91906145af565b61176591906145af565b600d819055506005600d5411156117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a89061475e565b60405180910390fd5b505050565b6117be6124f3565b73ffffffffffffffffffffffffffffffffffffffff166117dc61186a565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118299061439a565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6118c86124f3565b73ffffffffffffffffffffffffffffffffffffffff166118e661186a565b73ffffffffffffffffffffffffffffffffffffffff161461193c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119339061439a565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546119689061431d565b80601f01602080910402602001604051908101604052809291908181526020018280546119949061431d565b80156119e15780601f106119b6576101008083540402835291602001916119e1565b820191906000526020600020905b8154815290600101906020018083116119c457829003601f168201915b5050505050905090565b6119f36124f3565b73ffffffffffffffffffffffffffffffffffffffff16611a1161186a565b73ffffffffffffffffffffffffffffffffffffffff1614611a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5e9061439a565b60405180910390fd5b7f000000000000000000000000405b9ea2a8f77ae5908a420f764621b12e5a83d873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec906147f0565b60405180910390fd5b611aff82826134d8565b5050565b60105481565b60175481565b60145481565b60008060016000611b246124f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890614882565b60405180910390fd5b611bf5611bec6124f3565b858584036124fb565b600191505092915050565b6000611c14611c0d6124f3565b84846126c4565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611c596124f3565b73ffffffffffffffffffffffffffffffffffffffff16611c7761186a565b73ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc49061439a565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d6a9190613d72565b60405180910390a25050565b611d7e6124f3565b73ffffffffffffffffffffffffffffffffffffffff16611d9c61186a565b73ffffffffffffffffffffffffffffffffffffffff1614611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de99061439a565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611e1a91906145af565b611e2491906145af565b601181905550600a6011541115611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6790614914565b60405180910390fd5b505050565b611e7d6124f3565b73ffffffffffffffffffffffffffffffffffffffff16611e9b61186a565b73ffffffffffffffffffffffffffffffffffffffff1614611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee89061439a565b60405180910390fd5b670de0b6b3a76400006103e86005611f07610e15565b611f1191906143e9565b611f1b919061445a565b611f25919061445a565b811015611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e906149a6565b60405180910390fd5b670de0b6b3a764000081611f7b91906143e9565b600b8190555050565b60095481565b6000611f946124f3565b73ffffffffffffffffffffffffffffffffffffffff16611fb261186a565b73ffffffffffffffffffffffffffffffffffffffff1614612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff9061439a565b60405180910390fd5b620186a06001612016610e15565b61202091906143e9565b61202a919061445a565b82101561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614a38565b60405180910390fd5b6103e86005612079610e15565b61208391906143e9565b61208d919061445a565b8211156120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c690614aca565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121746124f3565b73ffffffffffffffffffffffffffffffffffffffff1661219261186a565b73ffffffffffffffffffffffffffffffffffffffff16146121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df9061439a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600f5481565b6122bc6124f3565b73ffffffffffffffffffffffffffffffffffffffff166122da61186a565b73ffffffffffffffffffffffffffffffffffffffff1614612330576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123279061439a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361239f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239690614b5c565b60405180910390fd5b6123a881613412565b50565b60135481565b600b5481565b6123bf6124f3565b73ffffffffffffffffffffffffffffffffffffffff166123dd61186a565b73ffffffffffffffffffffffffffffffffffffffff1614612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a9061439a565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361256a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256190614bee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d090614c80565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b79190613e43565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90614d12565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279990614da4565b60405180910390fd5b600081036127bb576127b683836000613193565b61318e565b600c60009054906101000a900460ff1615612cb6576127d861186a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612846575061281661186a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561287f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128d25750600560149054906101000a900460ff16155b15612cb557600c60019054906101000a900460ff166129cc57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061298c5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6129cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c290614e10565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a6f5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b1657600954811115612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab090614ea2565b60405180910390fd5b600b54612ac583611418565b82612ad091906145af565b1115612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0890614f0e565b60405180910390fd5b612cb4565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bb95750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0857600954811115612c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfa90614fa0565b60405180910390fd5b612cb3565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cb257600b54612c6583611418565b82612c7091906145af565b1115612cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca890614f0e565b60405180910390fd5b5b5b5b5b5b6000612cc130611418565b90506000600a548210159050808015612ce65750600c60029054906101000a900460ff165b8015612cff5750600560149054906101000a900460ff16155b8015612d555750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dab5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e015750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e45576001600560146101000a81548160ff021916908315150217905550612e29613579565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612efb5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f0557600090505b6000811561317e57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6857506000601154115b1561303557612f956064612f876011548861383890919063ffffffff16565b61384e90919063ffffffff16565b905060115460135482612fa891906143e9565b612fb2919061445a565b60166000828254612fc391906145af565b9250508190555060115460145482612fdb91906143e9565b612fe5919061445a565b60176000828254612ff691906145af565b925050819055506011546012548261300e91906143e9565b613018919061445a565b6015600082825461302991906145af565b9250508190555061315a565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561309057506000600d54115b15613159576130bd60646130af600d548861383890919063ffffffff16565b61384e90919063ffffffff16565b9050600d54600f54826130d091906143e9565b6130da919061445a565b601660008282546130eb91906145af565b92505081905550600d546010548261310391906143e9565b61310d919061445a565b6017600082825461311e91906145af565b92505081905550600d54600e548261313691906143e9565b613140919061445a565b6015600082825461315191906145af565b925050819055505b5b600081111561316f5761316e873083613193565b5b808561317b9190614fc0565b94505b613189878787613193565b505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f990614d12565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326890614da4565b60405180910390fd5b61327c838383613864565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f990615066565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339591906145af565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133f99190613e43565b60405180910390a361340c848484613869565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600061358430611418565b9050600060175460155460165461359b91906145af565b6135a591906145af565b90506000808314806135b75750600082145b156135c457505050613836565b6000600283601654866135d791906143e9565b6135e1919061445a565b6135eb919061445a565b90506000613602828661386e90919063ffffffff16565b9050600047905061361282613884565b6000613627824761386e90919063ffffffff16565b90506000613652876136446015548561383890919063ffffffff16565b61384e90919063ffffffff16565b9050600061367d8861366f6017548661383890919063ffffffff16565b61384e90919063ffffffff16565b9050600081838561368e9190614fc0565b6136989190614fc0565b9050600060168190555060006015819055506000601781905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516136f8906150b7565b60006040518083038185875af1925050503d8060008114613735576040519150601f19603f3d011682016040523d82523d6000602084013e61373a565b606091505b5050809850506000871180156137505750600081115b1561379d5761375f8782613ac1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601654604051613794939291906150cc565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516137e3906150b7565b60006040518083038185875af1925050503d8060008114613820576040519150601f19603f3d011682016040523d82523d6000602084013e613825565b606091505b505080985050505050505050505050505b565b6000818361384691906143e9565b905092915050565b6000818361385c919061445a565b905092915050565b505050565b505050565b6000818361387c9190614fc0565b905092915050565b6000600267ffffffffffffffff8111156138a1576138a0613f44565b5b6040519080825280602002602001820160405280156138cf5781602001602082028036833780820191505090505b50905030816000815181106138e7576138e6614675565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561398c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b09190615118565b816001815181106139c4576139c3614675565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a29307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124fb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a8b95949392919061523e565b600060405180830381600087803b158015613aa557600080fd5b505af1158015613ab9573d6000803e3d6000fd5b505050505050565b613aec307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124fb565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b7396959493929190615298565b60606040518083038185885af1158015613b91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bb6919061530e565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bf7578082015181840152602081019050613bdc565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c1f82613bbd565b613c298185613bc8565b9350613c39818560208601613bd9565b613c4281613c03565b840191505092915050565b60006020820190508181036000830152613c678184613c14565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cae82613c83565b9050919050565b613cbe81613ca3565b8114613cc957600080fd5b50565b600081359050613cdb81613cb5565b92915050565b6000819050919050565b613cf481613ce1565b8114613cff57600080fd5b50565b600081359050613d1181613ceb565b92915050565b60008060408385031215613d2e57613d2d613c79565b5b6000613d3c85828601613ccc565b9250506020613d4d85828601613d02565b9150509250929050565b60008115159050919050565b613d6c81613d57565b82525050565b6000602082019050613d876000830184613d63565b92915050565b600060208284031215613da357613da2613c79565b5b6000613db184828501613ccc565b91505092915050565b6000819050919050565b6000613ddf613dda613dd584613c83565b613dba565b613c83565b9050919050565b6000613df182613dc4565b9050919050565b6000613e0382613de6565b9050919050565b613e1381613df8565b82525050565b6000602082019050613e2e6000830184613e0a565b92915050565b613e3d81613ce1565b82525050565b6000602082019050613e586000830184613e34565b92915050565b600060208284031215613e7457613e73613c79565b5b6000613e8284828501613d02565b91505092915050565b600080600060608486031215613ea457613ea3613c79565b5b6000613eb286828701613ccc565b9350506020613ec386828701613ccc565b9250506040613ed486828701613d02565b9150509250925092565b613ee781613ca3565b82525050565b6000602082019050613f026000830184613ede565b92915050565b600060ff82169050919050565b613f1e81613f08565b82525050565b6000602082019050613f396000830184613f15565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613f7c82613c03565b810181811067ffffffffffffffff82111715613f9b57613f9a613f44565b5b80604052505050565b6000613fae613c6f565b9050613fba8282613f73565b919050565b600067ffffffffffffffff821115613fda57613fd9613f44565b5b602082029050602081019050919050565b600080fd5b6000614003613ffe84613fbf565b613fa4565b9050808382526020820190506020840283018581111561402657614025613feb565b5b835b8181101561404f578061403b8882613ccc565b845260208401935050602081019050614028565b5050509392505050565b600082601f83011261406e5761406d613f3f565b5b813561407e848260208601613ff0565b91505092915050565b600067ffffffffffffffff8211156140a2576140a1613f44565b5b602082029050602081019050919050565b60006140c66140c184614087565b613fa4565b905080838252602082019050602084028301858111156140e9576140e8613feb565b5b835b8181101561411257806140fe8882613d02565b8452602084019350506020810190506140eb565b5050509392505050565b600082601f83011261413157614130613f3f565b5b81356141418482602086016140b3565b91505092915050565b6000806040838503121561416157614160613c79565b5b600083013567ffffffffffffffff81111561417f5761417e613c7e565b5b61418b85828601614059565b925050602083013567ffffffffffffffff8111156141ac576141ab613c7e565b5b6141b88582860161411c565b9150509250929050565b6141cb81613d57565b81146141d657600080fd5b50565b6000813590506141e8816141c2565b92915050565b6000806040838503121561420557614204613c79565b5b600061421385828601613ccc565b9250506020614224858286016141d9565b9150509250929050565b60008060006060848603121561424757614246613c79565b5b600061425586828701613d02565b935050602061426686828701613d02565b925050604061427786828701613d02565b9150509250925092565b60006020828403121561429757614296613c79565b5b60006142a5848285016141d9565b91505092915050565b600080604083850312156142c5576142c4613c79565b5b60006142d385828601613ccc565b92505060206142e485828601613ccc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061433557607f821691505b602082108103614348576143476142ee565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614384602083613bc8565b915061438f8261434e565b602082019050919050565b600060208201905081810360008301526143b381614377565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143f482613ce1565b91506143ff83613ce1565b925082820261440d81613ce1565b91508282048414831517614424576144236143ba565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061446582613ce1565b915061447083613ce1565b9250826144805761447f61442b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006144e7602f83613bc8565b91506144f28261448b565b604082019050919050565b60006020820190508181036000830152614516816144da565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614579602883613bc8565b91506145848261451d565b604082019050919050565b600060208201905081810360008301526145a88161456c565b9050919050565b60006145ba82613ce1565b91506145c583613ce1565b92508282019050808211156145dd576145dc6143ba565b5b92915050565b7f726563697069656e747320616e6420616d6f756e7473206d757374206265207360008201527f616d65206c656e67746800000000000000000000000000000000000000000000602082015250565b600061463f602a83613bc8565b915061464a826145e3565b604082019050919050565b6000602082019050818103600083015261466e81614632565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006146af82613ce1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036146e1576146e06143ba565b5b600182019050919050565b7f42757920666565732063616e6e6f7420626520686967686572207468616e203560008201527f25206f66207472616e73616374696f6e2e000000000000000000000000000000602082015250565b6000614748603183613bc8565b9150614753826146ec565b604082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147da603983613bc8565b91506147e58261477e565b604082019050919050565b60006020820190508181036000830152614809816147cd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061486c602583613bc8565b915061487782614810565b604082019050919050565b6000602082019050818103600083015261489b8161485f565b9050919050565b7f53656c6c20666565732063616e6e6f7420626520686967686572207468616e2060008201527f313025206f66207472616e73616374696f6e2e00000000000000000000000000602082015250565b60006148fe603383613bc8565b9150614909826148a2565b604082019050919050565b6000602082019050818103600083015261492d816148f1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614990602483613bc8565b915061499b82614934565b604082019050919050565b600060208201905081810360008301526149bf81614983565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a22603583613bc8565b9150614a2d826149c6565b604082019050919050565b60006020820190508181036000830152614a5181614a15565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ab4603483613bc8565b9150614abf82614a58565b604082019050919050565b60006020820190508181036000830152614ae381614aa7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b46602683613bc8565b9150614b5182614aea565b604082019050919050565b60006020820190508181036000830152614b7581614b39565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bd8602483613bc8565b9150614be382614b7c565b604082019050919050565b60006020820190508181036000830152614c0781614bcb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c6a602283613bc8565b9150614c7582614c0e565b604082019050919050565b60006020820190508181036000830152614c9981614c5d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cfc602583613bc8565b9150614d0782614ca0565b604082019050919050565b60006020820190508181036000830152614d2b81614cef565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d8e602383613bc8565b9150614d9982614d32565b604082019050919050565b60006020820190508181036000830152614dbd81614d81565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614dfa601683613bc8565b9150614e0582614dc4565b602082019050919050565b60006020820190508181036000830152614e2981614ded565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614e8c603583613bc8565b9150614e9782614e30565b604082019050919050565b60006020820190508181036000830152614ebb81614e7f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614ef8601383613bc8565b9150614f0382614ec2565b602082019050919050565b60006020820190508181036000830152614f2781614eeb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f8a603683613bc8565b9150614f9582614f2e565b604082019050919050565b60006020820190508181036000830152614fb981614f7d565b9050919050565b6000614fcb82613ce1565b9150614fd683613ce1565b9250828203905081811115614fee57614fed6143ba565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615050602683613bc8565b915061505b82614ff4565b604082019050919050565b6000602082019050818103600083015261507f81615043565b9050919050565b600081905092915050565b50565b60006150a1600083615086565b91506150ac82615091565b600082019050919050565b60006150c282615094565b9150819050919050565b60006060820190506150e16000830186613e34565b6150ee6020830185613e34565b6150fb6040830184613e34565b949350505050565b60008151905061511281613cb5565b92915050565b60006020828403121561512e5761512d613c79565b5b600061513c84828501615103565b91505092915050565b6000819050919050565b600061516a61516561516084615145565b613dba565b613ce1565b9050919050565b61517a8161514f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151b581613ca3565b82525050565b60006151c783836151ac565b60208301905092915050565b6000602082019050919050565b60006151eb82615180565b6151f5818561518b565b93506152008361519c565b8060005b8381101561523157815161521888826151bb565b9750615223836151d3565b925050600181019050615204565b5085935050505092915050565b600060a0820190506152536000830188613e34565b6152606020830187615171565b818103604083015261527281866151e0565b90506152816060830185613ede565b61528e6080830184613e34565b9695505050505050565b600060c0820190506152ad6000830189613ede565b6152ba6020830188613e34565b6152c76040830187615171565b6152d46060830186615171565b6152e16080830185613ede565b6152ee60a0830184613e34565b979650505050505050565b60008151905061530881613ceb565b92915050565b60008060006060848603121561532757615326613c79565b5b6000615335868287016152f9565b9350506020615346868287016152f9565b9250506040615357868287016152f9565b915050925092509256fea26469706673582212204b3b380d2c199992f8f52a19e06e871041d9615b31b893cef2eee14d9abbe8de64736f6c63430008130033

Deployed Bytecode Sourcemap

12548:15876:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2781:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3761:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13696:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12624:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3102:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13480:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13440;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18008:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3963:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12727:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3001:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4500:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12682:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13034:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20578:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21148:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12887:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28020:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13295:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13114:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3218:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;786:103;;;;;;;;;;;;;:::i;:::-;;17297:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18559:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12819:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13188;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18932:459;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17133:112;;;;;;;;;;;;;:::i;:::-;;563:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12856:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13330:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18824:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2889:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20068:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13262:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13520:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13406:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4798:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3369:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13917:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13074:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19878:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19399:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18293:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12919:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17519:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13154:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3577:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20980:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12961:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13225:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;897:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13368:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13001:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20813:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2781:100;2835:13;2868:5;2861:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2781:100;:::o;3761:194::-;3869:4;3886:39;3895:12;:10;:12::i;:::-;3909:7;3918:6;3886:8;:39::i;:::-;3943:4;3936:11;;3761:194;;;;:::o;13696:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12624:51::-;;;:::o;3102:108::-;3163:7;3190:12;;3183:19;;3102:108;:::o;13480:33::-;;;;:::o;13440:::-;;;;:::o;18008:277::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18145:4:::1;18137;18132:1;18116:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18115:26;;;;:::i;:::-;18114:35;;;;:::i;:::-;18104:6;:45;;18082:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;18268:8;18258:6;:19;;;;:::i;:::-;18235:20;:42;;;;18008:277:::0;:::o;3963:529::-;4103:4;4120:36;4130:6;4138:9;4149:6;4120:9;:36::i;:::-;4169:24;4196:11;:19;4208:6;4196:19;;;;;;;;;;;;;;;:33;4216:12;:10;:12::i;:::-;4196:33;;;;;;;;;;;;;;;;4169:60;;4282:6;4262:16;:26;;4240:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4392:57;4401:6;4409:12;:10;:12::i;:::-;4442:6;4423:16;:25;4392:8;:57::i;:::-;4480:4;4473:11;;;3963:529;;;;;:::o;12727:53::-;12773:6;12727:53;:::o;3001:93::-;3059:5;3084:2;3077:9;;3001:93;:::o;4500:290::-;4613:4;4630:130;4653:12;:10;:12::i;:::-;4680:7;4739:10;4702:11;:25;4714:12;:10;:12::i;:::-;4702:25;;;;;;;;;;;;;;;:34;4728:7;4702:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4630:8;:130::i;:::-;4778:4;4771:11;;4500:290;;;;:::o;12682:38::-;;;:::o;13034:33::-;;;;;;;;;;;;;:::o;20578:227::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20734:15:::1;;;;;;;;;;;20691:59;;20714:18;20691:59;;;;;;;;;;;;20779:18;20761:15;;:36;;;;;;;;;;;;;;;;;;20578:227:::0;:::o;21148:126::-;21214:4;21238:19;:28;21258:7;21238:28;;;;;;;;;;;;;;;;;;;;;;;;;21231:35;;21148:126;;;:::o;12887:23::-;;;;;;;;;;;;;:::o;28020:401::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28190:7:::1;:14;28169:10;:17;:35;28147:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;28290:9;28285:129;28309:10;:17;28305:1;:21;28285:129;;;28348:54;28364:10;28376;28387:1;28376:13;;;;;;;;:::i;:::-;;;;;;;;28391:7;28399:1;28391:10;;;;;;;;:::i;:::-;;;;;;;;28348:15;:54::i;:::-;28328:3;;;;;:::i;:::-;;;;28285:129;;;;28020:401:::0;;:::o;13295:28::-;;;;:::o;13114:31::-;;;;;;;;;;;;;:::o;3218:143::-;3308:7;3335:9;:18;3345:7;3335:18;;;;;;;;;;;;;;;;3328:25;;3218:143;;;:::o;786:103::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;851:30:::1;878:1;851:18;:30::i;:::-;786:103::o:0;17297:152::-;17349:4;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17383:5:::1;17366:14;;:22;;;;;;;;;;;;;;;;;;17404:15;;;;;;;;;;17437:4;17430:11;;17297:152:::0;:::o;18559:169::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18716:4:::1;18674:31;:39;18706:6;18674:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18559:169:::0;;:::o;12819:30::-;;;;;;;;;;;;;:::o;13188:::-;;;;:::o;18932:459::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19100:13:::1;19082:15;:31;;;;19142:13;19124:15;:31;;;;19178:7;19166:9;:19;;;;19247:9;;19229:15;;19211;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;19196:12;:60;;;;19305:1;19289:12;;:17;;19267:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;18932:459:::0;;;:::o;17133:112::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17204:4:::1;17188:13;;:20;;;;;;;;;;;;;;;;;;17233:4;17219:11;;:18;;;;;;;;;;;;;;;;;;17133:112::o:0;563:87::-;609:7;636:6;;;;;;;;;;;629:13;;563:87;:::o;12856:24::-;;;;;;;;;;;;;:::o;13330:31::-;;;;:::o;18824:100::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18909:7:::1;18895:11;;:21;;;;;;;;;;;;;;;;;;18824:100:::0;:::o;2889:104::-;2945:13;2978:7;2971:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2889:104;:::o;20068:306::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20214:13:::1;20206:21;;:4;:21;;::::0;20184:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20325:41;20354:4;20360:5;20325:28;:41::i;:::-;20068:306:::0;;:::o;13262:24::-;;;;:::o;13520:27::-;;;;:::o;13406:25::-;;;;:::o;4798:475::-;4916:4;4933:24;4960:11;:25;4972:12;:10;:12::i;:::-;4960:25;;;;;;;;;;;;;;;:34;4986:7;4960:34;;;;;;;;;;;;;;;;4933:61;;5047:15;5027:16;:35;;5005:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5163:67;5172:12;:10;:12::i;:::-;5186:7;5214:15;5195:16;:34;5163:8;:67::i;:::-;5261:4;5254:11;;;4798:475;;;;:::o;3369:200::-;3480:4;3497:42;3507:12;:10;:12::i;:::-;3521:9;3532:6;3497:9;:42::i;:::-;3557:4;3550:11;;3369:200;;;;:::o;13917:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;13074:33::-;;;;;;;;;;;;;:::o;19878:182::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19994:8:::1;19963:19;:28;19983:7;19963:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20034:7;20018:34;;;20043:8;20018:34;;;;;;:::i;:::-;;;;;;;;19878:182:::0;;:::o;19399:471::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19569:13:::1;19550:16;:32;;;;19612:13;19593:16;:32;;;;19649:7;19636:10;:20;;;;19721:10;;19702:16;;19683;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;19667:13;:64;;;;19781:2;19764:13;;:19;;19742:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;19399:471:::0;;;:::o;18293:258::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18433:4:::1;18425;18420:1;18404:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18403:26;;;;:::i;:::-;18402:35;;;;:::i;:::-;18392:6;:45;;18370:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;18534:8;18524:6;:19;;;;:::i;:::-;18512:9;:31;;;;18293:258:::0;:::o;12919:35::-;;;;:::o;17519:481::-;17616:4;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17690:6:::1;17685:1;17669:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17668:28;;;;:::i;:::-;17655:9;:41;;17633:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;17845:4;17840:1;17824:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17823:26;;;;:::i;:::-;17810:9;:39;;17788:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;17961:9;17940:18;:30;;;;17988:4;17981:11;;17519:481:::0;;;:::o;13154:27::-;;;;:::o;3577:176::-;3691:7;3718:11;:18;3730:5;3718:18;;;;;;;;;;;;;;;:27;3737:7;3718:27;;;;;;;;;;;;;;;;3711:34;;3577:176;;;;:::o;20980:160::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21090:9:::1;;;;;;;;;;;21062:38;;21079:9;21062:38;;;;;;;;;;;;21123:9;21111;;:21;;;;;;;;;;;;;;;;;;20980:160:::0;:::o;12961:33::-;;;;:::o;13225:30::-;;;;:::o;897:238::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1020:1:::1;1000:22;;:8;:22;;::::0;978:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1099:28;1118:8;1099:18;:28::i;:::-;897:238:::0;:::o;13368:31::-;;;;:::o;13001:24::-;;;;:::o;20813:159::-;709:12;:10;:12::i;:::-;698:23;;:7;:5;:7::i;:::-;:23;;;690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20922:8:::1;;;;;;;;;;;20893:38;;20909:11;20893:38;;;;;;;;;;;;20953:11;20942:8;;:22;;;;;;;;;;;;;;;;;;20813:159:::0;:::o;193:98::-;246:7;273:10;266:17;;193:98;:::o;6466:380::-;6619:1;6602:19;;:5;:19;;;6594:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6700:1;6681:21;;:7;:21;;;6673:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6784:6;6754:11;:18;6766:5;6754:18;;;;;;;;;;;;;;;:27;6773:7;6754:27;;;;;;;;;;;;;;;:36;;;;6822:7;6806:32;;6815:5;6806:32;;;6831:6;6806:32;;;;;;:::i;:::-;;;;;;;;6466:380;;;:::o;21332:3924::-;21480:1;21464:18;;:4;:18;;;21456:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21557:1;21543:16;;:2;:16;;;21535:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21626:1;21616:6;:11;21612:93;;21644:28;21660:4;21666:2;21670:1;21644:15;:28::i;:::-;21687:7;;21612:93;21721:14;;;;;;;;;;;21717:1694;;;21782:7;:5;:7::i;:::-;21774:15;;:4;:15;;;;:49;;;;;21816:7;:5;:7::i;:::-;21810:13;;:2;:13;;;;21774:49;:86;;;;;21858:1;21844:16;;:2;:16;;;;21774:86;:128;;;;;21895:6;21881:21;;:2;:21;;;;21774:128;:158;;;;;21924:8;;;;;;;;;;;21923:9;21774:158;21752:1648;;;21972:13;;;;;;;;;;;21967:223;;22044:19;:25;22064:4;22044:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22073:19;:23;22093:2;22073:23;;;;;;;;;;;;;;;;;;;;;;;;;22044:52;22010:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;21967:223;22264:25;:31;22290:4;22264:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22321:31;:35;22353:2;22321:35;;;;;;;;;;;;;;;;;;;;;;;;;22320:36;22264:92;22238:1147;;;22443:20;;22433:6;:30;;22399:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;22651:9;;22634:13;22644:2;22634:9;:13::i;:::-;22625:6;:22;;;;:::i;:::-;:35;;22591:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22238:1147;;;22829:25;:29;22855:2;22829:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22884:31;:37;22916:4;22884:37;;;;;;;;;;;;;;;;;;;;;;;;;22883:38;22829:92;22803:582;;;23008:20;;22998:6;:30;;22964:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;22803:582;;;23165:31;:35;23197:2;23165:35;;;;;;;;;;;;;;;;;;;;;;;;;23160:225;;23285:9;;23268:13;23278:2;23268:9;:13::i;:::-;23259:6;:22;;;;:::i;:::-;:35;;23225:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23160:225;22803:582;22238:1147;21752:1648;21717:1694;23423:28;23454:24;23472:4;23454:9;:24::i;:::-;23423:55;;23491:12;23530:18;;23506:20;:42;;23491:57;;23579:7;:35;;;;;23603:11;;;;;;;;;;;23579:35;:61;;;;;23632:8;;;;;;;;;;;23631:9;23579:61;:110;;;;;23658:25;:31;23684:4;23658:31;;;;;;;;;;;;;;;;;;;;;;;;;23657:32;23579:110;:153;;;;;23707:19;:25;23727:4;23707:25;;;;;;;;;;;;;;;;;;;;;;;;;23706:26;23579:153;:194;;;;;23750:19;:23;23770:2;23750:23;;;;;;;;;;;;;;;;;;;;;;;;;23749:24;23579:194;23561:326;;;23811:4;23800:8;;:15;;;;;;;;;;;;;;;;;;23832:10;:8;:10::i;:::-;23870:5;23859:8;;:16;;;;;;;;;;;;;;;;;;23561:326;23899:12;23915:8;;;;;;;;;;;23914:9;23899:24;;24025:19;:25;24045:4;24025:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24054:19;:23;24074:2;24054:23;;;;;;;;;;;;;;;;;;;;;;;;;24025:52;24021:100;;;24104:5;24094:15;;24021:100;24133:12;24238:7;24234:969;;;24290:25;:29;24316:2;24290:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24339:1;24323:13;;:17;24290:50;24286:768;;;24368:34;24398:3;24368:25;24379:13;;24368:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;24361:41;;24471:13;;24451:16;;24444:4;:23;;;;:::i;:::-;24443:41;;;;:::i;:::-;24421:18;;:63;;;;;;;:::i;:::-;;;;;;;;24541:13;;24527:10;;24520:4;:17;;;;:::i;:::-;24519:35;;;;:::i;:::-;24503:12;;:51;;;;;;;:::i;:::-;;;;;;;;24623:13;;24603:16;;24596:4;:23;;;;:::i;:::-;24595:41;;;;:::i;:::-;24573:18;;:63;;;;;;;:::i;:::-;;;;;;;;24286:768;;;24698:25;:31;24724:4;24698:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24748:1;24733:12;;:16;24698:51;24694:360;;;24777:33;24806:3;24777:24;24788:12;;24777:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24770:40;;24878:12;;24859:15;;24852:4;:22;;;;:::i;:::-;24851:39;;;;:::i;:::-;24829:18;;:61;;;;;;;:::i;:::-;;;;;;;;24946:12;;24933:9;;24926:4;:16;;;;:::i;:::-;24925:33;;;;:::i;:::-;24909:12;;:49;;;;;;;:::i;:::-;;;;;;;;25026:12;;25007:15;;25000:4;:22;;;;:::i;:::-;24999:39;;;;:::i;:::-;24977:18;;:61;;;;;;;:::i;:::-;;;;;;;;24694:360;24286:768;25081:1;25074:4;:8;25070:91;;;25103:42;25119:4;25133;25140;25103:15;:42::i;:::-;25070:91;25187:4;25177:14;;;;;:::i;:::-;;;24234:969;25215:33;25231:4;25237:2;25241:6;25215:15;:33::i;:::-;21445:3811;;;;21332:3924;;;;:::o;5281:770::-;5439:1;5421:20;;:6;:20;;;5413:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5523:1;5502:23;;:9;:23;;;5494:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5578:47;5599:6;5607:9;5618:6;5578:20;:47::i;:::-;5638:21;5662:9;:17;5672:6;5662:17;;;;;;;;;;;;;;;;5638:41;;5729:6;5712:13;:23;;5690:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5873:6;5857:13;:22;5837:9;:17;5847:6;5837:17;;;;;;;;;;;;;;;:42;;;;5925:6;5901:9;:20;5911:9;5901:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5966:9;5949:35;;5958:6;5949:35;;;5977:6;5949:35;;;;;;:::i;:::-;;;;;;;;5997:46;6017:6;6025:9;6036:6;5997:19;:46::i;:::-;5402:649;5281:770;;;:::o;1143:191::-;1217:16;1236:6;;;;;;;;;;;1217:25;;1262:8;1253:6;;:17;;;;;;;;;;;;;;;;;;1317:8;1286:40;;1307:8;1286:40;;;;;;;;;;;;1206:128;1143:191;:::o;20382:188::-;20499:5;20465:25;:31;20491:4;20465:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20556:5;20522:40;;20550:4;20522:40;;;;;;;;;;;;20382:188;;:::o;26383:1629::-;26422:23;26448:24;26466:4;26448:9;:24::i;:::-;26422:50;;26483:25;26579:12;;26545:18;;26511;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26483:108;;26602:12;26650:1;26631:15;:20;:46;;;;26676:1;26655:17;:22;26631:46;26627:85;;;26694:7;;;;;26627:85;26773:23;26886:1;26853:17;26818:18;;26800:15;:36;;;;:::i;:::-;26799:71;;;;:::i;:::-;:88;;;;:::i;:::-;26773:114;;26898:26;26927:36;26947:15;26927;:19;;:36;;;;:::i;:::-;26898:65;;26976:25;27004:21;26976:49;;27038:36;27055:18;27038:16;:36::i;:::-;27087:18;27108:44;27134:17;27108:21;:25;;:44;;;;:::i;:::-;27087:65;;27165:23;27191:81;27244:17;27191:34;27206:18;;27191:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;27165:107;;27283:17;27303:51;27336:17;27303:28;27318:12;;27303:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;27283:71;;27367:23;27424:9;27406:15;27393:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;27367:66;;27467:1;27446:18;:22;;;;27500:1;27479:18;:22;;;;27527:1;27512:12;:16;;;;27563:9;;;;;;;;;;;27555:23;;27586:9;27555:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27541:59;;;;;27635:1;27617:15;:19;:42;;;;;27658:1;27640:15;:19;27617:42;27613:278;;;27676:46;27689:15;27706;27676:12;:46::i;:::-;27742:137;27775:18;27812:15;27846:18;;27742:137;;;;;;;;:::i;:::-;;;;;;;;27613:278;27925:15;;;;;;;;;;;27917:29;;27968:21;27917:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27903:101;;;;;26411:1601;;;;;;;;;;26383:1629;:::o;7248:98::-;7306:7;7337:1;7333;:5;;;;:::i;:::-;7326:12;;7248:98;;;;:::o;7354:::-;7412:7;7443:1;7439;:5;;;;:::i;:::-;7432:12;;7354:98;;;;:::o;6854:125::-;;;;:::o;6987:124::-;;;;:::o;7142:98::-;7200:7;7231:1;7227;:5;;;;:::i;:::-;7220:12;;7142:98;;;;:::o;25264:589::-;25390:21;25428:1;25414:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25390:40;;25459:4;25441;25446:1;25441:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25485:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25475:4;25480:1;25475:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25520:62;25537:4;25552:15;25570:11;25520:8;:62::i;:::-;25621:15;:66;;;25702:11;25728:1;25772:4;25799;25819:15;25621:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25319:534;25264:589;:::o;25861:514::-;26009:62;26026:4;26041:15;26059:11;26009:8;:62::i;:::-;26114:15;:31;;;26153:9;26186:4;26206:11;26232:1;26275;26318:8;;;;;;;;;;;26341:15;26114:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25861:514;;:::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:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:117::-;6962:1;6959;6952:12;6976:180;7024:77;7021:1;7014:88;7121:4;7118:1;7111:15;7145:4;7142:1;7135:15;7162:281;7245:27;7267:4;7245:27;:::i;:::-;7237:6;7233:40;7375:6;7363:10;7360:22;7339:18;7327:10;7324:34;7321:62;7318:88;;;7386:18;;:::i;:::-;7318:88;7426:10;7422:2;7415:22;7205:238;7162:281;;:::o;7449:129::-;7483:6;7510:20;;:::i;:::-;7500:30;;7539:33;7567:4;7559:6;7539:33;:::i;:::-;7449:129;;;:::o;7584:311::-;7661:4;7751:18;7743:6;7740:30;7737:56;;;7773:18;;:::i;:::-;7737:56;7823:4;7815:6;7811:17;7803:25;;7883:4;7877;7873:15;7865:23;;7584:311;;;:::o;7901:117::-;8010:1;8007;8000:12;8041:710;8137:5;8162:81;8178:64;8235:6;8178:64;:::i;:::-;8162:81;:::i;:::-;8153:90;;8263:5;8292:6;8285:5;8278:21;8326:4;8319:5;8315:16;8308:23;;8379:4;8371:6;8367:17;8359:6;8355:30;8408:3;8400:6;8397:15;8394:122;;;8427:79;;:::i;:::-;8394:122;8542:6;8525:220;8559:6;8554:3;8551:15;8525:220;;;8634:3;8663:37;8696:3;8684:10;8663:37;:::i;:::-;8658:3;8651:50;8730:4;8725:3;8721:14;8714:21;;8601:144;8585:4;8580:3;8576:14;8569:21;;8525:220;;;8529:21;8143:608;;8041:710;;;;;:::o;8774:370::-;8845:5;8894:3;8887:4;8879:6;8875:17;8871:27;8861:122;;8902:79;;:::i;:::-;8861:122;9019:6;9006:20;9044:94;9134:3;9126:6;9119:4;9111:6;9107:17;9044:94;:::i;:::-;9035:103;;8851:293;8774:370;;;;:::o;9150:311::-;9227:4;9317:18;9309:6;9306:30;9303:56;;;9339:18;;:::i;:::-;9303:56;9389:4;9381:6;9377:17;9369:25;;9449:4;9443;9439:15;9431:23;;9150:311;;;:::o;9484:710::-;9580:5;9605:81;9621:64;9678:6;9621:64;:::i;:::-;9605:81;:::i;:::-;9596:90;;9706:5;9735:6;9728:5;9721:21;9769:4;9762:5;9758:16;9751:23;;9822:4;9814:6;9810:17;9802:6;9798:30;9851:3;9843:6;9840:15;9837:122;;;9870:79;;:::i;:::-;9837:122;9985:6;9968:220;10002:6;9997:3;9994:15;9968:220;;;10077:3;10106:37;10139:3;10127:10;10106:37;:::i;:::-;10101:3;10094:50;10173:4;10168:3;10164:14;10157:21;;10044:144;10028:4;10023:3;10019:14;10012:21;;9968:220;;;9972:21;9586:608;;9484:710;;;;;:::o;10217:370::-;10288:5;10337:3;10330:4;10322:6;10318:17;10314:27;10304:122;;10345:79;;:::i;:::-;10304:122;10462:6;10449:20;10487:94;10577:3;10569:6;10562:4;10554:6;10550:17;10487:94;:::i;:::-;10478:103;;10294:293;10217:370;;;;:::o;10593:894::-;10711:6;10719;10768:2;10756:9;10747:7;10743:23;10739:32;10736:119;;;10774:79;;:::i;:::-;10736:119;10922:1;10911:9;10907:17;10894:31;10952:18;10944:6;10941:30;10938:117;;;10974:79;;:::i;:::-;10938:117;11079:78;11149:7;11140:6;11129:9;11125:22;11079:78;:::i;:::-;11069:88;;10865:302;11234:2;11223:9;11219:18;11206:32;11265:18;11257:6;11254:30;11251:117;;;11287:79;;:::i;:::-;11251:117;11392:78;11462:7;11453:6;11442:9;11438:22;11392:78;:::i;:::-;11382:88;;11177:303;10593:894;;;;;:::o;11493:116::-;11563:21;11578:5;11563:21;:::i;:::-;11556:5;11553:32;11543:60;;11599:1;11596;11589:12;11543:60;11493:116;:::o;11615:133::-;11658:5;11696:6;11683:20;11674:29;;11712:30;11736:5;11712:30;:::i;:::-;11615:133;;;;:::o;11754:468::-;11819:6;11827;11876:2;11864:9;11855:7;11851:23;11847:32;11844:119;;;11882:79;;:::i;:::-;11844:119;12002:1;12027:53;12072:7;12063:6;12052:9;12048:22;12027:53;:::i;:::-;12017:63;;11973:117;12129:2;12155:50;12197:7;12188:6;12177:9;12173:22;12155:50;:::i;:::-;12145:60;;12100:115;11754:468;;;;;:::o;12228:619::-;12305:6;12313;12321;12370:2;12358:9;12349:7;12345:23;12341:32;12338:119;;;12376:79;;:::i;:::-;12338:119;12496:1;12521:53;12566:7;12557:6;12546:9;12542:22;12521:53;:::i;:::-;12511:63;;12467:117;12623:2;12649:53;12694:7;12685:6;12674:9;12670:22;12649:53;:::i;:::-;12639:63;;12594:118;12751:2;12777:53;12822:7;12813:6;12802:9;12798:22;12777:53;:::i;:::-;12767:63;;12722:118;12228:619;;;;;:::o;12853:323::-;12909:6;12958:2;12946:9;12937:7;12933:23;12929:32;12926:119;;;12964:79;;:::i;:::-;12926:119;13084:1;13109:50;13151:7;13142:6;13131:9;13127:22;13109:50;:::i;:::-;13099:60;;13055:114;12853:323;;;;:::o;13182:474::-;13250:6;13258;13307:2;13295:9;13286:7;13282:23;13278:32;13275:119;;;13313:79;;:::i;:::-;13275:119;13433:1;13458:53;13503:7;13494:6;13483:9;13479:22;13458:53;:::i;:::-;13448:63;;13404:117;13560:2;13586:53;13631:7;13622:6;13611:9;13607:22;13586:53;:::i;:::-;13576:63;;13531:118;13182:474;;;;;:::o;13662:180::-;13710:77;13707:1;13700:88;13807:4;13804:1;13797:15;13831:4;13828:1;13821:15;13848:320;13892:6;13929:1;13923:4;13919:12;13909:22;;13976:1;13970:4;13966:12;13997:18;13987:81;;14053:4;14045:6;14041:17;14031:27;;13987:81;14115:2;14107:6;14104:14;14084:18;14081:38;14078:84;;14134:18;;:::i;:::-;14078:84;13899:269;13848:320;;;:::o;14174:182::-;14314:34;14310:1;14302:6;14298:14;14291:58;14174:182;:::o;14362:366::-;14504:3;14525:67;14589:2;14584:3;14525:67;:::i;:::-;14518:74;;14601:93;14690:3;14601:93;:::i;:::-;14719:2;14714:3;14710:12;14703:19;;14362:366;;;:::o;14734:419::-;14900:4;14938:2;14927:9;14923:18;14915:26;;14987:9;14981:4;14977:20;14973:1;14962:9;14958:17;14951:47;15015:131;15141:4;15015:131;:::i;:::-;15007:139;;14734:419;;;:::o;15159:180::-;15207:77;15204:1;15197:88;15304:4;15301:1;15294:15;15328:4;15325:1;15318:15;15345:410;15385:7;15408:20;15426:1;15408:20;:::i;:::-;15403:25;;15442:20;15460:1;15442:20;:::i;:::-;15437:25;;15497:1;15494;15490:9;15519:30;15537:11;15519:30;:::i;:::-;15508:41;;15698:1;15689:7;15685:15;15682:1;15679:22;15659:1;15652:9;15632:83;15609:139;;15728:18;;:::i;:::-;15609:139;15393:362;15345:410;;;;:::o;15761:180::-;15809:77;15806:1;15799:88;15906:4;15903:1;15896:15;15930:4;15927:1;15920:15;15947:185;15987:1;16004:20;16022:1;16004:20;:::i;:::-;15999:25;;16038:20;16056:1;16038:20;:::i;:::-;16033:25;;16077:1;16067:35;;16082:18;;:::i;:::-;16067:35;16124:1;16121;16117:9;16112:14;;15947:185;;;;:::o;16138:234::-;16278:34;16274:1;16266:6;16262:14;16255:58;16347:17;16342:2;16334:6;16330:15;16323:42;16138:234;:::o;16378:366::-;16520:3;16541:67;16605:2;16600:3;16541:67;:::i;:::-;16534:74;;16617:93;16706:3;16617:93;:::i;:::-;16735:2;16730:3;16726:12;16719:19;;16378:366;;;:::o;16750:419::-;16916:4;16954:2;16943:9;16939:18;16931:26;;17003:9;16997:4;16993:20;16989:1;16978:9;16974:17;16967:47;17031:131;17157:4;17031:131;:::i;:::-;17023:139;;16750:419;;;:::o;17175:227::-;17315:34;17311:1;17303:6;17299:14;17292:58;17384:10;17379:2;17371:6;17367:15;17360:35;17175:227;:::o;17408:366::-;17550:3;17571:67;17635:2;17630:3;17571:67;:::i;:::-;17564:74;;17647:93;17736:3;17647:93;:::i;:::-;17765:2;17760:3;17756:12;17749:19;;17408:366;;;:::o;17780:419::-;17946:4;17984:2;17973:9;17969:18;17961:26;;18033:9;18027:4;18023:20;18019:1;18008:9;18004:17;17997:47;18061:131;18187:4;18061:131;:::i;:::-;18053:139;;17780:419;;;:::o;18205:191::-;18245:3;18264:20;18282:1;18264:20;:::i;:::-;18259:25;;18298:20;18316:1;18298:20;:::i;:::-;18293:25;;18341:1;18338;18334:9;18327:16;;18362:3;18359:1;18356:10;18353:36;;;18369:18;;:::i;:::-;18353:36;18205:191;;;;:::o;18402:229::-;18542:34;18538:1;18530:6;18526:14;18519:58;18611:12;18606:2;18598:6;18594:15;18587:37;18402:229;:::o;18637:366::-;18779:3;18800:67;18864:2;18859:3;18800:67;:::i;:::-;18793:74;;18876:93;18965:3;18876:93;:::i;:::-;18994:2;18989:3;18985:12;18978:19;;18637:366;;;:::o;19009:419::-;19175:4;19213:2;19202:9;19198:18;19190:26;;19262:9;19256:4;19252:20;19248:1;19237:9;19233:17;19226:47;19290:131;19416:4;19290:131;:::i;:::-;19282:139;;19009:419;;;:::o;19434:180::-;19482:77;19479:1;19472:88;19579:4;19576:1;19569:15;19603:4;19600:1;19593:15;19620:233;19659:3;19682:24;19700:5;19682:24;:::i;:::-;19673:33;;19728:66;19721:5;19718:77;19715:103;;19798:18;;:::i;:::-;19715:103;19845:1;19838:5;19834:13;19827:20;;19620:233;;;:::o;19859:236::-;19999:34;19995:1;19987:6;19983:14;19976:58;20068:19;20063:2;20055:6;20051:15;20044:44;19859:236;:::o;20101:366::-;20243:3;20264:67;20328:2;20323:3;20264:67;:::i;:::-;20257:74;;20340:93;20429:3;20340:93;:::i;:::-;20458:2;20453:3;20449:12;20442:19;;20101:366;;;:::o;20473:419::-;20639:4;20677:2;20666:9;20662:18;20654:26;;20726:9;20720:4;20716:20;20712:1;20701:9;20697:17;20690:47;20754:131;20880:4;20754:131;:::i;:::-;20746:139;;20473:419;;;:::o;20898:244::-;21038:34;21034:1;21026:6;21022:14;21015:58;21107:27;21102:2;21094:6;21090:15;21083:52;20898:244;:::o;21148:366::-;21290:3;21311:67;21375:2;21370:3;21311:67;:::i;:::-;21304:74;;21387:93;21476:3;21387:93;:::i;:::-;21505:2;21500:3;21496:12;21489:19;;21148:366;;;:::o;21520:419::-;21686:4;21724:2;21713:9;21709:18;21701:26;;21773:9;21767:4;21763:20;21759:1;21748:9;21744:17;21737:47;21801:131;21927:4;21801:131;:::i;:::-;21793:139;;21520:419;;;:::o;21945:224::-;22085:34;22081:1;22073:6;22069:14;22062:58;22154:7;22149:2;22141:6;22137:15;22130:32;21945:224;:::o;22175:366::-;22317:3;22338:67;22402:2;22397:3;22338:67;:::i;:::-;22331:74;;22414:93;22503:3;22414:93;:::i;:::-;22532:2;22527:3;22523:12;22516:19;;22175:366;;;:::o;22547:419::-;22713:4;22751:2;22740:9;22736:18;22728:26;;22800:9;22794:4;22790:20;22786:1;22775:9;22771:17;22764:47;22828:131;22954:4;22828:131;:::i;:::-;22820:139;;22547:419;;;:::o;22972:238::-;23112:34;23108:1;23100:6;23096:14;23089:58;23181:21;23176:2;23168:6;23164:15;23157:46;22972:238;:::o;23216:366::-;23358:3;23379:67;23443:2;23438:3;23379:67;:::i;:::-;23372:74;;23455:93;23544:3;23455:93;:::i;:::-;23573:2;23568:3;23564:12;23557:19;;23216:366;;;:::o;23588:419::-;23754:4;23792:2;23781:9;23777:18;23769:26;;23841:9;23835:4;23831:20;23827:1;23816:9;23812:17;23805:47;23869:131;23995:4;23869:131;:::i;:::-;23861:139;;23588:419;;;:::o;24013:223::-;24153:34;24149:1;24141:6;24137:14;24130:58;24222:6;24217:2;24209:6;24205:15;24198:31;24013:223;:::o;24242:366::-;24384:3;24405:67;24469:2;24464:3;24405:67;:::i;:::-;24398:74;;24481:93;24570:3;24481:93;:::i;:::-;24599:2;24594:3;24590:12;24583:19;;24242:366;;;:::o;24614:419::-;24780:4;24818:2;24807:9;24803:18;24795:26;;24867:9;24861:4;24857:20;24853:1;24842:9;24838:17;24831:47;24895:131;25021:4;24895:131;:::i;:::-;24887:139;;24614:419;;;:::o;25039:240::-;25179:34;25175:1;25167:6;25163:14;25156:58;25248:23;25243:2;25235:6;25231:15;25224:48;25039:240;:::o;25285:366::-;25427:3;25448:67;25512:2;25507:3;25448:67;:::i;:::-;25441:74;;25524:93;25613:3;25524:93;:::i;:::-;25642:2;25637:3;25633:12;25626:19;;25285:366;;;:::o;25657:419::-;25823:4;25861:2;25850:9;25846:18;25838:26;;25910:9;25904:4;25900:20;25896:1;25885:9;25881:17;25874:47;25938:131;26064:4;25938:131;:::i;:::-;25930:139;;25657:419;;;:::o;26082:239::-;26222:34;26218:1;26210:6;26206:14;26199:58;26291:22;26286:2;26278:6;26274:15;26267:47;26082:239;:::o;26327:366::-;26469:3;26490:67;26554:2;26549:3;26490:67;:::i;:::-;26483:74;;26566:93;26655:3;26566:93;:::i;:::-;26684:2;26679:3;26675:12;26668:19;;26327:366;;;:::o;26699:419::-;26865:4;26903:2;26892:9;26888:18;26880:26;;26952:9;26946:4;26942:20;26938:1;26927:9;26923:17;26916:47;26980:131;27106:4;26980:131;:::i;:::-;26972:139;;26699:419;;;:::o;27124:225::-;27264:34;27260:1;27252:6;27248:14;27241:58;27333:8;27328:2;27320:6;27316:15;27309:33;27124:225;:::o;27355:366::-;27497:3;27518:67;27582:2;27577:3;27518:67;:::i;:::-;27511:74;;27594:93;27683:3;27594:93;:::i;:::-;27712:2;27707:3;27703:12;27696:19;;27355:366;;;:::o;27727:419::-;27893:4;27931:2;27920:9;27916:18;27908:26;;27980:9;27974:4;27970:20;27966:1;27955:9;27951:17;27944:47;28008:131;28134:4;28008:131;:::i;:::-;28000:139;;27727:419;;;:::o;28152:223::-;28292:34;28288:1;28280:6;28276:14;28269:58;28361:6;28356:2;28348:6;28344:15;28337:31;28152:223;:::o;28381:366::-;28523:3;28544:67;28608:2;28603:3;28544:67;:::i;:::-;28537:74;;28620:93;28709:3;28620:93;:::i;:::-;28738:2;28733:3;28729:12;28722:19;;28381:366;;;:::o;28753:419::-;28919:4;28957:2;28946:9;28942:18;28934:26;;29006:9;29000:4;28996:20;28992:1;28981:9;28977:17;28970:47;29034:131;29160:4;29034:131;:::i;:::-;29026:139;;28753:419;;;:::o;29178:221::-;29318:34;29314:1;29306:6;29302:14;29295:58;29387:4;29382:2;29374:6;29370:15;29363:29;29178:221;:::o;29405:366::-;29547:3;29568:67;29632:2;29627:3;29568:67;:::i;:::-;29561:74;;29644:93;29733:3;29644:93;:::i;:::-;29762:2;29757:3;29753:12;29746:19;;29405:366;;;:::o;29777:419::-;29943:4;29981:2;29970:9;29966:18;29958:26;;30030:9;30024:4;30020:20;30016:1;30005:9;30001:17;29994:47;30058:131;30184:4;30058:131;:::i;:::-;30050:139;;29777:419;;;:::o;30202:224::-;30342:34;30338:1;30330:6;30326:14;30319:58;30411:7;30406:2;30398:6;30394:15;30387:32;30202:224;:::o;30432:366::-;30574:3;30595:67;30659:2;30654:3;30595:67;:::i;:::-;30588:74;;30671:93;30760:3;30671:93;:::i;:::-;30789:2;30784:3;30780:12;30773:19;;30432:366;;;:::o;30804:419::-;30970:4;31008:2;30997:9;30993:18;30985:26;;31057:9;31051:4;31047:20;31043:1;31032:9;31028:17;31021:47;31085:131;31211:4;31085:131;:::i;:::-;31077:139;;30804:419;;;:::o;31229:222::-;31369:34;31365:1;31357:6;31353:14;31346:58;31438:5;31433:2;31425:6;31421:15;31414:30;31229:222;:::o;31457:366::-;31599:3;31620:67;31684:2;31679:3;31620:67;:::i;:::-;31613:74;;31696:93;31785:3;31696:93;:::i;:::-;31814:2;31809:3;31805:12;31798:19;;31457:366;;;:::o;31829:419::-;31995:4;32033:2;32022:9;32018:18;32010:26;;32082:9;32076:4;32072:20;32068:1;32057:9;32053:17;32046:47;32110:131;32236:4;32110:131;:::i;:::-;32102:139;;31829:419;;;:::o;32254:172::-;32394:24;32390:1;32382:6;32378:14;32371:48;32254:172;:::o;32432:366::-;32574:3;32595:67;32659:2;32654:3;32595:67;:::i;:::-;32588:74;;32671:93;32760:3;32671:93;:::i;:::-;32789:2;32784:3;32780:12;32773:19;;32432:366;;;:::o;32804:419::-;32970:4;33008:2;32997:9;32993:18;32985:26;;33057:9;33051:4;33047:20;33043:1;33032:9;33028:17;33021:47;33085:131;33211:4;33085:131;:::i;:::-;33077:139;;32804:419;;;:::o;33229:240::-;33369:34;33365:1;33357:6;33353:14;33346:58;33438:23;33433:2;33425:6;33421:15;33414:48;33229:240;:::o;33475:366::-;33617:3;33638:67;33702:2;33697:3;33638:67;:::i;:::-;33631:74;;33714:93;33803:3;33714:93;:::i;:::-;33832:2;33827:3;33823:12;33816:19;;33475:366;;;:::o;33847:419::-;34013:4;34051:2;34040:9;34036:18;34028:26;;34100:9;34094:4;34090:20;34086:1;34075:9;34071:17;34064:47;34128:131;34254:4;34128:131;:::i;:::-;34120:139;;33847:419;;;:::o;34272:169::-;34412:21;34408:1;34400:6;34396:14;34389:45;34272:169;:::o;34447:366::-;34589:3;34610:67;34674:2;34669:3;34610:67;:::i;:::-;34603:74;;34686:93;34775:3;34686:93;:::i;:::-;34804:2;34799:3;34795:12;34788:19;;34447:366;;;:::o;34819:419::-;34985:4;35023:2;35012:9;35008:18;35000:26;;35072:9;35066:4;35062:20;35058:1;35047:9;35043:17;35036:47;35100:131;35226:4;35100:131;:::i;:::-;35092:139;;34819:419;;;:::o;35244:241::-;35384:34;35380:1;35372:6;35368:14;35361:58;35453:24;35448:2;35440:6;35436:15;35429:49;35244:241;:::o;35491:366::-;35633:3;35654:67;35718:2;35713:3;35654:67;:::i;:::-;35647:74;;35730:93;35819:3;35730:93;:::i;:::-;35848:2;35843:3;35839:12;35832:19;;35491:366;;;:::o;35863:419::-;36029:4;36067:2;36056:9;36052:18;36044:26;;36116:9;36110:4;36106:20;36102:1;36091:9;36087:17;36080:47;36144:131;36270:4;36144:131;:::i;:::-;36136:139;;35863:419;;;:::o;36288:194::-;36328:4;36348:20;36366:1;36348:20;:::i;:::-;36343:25;;36382:20;36400:1;36382:20;:::i;:::-;36377:25;;36426:1;36423;36419:9;36411:17;;36450:1;36444:4;36441:11;36438:37;;;36455:18;;:::i;:::-;36438:37;36288:194;;;;:::o;36488:225::-;36628:34;36624:1;36616:6;36612:14;36605:58;36697:8;36692:2;36684:6;36680:15;36673:33;36488:225;:::o;36719:366::-;36861:3;36882:67;36946:2;36941:3;36882:67;:::i;:::-;36875:74;;36958:93;37047:3;36958:93;:::i;:::-;37076:2;37071:3;37067:12;37060:19;;36719:366;;;:::o;37091:419::-;37257:4;37295:2;37284:9;37280:18;37272:26;;37344:9;37338:4;37334:20;37330:1;37319:9;37315:17;37308:47;37372:131;37498:4;37372:131;:::i;:::-;37364:139;;37091:419;;;:::o;37516:147::-;37617:11;37654:3;37639:18;;37516:147;;;;:::o;37669:114::-;;:::o;37789:398::-;37948:3;37969:83;38050:1;38045:3;37969:83;:::i;:::-;37962:90;;38061:93;38150:3;38061:93;:::i;:::-;38179:1;38174:3;38170:11;38163:18;;37789:398;;;:::o;38193:379::-;38377:3;38399:147;38542:3;38399:147;:::i;:::-;38392:154;;38563:3;38556:10;;38193:379;;;:::o;38578:442::-;38727:4;38765:2;38754:9;38750:18;38742:26;;38778:71;38846:1;38835:9;38831:17;38822:6;38778:71;:::i;:::-;38859:72;38927:2;38916:9;38912:18;38903:6;38859:72;:::i;:::-;38941;39009:2;38998:9;38994:18;38985:6;38941:72;:::i;:::-;38578:442;;;;;;:::o;39026:143::-;39083:5;39114:6;39108:13;39099:22;;39130:33;39157:5;39130:33;:::i;:::-;39026:143;;;;:::o;39175:351::-;39245:6;39294:2;39282:9;39273:7;39269:23;39265:32;39262:119;;;39300:79;;:::i;:::-;39262:119;39420:1;39445:64;39501:7;39492:6;39481:9;39477:22;39445:64;:::i;:::-;39435:74;;39391:128;39175:351;;;;:::o;39532:85::-;39577:7;39606:5;39595:16;;39532:85;;;:::o;39623:158::-;39681:9;39714:61;39732:42;39741:32;39767:5;39741:32;:::i;:::-;39732:42;:::i;:::-;39714:61;:::i;:::-;39701:74;;39623:158;;;:::o;39787:147::-;39882:45;39921:5;39882:45;:::i;:::-;39877:3;39870:58;39787:147;;:::o;39940:114::-;40007:6;40041:5;40035:12;40025:22;;39940:114;;;:::o;40060:184::-;40159:11;40193:6;40188:3;40181:19;40233:4;40228:3;40224:14;40209:29;;40060:184;;;;:::o;40250:132::-;40317:4;40340:3;40332:11;;40370:4;40365:3;40361:14;40353:22;;40250:132;;;:::o;40388:108::-;40465:24;40483:5;40465:24;:::i;:::-;40460:3;40453:37;40388:108;;:::o;40502:179::-;40571:10;40592:46;40634:3;40626:6;40592:46;:::i;:::-;40670:4;40665:3;40661:14;40647:28;;40502:179;;;;:::o;40687:113::-;40757:4;40789;40784:3;40780:14;40772:22;;40687:113;;;:::o;40836:732::-;40955:3;40984:54;41032:5;40984:54;:::i;:::-;41054:86;41133:6;41128:3;41054:86;:::i;:::-;41047:93;;41164:56;41214:5;41164:56;:::i;:::-;41243:7;41274:1;41259:284;41284:6;41281:1;41278:13;41259:284;;;41360:6;41354:13;41387:63;41446:3;41431:13;41387:63;:::i;:::-;41380:70;;41473:60;41526:6;41473:60;:::i;:::-;41463:70;;41319:224;41306:1;41303;41299:9;41294:14;;41259:284;;;41263:14;41559:3;41552:10;;40960:608;;;40836:732;;;;:::o;41574:831::-;41837:4;41875:3;41864:9;41860:19;41852:27;;41889:71;41957:1;41946:9;41942:17;41933:6;41889:71;:::i;:::-;41970:80;42046:2;42035:9;42031:18;42022:6;41970:80;:::i;:::-;42097:9;42091:4;42087:20;42082:2;42071:9;42067:18;42060:48;42125:108;42228:4;42219:6;42125:108;:::i;:::-;42117:116;;42243:72;42311:2;42300:9;42296:18;42287:6;42243:72;:::i;:::-;42325:73;42393:3;42382:9;42378:19;42369:6;42325:73;:::i;:::-;41574:831;;;;;;;;:::o;42411:807::-;42660:4;42698:3;42687:9;42683:19;42675:27;;42712:71;42780:1;42769:9;42765:17;42756:6;42712:71;:::i;:::-;42793:72;42861:2;42850:9;42846:18;42837:6;42793:72;:::i;:::-;42875:80;42951:2;42940:9;42936:18;42927:6;42875:80;:::i;:::-;42965;43041:2;43030:9;43026:18;43017:6;42965:80;:::i;:::-;43055:73;43123:3;43112:9;43108:19;43099:6;43055:73;:::i;:::-;43138;43206:3;43195:9;43191:19;43182:6;43138:73;:::i;:::-;42411:807;;;;;;;;;:::o;43224:143::-;43281:5;43312:6;43306:13;43297:22;;43328:33;43355:5;43328:33;:::i;:::-;43224:143;;;;:::o;43373:663::-;43461:6;43469;43477;43526:2;43514:9;43505:7;43501:23;43497:32;43494:119;;;43532:79;;:::i;:::-;43494:119;43652:1;43677:64;43733:7;43724:6;43713:9;43709:22;43677:64;:::i;:::-;43667:74;;43623:128;43790:2;43816:64;43872:7;43863:6;43852:9;43848:22;43816:64;:::i;:::-;43806:74;;43761:129;43929:2;43955:64;44011:7;44002:6;43991:9;43987:22;43955:64;:::i;:::-;43945:74;;43900:129;43373:663;;;;;:::o

Swarm Source

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