ETH Price: $3,475.46 (-0.18%)
Gas: 2 Gwei

Token

ManOwaR (MOW)
 

Overview

Max Total Supply

1,000,000,000,000 MOW

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,662,993,142.749443483035390137 MOW

Value
$0.00
0x81e87ce7d7a32bba25e992ff7a0df5b83eeb68d5
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:
MOWF1

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-11
*/

/*
       
ManOwaR
A MEME TOKEN DEDICATED TO PUMPKIN SPICE THE OG DEGEN GIRL! WE ARE HER DEFENDERS AND MEN OF WAR!
JOIN US NOW TO BECOME A MANOWAR

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode
        return msg.data;
    }
}

library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

interface IBEP20 {
    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 IBEP20Metadata is IBEP20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract BEP20 is Context, IBEP20, IBEP20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount,
                "BEP20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue,
                "BEP20: decreased allowance below zero"));
        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

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

abstract contract Ownable is Context {

    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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 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 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 IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router01 {
    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 removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin,
                             uint256 amountBMin, address to, uint256 deadline) 
                             external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity,
                                       uint256 amountAMin, uint256 amountBMin, address to,
                                       uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                       external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin,
                                          uint256 amountETHMin, address to, uint256 deadline,
                                          bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                          external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) 
                   external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) 
                          external pure returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) 
                         external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
                           external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
                          external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
        external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax,
        uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);

    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 MOWF1 is BEP20, Ownable { 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 public sellAmount = 0;
    uint256 public buyAmount = 0;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet;
    address payable public devWallet;

    uint256 public maxWallet;
    bool public maxWalletEnabled = true;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellLiquidityFee;
    uint256 public buyMarketingFees;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public sellDevFee;

    bool public swapAndLiquifyEnabled = true;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = true; 
    uint256 private gasPriceLimit = 7 * 1 gwei;
    mapping(address => uint256) private _holderLastTransferBlock; 
    mapping(address => uint256) private _holderLastTransferTimestamp; 
    uint256 public launchblock; 
    uint256 public launchtimestamp; 
    uint256 public cooldowntimer = 30; 

    event EnableSwapAndLiquify(bool enabled);
    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event updateDevWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellLiquidityFee, uint256 buyMarketingFees,
                     uint256 buyLiquidityFee, uint256 buyDevFee, uint256 sellDevFee);

    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event SendDividends(uint256 opAmount, bool success);

    constructor() BEP20("ManOwaR", "MOW") { 
        marketingWallet = payable(0x159DCBDC5E59E1688Ca87E65fd9EDd749888fd5c); 
        devWallet = payable(0x1590fFf56fd718A839c277ba74B6a33CF03dFF03); 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

        
        buyMarketingFees = 3;
        sellMarketingFees = 3;
        buyLiquidityFee = 2;
        sellLiquidityFee = 2;
        buyDevFee = 4;
        sellDevFee = 4;

        
        totalBuyFees = buyMarketingFees.add(buyLiquidityFee).add(buyDevFee);
        totalSellFees = sellMarketingFees.add(sellLiquidityFee).add(sellDevFee);

        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this), uniswapV2Router.WETH());

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 _totalSupply = (1_000_000_000_000) * (10**18); 
        _mint(owner(), _totalSupply); 
        maxWallet = _totalSupply / 25; 
        swapTokensAtAmount = _totalSupply / 100; 
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

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

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingEnabled);
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }

    function setDevWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        devWallet = payable(wallet);
        emit updateDevWallet(wallet);
    }
    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    function setMaxWalletEnabled(bool value) external onlyOwner {
        maxWalletEnabled = value;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }

    
    function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 100, "max wallet cannot be set to less than 1%");
        maxWallet = value;
    }

    
    function Sweep() external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(msg.sender).transfer(amountBNB);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function enableSwapAndLiquify(bool enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != enabled);
        swapAndLiquifyEnabled = enabled;
        emit EnableSwapAndLiquify(enabled);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    
    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 liquidityBuy,
                        uint256 liquiditySell, uint256 devBuy, uint256 devSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyLiquidityFee = liquidityBuy;
        sellMarketingFees = marketingSell;
        sellLiquidityFee = liquiditySell;
        buyDevFee = devBuy;
        sellDevFee = devSell;

        totalSellFees = sellMarketingFees.add(sellLiquidityFee).add(sellDevFee);
        totalBuyFees = buyMarketingFees.add(buyLiquidityFee).add(buyDevFee);

       
        require(totalSellFees <= 15 && totalBuyFees <= 15, "");

        emit UpdateFees(sellMarketingFees, sellLiquidityFee, sellDevFee, buyMarketingFees,
                        buyLiquidityFee, buyDevFee);
    }

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

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");

        uint256 marketingFees;
        uint256 liquidityFee;
        uint256 devFee;

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 
        
        else if (
            !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
        ) {
            bool isSelling = automatedMarketMakerPairs[to];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                liquidityFee = sellLiquidityFee;
                devFee = sellDevFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                liquidityFee = buyLiquidityFee;
                devFee = buyDevFee;

                if (limitsInEffect) {
                require(block.number > launchblock + 2,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferBlock[tx.origin] = block.number;
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
            }

            if (maxWalletEnabled) {
            uint256 contractBalanceRecipient = balanceOf(to);
            require(contractBalanceRecipient + amount <= maxWallet,
                    "Exceeds maximum wallet token amount." );
            }
            }

            uint256 totalFees = marketingFees.add(liquidityFee).add(devFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && !automatedMarketMakerPairs[from]) {
                swapping = true;

                uint256 swapTokens;

                if (swapAndLiquifyEnabled && liquidityFee > 0) {
                    uint256 totalBuySell = buyAmount.add(sellAmount);
                    uint256 swapAmountBought = contractTokenBalance
                        .mul(buyAmount)
                        .div(totalBuySell);
                    uint256 swapAmountSold = contractTokenBalance
                        .mul(sellAmount)
                        .div(totalBuySell);

                    uint256 swapBuyTokens = swapAmountBought
                        .mul(liquidityFee)
                        .div(totalBuyFees);

                    uint256 swapSellTokens = swapAmountSold
                        .mul(liquidityFee)
                        .div(totalSellFees);

                    swapTokens = swapSellTokens.add(swapBuyTokens);

                    swapAndLiquify(swapTokens);
                }

                uint256 remainingBalance = swapTokensAtAmount.sub(swapTokens);
                swapAndSendDividends(remainingBalance);
                buyAmount = 0;
                sellAmount = 0;
                swapping = false;
            }

            uint256 fees = amount.mul(totalFees).div(100);

            amount = amount.sub(fees);

            if (isSelling) {
                sellAmount = sellAmount.add(fees);
            } else {
                buyAmount = buyAmount.add(fees);
            }

            super._transfer(from, address(this), fees);
           
        }

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


    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        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
            owner(),
            block.timestamp
        );
    }

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        tokens = tokens * (10**18);
        uint256 totalAmount = buyAmount.add(sellAmount);
        uint256 fromBuy = tokens.mul(buyAmount).div(totalAmount);
        uint256 fromSell = tokens.mul(sellAmount).div(totalAmount);

        swapAndSendDividends(tokens);

        buyAmount = buyAmount.sub(fromBuy);
        sellAmount = sellAmount.sub(fromSell);
    }

    // TAX PAYOUT CODE 
    function swapAndSendDividends(uint256 tokens) private {
        if (tokens == 0) {
            return;
        }
        swapTokensForEth(tokens);

        bool success = true;
        bool successOp1 = true;
        
        uint256 _marketDevTotal = sellMarketingFees.add(sellDevFee) + buyMarketingFees.add(buyDevFee);

        uint256 feePortions;
        if (_marketDevTotal > 0) {
            feePortions = address(this).balance.div(_marketDevTotal);
        }
        uint256 marketingPayout = buyMarketingFees.add(sellMarketingFees) * feePortions;
        uint256 devPayout = buyDevFee.add(sellDevFee) * feePortions;
        
        if (marketingPayout > 0) {
            (success, ) = address(marketingWallet).call{value: marketingPayout}("");
        }
        
        if (devPayout > 0) {
            (successOp1, ) = address(devWallet).call{value: devPayout}("");
        }

        emit SendDividends(
            marketingPayout,
            success && successOp1
        );
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","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":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","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":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","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":"buyAmount","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":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","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":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"sellMarketingFees","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":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"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":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600760156101000a81548160ff021916908315150217905550600060085560006009556001600f60006101000a81548160ff0219169083151502179055506001601760006101000a81548160ff0219169083151502179055506001601b60006101000a81548160ff0219169083151502179055506401a13b8600601c55601e6021553480156200009557600080fd5b506040518060400160405280600781526020017f4d616e4f776152000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d4f57000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200011a92919062000aee565b5080600490805190602001906200013392919062000aee565b5050506000620001486200080560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35073159dcbdc5e59e1688ca87e65fd9edd749888fd5c600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731590fff56fd718a839c277ba74b6a33cf03dff03600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060036013819055506003601181905550600260148190555060026012819055506004601581905550600460168190555062000313601554620002ff6014546013546200080d60201b620028fa1790919060201c565b6200080d60201b620028fa1790919060201c565b600b81905550620003526016546200033e6012546011546200080d60201b620028fa1790919060201c565b6200080d60201b620028fa1790919060201c565b600a8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000407573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042d919062000c08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004dd919062000c08565b6040518363ffffffff1660e01b8152600401620004fc92919062000c4b565b6020604051808303816000875af11580156200051c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000542919062000c08565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005b7600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200087060201b60201c565b6001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006c0c9f2c9cd04674edea40000000905062000714620007076200091160201b60201c565b826200093b60201b60201c565b60198162000723919062000ce0565b600e8190555060648162000738919062000ce0565b6010819055506001601a6000620007546200091160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000efc565b600033905090565b60008082846200081e919062000d18565b90508381101562000866576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085d9062000dd6565b60405180910390fd5b8091505092915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a49062000e48565b60405180910390fd5b620009c16000838362000ae960201b60201c565b620009dd816002546200080d60201b620028fa1790919060201c565b60028190555062000a3b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200080d60201b620028fa1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000add919062000e7b565b60405180910390a35050565b505050565b82805462000afc9062000ec7565b90600052602060002090601f01602090048101928262000b20576000855562000b6c565b82601f1062000b3b57805160ff191683800117855562000b6c565b8280016001018555821562000b6c579182015b8281111562000b6b57825182559160200191906001019062000b4e565b5b50905062000b7b919062000b7f565b5090565b5b8082111562000b9a57600081600090555060010162000b80565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bd08262000ba3565b9050919050565b62000be28162000bc3565b811462000bee57600080fd5b50565b60008151905062000c028162000bd7565b92915050565b60006020828403121562000c215762000c2062000b9e565b5b600062000c318482850162000bf1565b91505092915050565b62000c458162000bc3565b82525050565b600060408201905062000c62600083018562000c3a565b62000c71602083018462000c3a565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ced8262000c78565b915062000cfa8362000c78565b92508262000d0d5762000d0c62000c82565b5b828204905092915050565b600062000d258262000c78565b915062000d328362000c78565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d6a5762000d6962000cb1565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000dbe601b8362000d75565b915062000dcb8262000d86565b602082019050919050565b6000602082019050818103600083015262000df18162000daf565b9050919050565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e30601f8362000d75565b915062000e3d8262000df8565b602082019050919050565b6000602082019050818103600083015262000e638162000e21565b9050919050565b62000e758162000c78565b82525050565b600060208201905062000e92600083018462000e6a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ee057607f821691505b60208210810362000ef65762000ef562000e98565b5b50919050565b6157fc8062000f0c6000396000f3fe6080604052600436106103395760003560e01c806375f0a874116101ab578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610bf5578063f637434214610c1e578063f8b45b0514610c49578063fc6b151c14610c7457610340565b8063dd62ed3e14610b62578063e2f4560514610b9f578063f11a24d314610bca57610340565b8063b62496f5116100d1578063b62496f514610aa8578063b74e3b1114610ae5578063d045a32914610b0e578063d5e3725114610b3957610340565b8063a614ff7514610a17578063a9059cbb14610a40578063b494298814610a7d57610340565b806395451c29116101645780639a7a23d61161013e5780639a7a23d61461095b5780639c3b4fdc14610984578063a0d82dc5146109af578063a457c2d7146109da57610340565b806395451c29146108dc57806395d89b4114610907578063992c58e41461093257610340565b806375f0a874146107f05780637fdde05c1461081b5780638a8c523c146108445780638c3c82b21461085b5780638da5cb5b146108865780638ea5220f146108b157610340565b80633f407b84116102855780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461075c57806370a0823114610773578063715018a6146107b057806375829def146107c757610340565b80635d098b38146106e15780635eee4bae1461070a578063679ca6e91461073357610340565b80634a74bb021161025f5780634a74bb02146106235780634ada218b1461064e5780634fbee193146106795780635124f874146106b657610340565b80633f407b84146105a257806349bd5a5e146105cd5780634a62bb65146105f857610340565b80631d7b1fb4116102f25780632307b441116102cc5780632307b441146104d457806323b872dd146104fd578063313ce5671461053a578063395093511461056557610340565b80631d7b1fb4146104555780631f53ac02146104805780631fa70531146104a957610340565b806305ca5f081461034557806306fdde031461036e57806308dfe8a514610399578063095ea7b3146103c25780631694505e146103ff57806318160ddd1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c60048036038101906103679190613fc3565b610c9d565b005b34801561037a57600080fd5b50610383610e00565b6040516103909190614089565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614141565b610e92565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614181565b610fd2565b6040516103f691906141d0565b60405180910390f35b34801561040b57600080fd5b50610414610ff0565b604051610421919061424a565b60405180910390f35b34801561043657600080fd5b5061043f611016565b60405161044c9190614274565b60405180910390f35b34801561046157600080fd5b5061046a611020565b6040516104779190614274565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a2919061428f565b611026565b005b3480156104b557600080fd5b506104be611190565b6040516104cb9190614274565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906144c7565b611196565b005b34801561050957600080fd5b50610524600480360381019061051f919061453f565b611338565b60405161053191906141d0565b60405180910390f35b34801561054657600080fd5b5061054f611411565b60405161055c91906145ae565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190614181565b61141a565b60405161059991906141d0565b60405180910390f35b3480156105ae57600080fd5b506105b76114cd565b6040516105c49190614274565b60405180910390f35b3480156105d957600080fd5b506105e26114d3565b6040516105ef91906145d8565b60405180910390f35b34801561060457600080fd5b5061060d6114f9565b60405161061a91906141d0565b60405180910390f35b34801561062f57600080fd5b5061063861150c565b60405161064591906141d0565b60405180910390f35b34801561065a57600080fd5b5061066361151f565b60405161067091906141d0565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b919061428f565b611532565b6040516106ad91906141d0565b60405180910390f35b3480156106c257600080fd5b506106cb611588565b6040516106d89190614274565b60405180910390f35b3480156106ed57600080fd5b506107086004803603810190610703919061428f565b61158e565b005b34801561071657600080fd5b50610731600480360381019061072c9190613fc3565b6116f8565b005b34801561073f57600080fd5b5061075a600480360381019061075591906145f3565b6117ac565b005b34801561076857600080fd5b50610771611860565b005b34801561077f57600080fd5b5061079a6004803603810190610795919061428f565b611946565b6040516107a79190614274565b60405180910390f35b3480156107bc57600080fd5b506107c561198e565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061428f565b611ae6565b005b3480156107fc57600080fd5b50610805611c39565b6040516108129190614641565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190614141565b611c5f565b005b34801561085057600080fd5b50610859611d51565b005b34801561086757600080fd5b50610870611e59565b60405161087d9190614274565b60405180910390f35b34801561089257600080fd5b5061089b611e5f565b6040516108a891906145d8565b60405180910390f35b3480156108bd57600080fd5b506108c6611e89565b6040516108d39190614641565b60405180910390f35b3480156108e857600080fd5b506108f1611eaf565b6040516108fe9190614274565b60405180910390f35b34801561091357600080fd5b5061091c611eb5565b6040516109299190614089565b60405180910390f35b34801561093e57600080fd5b506109596004803603810190610954919061465c565b611f47565b005b34801561096757600080fd5b50610982600480360381019061097d9190614141565b612114565b005b34801561099057600080fd5b506109996121b9565b6040516109a69190614274565b60405180910390f35b3480156109bb57600080fd5b506109c46121bf565b6040516109d19190614274565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614181565b6121c5565b604051610a0e91906141d0565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906145f3565b612292565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190614181565b612346565b604051610a7491906141d0565b60405180910390f35b348015610a8957600080fd5b50610a92612364565b604051610a9f9190614274565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca919061428f565b61236a565b604051610adc91906141d0565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b079190613fc3565b61238a565b005b348015610b1a57600080fd5b50610b23612470565b604051610b3091906141d0565b60405180910390f35b348015610b4557600080fd5b50610b606004803603810190610b5b91906145f3565b612483565b005b348015610b6e57600080fd5b50610b896004803603810190610b8491906146e9565b61258d565b604051610b969190614274565b60405180910390f35b348015610bab57600080fd5b50610bb4612614565b604051610bc19190614274565b60405180910390f35b348015610bd657600080fd5b50610bdf61261a565b604051610bec9190614274565b60405180910390f35b348015610c0157600080fd5b50610c1c6004803603810190610c17919061428f565b612620565b005b348015610c2a57600080fd5b50610c336127e6565b604051610c409190614274565b60405180910390f35b348015610c5557600080fd5b50610c5e6127ec565b604051610c6b9190614274565b60405180910390f35b348015610c8057600080fd5b50610c9b6004803603810190610c969190613fc3565b6127f2565b005b610ca5612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90614775565b60405180910390fd5b670de0b6b3a764000081610d4891906147c4565b90506000610d636008546009546128fa90919063ffffffff16565b90506000610d8e82610d806009548661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000610db983610dab6008548761296090919063ffffffff16565b6129da90919063ffffffff16565b9050610dc484612a24565b610dd982600954612c6690919063ffffffff16565b600981905550610df481600854612c6690919063ffffffff16565b60088190555050505050565b606060038054610e0f9061484d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b9061484d565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b610e9a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2090614775565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fc691906141d0565b60405180910390a25050565b6000610fe6610fdf612958565b8484612cb0565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60215481565b61102e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa8160405161118591906145d8565b60405180910390a150565b60095481565b61119e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490614775565b60405180910390fd5b8051825114611271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611268906148ca565b60405180910390fd5b60c8825111156112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061495c565b60405180910390fd5b60005b82518110156113335760008382815181106112d7576112d661497c565b5b602002602001015190506000670de0b6b3a76400008484815181106112ff576112fe61497c565b5b602002602001015161131191906147c4565b905061131e338383612e79565b5050808061132b906149ab565b9150506112b9565b505050565b600061134584848461310c565b61140684611351612958565b6114018560405180606001604052806028815260200161575460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113b7612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b600190509392505050565b60006012905090565b60006114c3611427612958565b846114be8560016000611438612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b612cb0565b6001905092915050565b60085481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b601760009054906101000a900460ff1681565b600760159054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b611596612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516116ed91906145d8565b60405180910390a150565b611700612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690614775565b60405180910390fd5b670de0b6b3a7640000816117a391906147c4565b60108190555050565b6117b4612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90614775565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b611868612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90614775565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611942573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611996612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614775565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611aee612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7490614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c3681612620565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c67612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614775565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d59612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90614775565b60405180910390fd5b600760159054906101000a900460ff1615611e0257600080fd5b6001600760156101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054611ec49061484d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef09061484d565b8015611f3d5780601f10611f1257610100808354040283529160200191611f3d565b820191906000526020600020905b815481529060010190602001808311611f2057829003601f168201915b5050505050905090565b611f4f612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590614775565b60405180910390fd5b8560138190555083601481905550846011819055508260128190555081601581905550806016819055506120336016546120256012546011546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600a819055506120646015546120566014546013546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600b81905550600f600a54111580156120805750600f600b5411155b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614a19565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161210496959493929190614a39565b60405180910390a1505050505050565b61211c612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a290614775565b60405180910390fd5b6121b58282613aa8565b5050565b60155481565b60165481565b60006122886121d2612958565b84612283856040518060600160405280602581526020016157a260259139600160006121fc612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b6001905092915050565b61229a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232090614775565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061235a612353612958565b848461310c565b6001905092915050565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b612392612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614775565b60405180910390fd5b61012c811115612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614b0c565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b61248b612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614775565b60405180910390fd5b801515601760009054906101000a900460ff1615150361253957600080fd5b80601760006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef8160405161258291906141d0565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612628612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae90614775565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90614b9e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600e5481565b6127fa612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288090614775565b60405180910390fd5b670de0b6b3a76400008161289d91906147c4565b905060646002546128ae9190614bed565b8110156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614c90565b60405180910390fd5b80600e8190555050565b60008082846129099190614cb0565b90508381101561294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590614d52565b60405180910390fd5b8091505092915050565b600033905090565b600080830361297257600090506129d4565b6000828461298091906147c4565b905082848261298f9190614bed565b146129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c690614de4565b60405180910390fd5b809150505b92915050565b6000612a1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b49565b905092915050565b6000810315612c6357612a3681613bac565b6000600190506000600190506000612a5b6015546013546128fa90919063ffffffff16565b612a726016546011546128fa90919063ffffffff16565b612a7c9190614cb0565b9050600080821115612a9e57612a9b82476129da90919063ffffffff16565b90505b600081612ab86011546013546128fa90919063ffffffff16565b612ac291906147c4565b9050600082612ade6016546015546128fa90919063ffffffff16565b612ae891906147c4565b90506000821115612b8257600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b3990614e32565b60006040518083038185875af1925050503d8060008114612b76576040519150601f19603f3d011682016040523d82523d6000602084013e612b7b565b606091505b5050809650505b6000811115612c1a57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612bd190614e32565b60006040518083038185875af1925050503d8060008114612c0e576040519150601f19603f3d011682016040523d82523d6000602084013e612c13565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612c465750865b604051612c54929190614e47565b60405180910390a15050505050505b50565b6000612ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a44565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690614ee2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590614f74565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e6c9190614274565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edf90615006565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e90615098565b60405180910390fd5b612f62838383613def565b612fcd8160405180606001604052806026815260200161577c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613060816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130ff9190614274565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361317b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131729061512a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e1906151bc565b60405180910390fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661329057600760159054906101000a900460ff1661328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328690615228565b60405180910390fd5b5b600084036132ac576132a486866000612e79565b505050613a3f565b600760149054906101000a900460ff161580156133135750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a30576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080156134c257601154935060125492506016549150601b60009054906101000a900460ff16156134bd57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134369190614cb0565b421015613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f90615294565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613789565b601354935060145492506015549150601b60009054906101000a900460ff1615613714576002601f546134f59190614cb0565b4311613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352d90615300565b60405180910390fd5b601c543a111561357b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135729061536c565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f3906153d8565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136499190614cb0565b42101561368b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368290615294565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff161561378857600061373487611946565b9050600e5486826137459190614cb0565b1115613786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377d9061546a565b60405180910390fd5b505b5b60006137b0836137a286886128fa90919063ffffffff16565b6128fa90919063ffffffff16565b905060006137bd30611946565b9050600060105482101590508080156138205750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561399e576001600760146101000a81548160ff0219169083151502179055506000601760009054906101000a900460ff16801561385e5750600087115b1561394e57600061387c6008546009546128fa90919063ffffffff16565b905060006138a7826138996009548861296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138d2836138c46008548961296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138fd600b546138ef8d8661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000613928600a5461391a8e8661296090919063ffffffff16565b6129da90919063ffffffff16565b905061393d82826128fa90919063ffffffff16565b955061394886613df4565b50505050505b600061396582601054612c6690919063ffffffff16565b905061397081612a24565b600060098190555060006008819055506000600760146101000a81548160ff02191690831515021790555050505b60006139c660646139b8868c61296090919063ffffffff16565b6129da90919063ffffffff16565b90506139db818a612c6690919063ffffffff16565b98508415613a03576139f8816008546128fa90919063ffffffff16565b600881905550613a1f565b613a18816009546128fa90919063ffffffff16565b6009819055505b613a2a8b3083612e79565b50505050505b613a3b868686612e79565b5050505b505050565b6000838311158290613a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a839190614089565b60405180910390fd5b5060008385613a9b919061548a565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b879190614089565b60405180910390fd5b5060008385613b9f9190614bed565b9050809150509392505050565b6000600267ffffffffffffffff811115613bc957613bc86142c1565b5b604051908082528060200260200182016040528015613bf75781602001602082028036833780820191505090505b5090503081600081518110613c0f57613c0e61497c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cda91906154d3565b81600181518110613cee57613ced61497c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db99594939291906155f9565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b505050505050565b505050565b6000613e0a6002836129da90919063ffffffff16565b90506000613e218284612c6690919063ffffffff16565b90506000479050613e3183613bac565b6000613e468247612c6690919063ffffffff16565b9050613e528382613e94565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613e8593929190615653565b60405180910390a15050505050565b613ec130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f0d611e5f565b426040518863ffffffff1660e01b8152600401613f2f9695949392919061568a565b60606040518083038185885af1158015613f4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f729190615700565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613fa081613f8d565b8114613fab57600080fd5b50565b600081359050613fbd81613f97565b92915050565b600060208284031215613fd957613fd8613f83565b5b6000613fe784828501613fae565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561402a57808201518184015260208101905061400f565b83811115614039576000848401525b50505050565b6000601f19601f8301169050919050565b600061405b82613ff0565b6140658185613ffb565b935061407581856020860161400c565b61407e8161403f565b840191505092915050565b600060208201905081810360008301526140a38184614050565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140d6826140ab565b9050919050565b6140e6816140cb565b81146140f157600080fd5b50565b600081359050614103816140dd565b92915050565b60008115159050919050565b61411e81614109565b811461412957600080fd5b50565b60008135905061413b81614115565b92915050565b6000806040838503121561415857614157613f83565b5b6000614166858286016140f4565b92505060206141778582860161412c565b9150509250929050565b6000806040838503121561419857614197613f83565b5b60006141a6858286016140f4565b92505060206141b785828601613fae565b9150509250929050565b6141ca81614109565b82525050565b60006020820190506141e560008301846141c1565b92915050565b6000819050919050565b600061421061420b614206846140ab565b6141eb565b6140ab565b9050919050565b6000614222826141f5565b9050919050565b600061423482614217565b9050919050565b61424481614229565b82525050565b600060208201905061425f600083018461423b565b92915050565b61426e81613f8d565b82525050565b60006020820190506142896000830184614265565b92915050565b6000602082840312156142a5576142a4613f83565b5b60006142b3848285016140f4565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142f98261403f565b810181811067ffffffffffffffff82111715614318576143176142c1565b5b80604052505050565b600061432b613f79565b905061433782826142f0565b919050565b600067ffffffffffffffff821115614357576143566142c1565b5b602082029050602081019050919050565b600080fd5b600061438061437b8461433c565b614321565b905080838252602082019050602084028301858111156143a3576143a2614368565b5b835b818110156143cc57806143b888826140f4565b8452602084019350506020810190506143a5565b5050509392505050565b600082601f8301126143eb576143ea6142bc565b5b81356143fb84826020860161436d565b91505092915050565b600067ffffffffffffffff82111561441f5761441e6142c1565b5b602082029050602081019050919050565b600061444361443e84614404565b614321565b9050808382526020820190506020840283018581111561446657614465614368565b5b835b8181101561448f578061447b8882613fae565b845260208401935050602081019050614468565b5050509392505050565b600082601f8301126144ae576144ad6142bc565b5b81356144be848260208601614430565b91505092915050565b600080604083850312156144de576144dd613f83565b5b600083013567ffffffffffffffff8111156144fc576144fb613f88565b5b614508858286016143d6565b925050602083013567ffffffffffffffff81111561452957614528613f88565b5b61453585828601614499565b9150509250929050565b60008060006060848603121561455857614557613f83565b5b6000614566868287016140f4565b9350506020614577868287016140f4565b925050604061458886828701613fae565b9150509250925092565b600060ff82169050919050565b6145a881614592565b82525050565b60006020820190506145c3600083018461459f565b92915050565b6145d2816140cb565b82525050565b60006020820190506145ed60008301846145c9565b92915050565b60006020828403121561460957614608613f83565b5b60006146178482850161412c565b91505092915050565b600061462b826140ab565b9050919050565b61463b81614620565b82525050565b60006020820190506146566000830184614632565b92915050565b60008060008060008060c0878903121561467957614678613f83565b5b600061468789828a01613fae565b965050602061469889828a01613fae565b95505060406146a989828a01613fae565b94505060606146ba89828a01613fae565b93505060806146cb89828a01613fae565b92505060a06146dc89828a01613fae565b9150509295509295509295565b60008060408385031215614700576146ff613f83565b5b600061470e858286016140f4565b925050602061471f858286016140f4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061475f602083613ffb565b915061476a82614729565b602082019050919050565b6000602082019050818103600083015261478e81614752565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147cf82613f8d565b91506147da83613f8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561481357614812614795565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061486557607f821691505b6020821081036148785761487761481e565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b60006148b4601e83613ffb565b91506148bf8261487e565b602082019050919050565b600060208201905081810360008301526148e3816148a7565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614946602283613ffb565b9150614951826148ea565b604082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006149b682613f8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149e8576149e7614795565b5b600182019050919050565b50565b6000614a03600083613ffb565b9150614a0e826149f3565b600082019050919050565b60006020820190508181036000830152614a32816149f6565b9050919050565b600060c082019050614a4e6000830189614265565b614a5b6020830188614265565b614a686040830187614265565b614a756060830186614265565b614a826080830185614265565b614a8f60a0830184614265565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614af6602683613ffb565b9150614b0182614a9a565b604082019050919050565b60006020820190508181036000830152614b2581614ae9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b88602683613ffb565b9150614b9382614b2c565b604082019050919050565b60006020820190508181036000830152614bb781614b7b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bf882613f8d565b9150614c0383613f8d565b925082614c1357614c12614bbe565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614c7a602883613ffb565b9150614c8582614c1e565b604082019050919050565b60006020820190508181036000830152614ca981614c6d565b9050919050565b6000614cbb82613f8d565b9150614cc683613f8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cfb57614cfa614795565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d3c601b83613ffb565b9150614d4782614d06565b602082019050919050565b60006020820190508181036000830152614d6b81614d2f565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dce602183613ffb565b9150614dd982614d72565b604082019050919050565b60006020820190508181036000830152614dfd81614dc1565b9050919050565b600081905092915050565b6000614e1c600083614e04565b9150614e27826149f3565b600082019050919050565b6000614e3d82614e0f565b9150819050919050565b6000604082019050614e5c6000830185614265565b614e6960208301846141c1565b9392505050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ecc602483613ffb565b9150614ed782614e70565b604082019050919050565b60006020820190508181036000830152614efb81614ebf565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f5e602283613ffb565b9150614f6982614f02565b604082019050919050565b60006020820190508181036000830152614f8d81614f51565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ff0602583613ffb565b9150614ffb82614f94565b604082019050919050565b6000602082019050818103600083015261501f81614fe3565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615082602383613ffb565b915061508d82615026565b604082019050919050565b600060208201905081810360008301526150b181615075565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615114602683613ffb565b915061511f826150b8565b604082019050919050565b6000602082019050818103600083015261514381615107565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151a6602483613ffb565b91506151b18261514a565b604082019050919050565b600060208201905081810360008301526151d581615199565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000615212602083613ffb565b915061521d826151dc565b602082019050919050565b6000602082019050818103600083015261524181615205565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061527e601683613ffb565b915061528982615248565b602082019050919050565b600060208201905081810360008301526152ad81615271565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006152ea601283613ffb565b91506152f5826152b4565b602082019050919050565b60006020820190508181036000830152615319816152dd565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615356601883613ffb565b915061536182615320565b602082019050919050565b6000602082019050818103600083015261538581615349565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006153c2601483613ffb565b91506153cd8261538c565b602082019050919050565b600060208201905081810360008301526153f1816153b5565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615454602483613ffb565b915061545f826153f8565b604082019050919050565b6000602082019050818103600083015261548381615447565b9050919050565b600061549582613f8d565b91506154a083613f8d565b9250828210156154b3576154b2614795565b5b828203905092915050565b6000815190506154cd816140dd565b92915050565b6000602082840312156154e9576154e8613f83565b5b60006154f7848285016154be565b91505092915050565b6000819050919050565b600061552561552061551b84615500565b6141eb565b613f8d565b9050919050565b6155358161550a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615570816140cb565b82525050565b60006155828383615567565b60208301905092915050565b6000602082019050919050565b60006155a68261553b565b6155b08185615546565b93506155bb83615557565b8060005b838110156155ec5781516155d38882615576565b97506155de8361558e565b9250506001810190506155bf565b5085935050505092915050565b600060a08201905061560e6000830188614265565b61561b602083018761552c565b818103604083015261562d818661559b565b905061563c60608301856145c9565b6156496080830184614265565b9695505050505050565b60006060820190506156686000830186614265565b6156756020830185614265565b6156826040830184614265565b949350505050565b600060c08201905061569f60008301896145c9565b6156ac6020830188614265565b6156b9604083018761552c565b6156c6606083018661552c565b6156d360808301856145c9565b6156e060a0830184614265565b979650505050505050565b6000815190506156fa81613f97565b92915050565b60008060006060848603121561571957615718613f83565b5b6000615727868287016156eb565b9350506020615738868287016156eb565b9250506040615749868287016156eb565b915050925092509256fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207e3dc2d1258b64feb83c6fb91c9c072702afad536161ab60c44e82d3e2a1f24c64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103395760003560e01c806375f0a874116101ab578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610bf5578063f637434214610c1e578063f8b45b0514610c49578063fc6b151c14610c7457610340565b8063dd62ed3e14610b62578063e2f4560514610b9f578063f11a24d314610bca57610340565b8063b62496f5116100d1578063b62496f514610aa8578063b74e3b1114610ae5578063d045a32914610b0e578063d5e3725114610b3957610340565b8063a614ff7514610a17578063a9059cbb14610a40578063b494298814610a7d57610340565b806395451c29116101645780639a7a23d61161013e5780639a7a23d61461095b5780639c3b4fdc14610984578063a0d82dc5146109af578063a457c2d7146109da57610340565b806395451c29146108dc57806395d89b4114610907578063992c58e41461093257610340565b806375f0a874146107f05780637fdde05c1461081b5780638a8c523c146108445780638c3c82b21461085b5780638da5cb5b146108865780638ea5220f146108b157610340565b80633f407b84116102855780635d098b38116102235780637088fb7f116101fd5780637088fb7f1461075c57806370a0823114610773578063715018a6146107b057806375829def146107c757610340565b80635d098b38146106e15780635eee4bae1461070a578063679ca6e91461073357610340565b80634a74bb021161025f5780634a74bb02146106235780634ada218b1461064e5780634fbee193146106795780635124f874146106b657610340565b80633f407b84146105a257806349bd5a5e146105cd5780634a62bb65146105f857610340565b80631d7b1fb4116102f25780632307b441116102cc5780632307b441146104d457806323b872dd146104fd578063313ce5671461053a578063395093511461056557610340565b80631d7b1fb4146104555780631f53ac02146104805780631fa70531146104a957610340565b806305ca5f081461034557806306fdde031461036e57806308dfe8a514610399578063095ea7b3146103c25780631694505e146103ff57806318160ddd1461042a57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c60048036038101906103679190613fc3565b610c9d565b005b34801561037a57600080fd5b50610383610e00565b6040516103909190614089565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190614141565b610e92565b005b3480156103ce57600080fd5b506103e960048036038101906103e49190614181565b610fd2565b6040516103f691906141d0565b60405180910390f35b34801561040b57600080fd5b50610414610ff0565b604051610421919061424a565b60405180910390f35b34801561043657600080fd5b5061043f611016565b60405161044c9190614274565b60405180910390f35b34801561046157600080fd5b5061046a611020565b6040516104779190614274565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a2919061428f565b611026565b005b3480156104b557600080fd5b506104be611190565b6040516104cb9190614274565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906144c7565b611196565b005b34801561050957600080fd5b50610524600480360381019061051f919061453f565b611338565b60405161053191906141d0565b60405180910390f35b34801561054657600080fd5b5061054f611411565b60405161055c91906145ae565b60405180910390f35b34801561057157600080fd5b5061058c60048036038101906105879190614181565b61141a565b60405161059991906141d0565b60405180910390f35b3480156105ae57600080fd5b506105b76114cd565b6040516105c49190614274565b60405180910390f35b3480156105d957600080fd5b506105e26114d3565b6040516105ef91906145d8565b60405180910390f35b34801561060457600080fd5b5061060d6114f9565b60405161061a91906141d0565b60405180910390f35b34801561062f57600080fd5b5061063861150c565b60405161064591906141d0565b60405180910390f35b34801561065a57600080fd5b5061066361151f565b60405161067091906141d0565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b919061428f565b611532565b6040516106ad91906141d0565b60405180910390f35b3480156106c257600080fd5b506106cb611588565b6040516106d89190614274565b60405180910390f35b3480156106ed57600080fd5b506107086004803603810190610703919061428f565b61158e565b005b34801561071657600080fd5b50610731600480360381019061072c9190613fc3565b6116f8565b005b34801561073f57600080fd5b5061075a600480360381019061075591906145f3565b6117ac565b005b34801561076857600080fd5b50610771611860565b005b34801561077f57600080fd5b5061079a6004803603810190610795919061428f565b611946565b6040516107a79190614274565b60405180910390f35b3480156107bc57600080fd5b506107c561198e565b005b3480156107d357600080fd5b506107ee60048036038101906107e9919061428f565b611ae6565b005b3480156107fc57600080fd5b50610805611c39565b6040516108129190614641565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190614141565b611c5f565b005b34801561085057600080fd5b50610859611d51565b005b34801561086757600080fd5b50610870611e59565b60405161087d9190614274565b60405180910390f35b34801561089257600080fd5b5061089b611e5f565b6040516108a891906145d8565b60405180910390f35b3480156108bd57600080fd5b506108c6611e89565b6040516108d39190614641565b60405180910390f35b3480156108e857600080fd5b506108f1611eaf565b6040516108fe9190614274565b60405180910390f35b34801561091357600080fd5b5061091c611eb5565b6040516109299190614089565b60405180910390f35b34801561093e57600080fd5b506109596004803603810190610954919061465c565b611f47565b005b34801561096757600080fd5b50610982600480360381019061097d9190614141565b612114565b005b34801561099057600080fd5b506109996121b9565b6040516109a69190614274565b60405180910390f35b3480156109bb57600080fd5b506109c46121bf565b6040516109d19190614274565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190614181565b6121c5565b604051610a0e91906141d0565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906145f3565b612292565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190614181565b612346565b604051610a7491906141d0565b60405180910390f35b348015610a8957600080fd5b50610a92612364565b604051610a9f9190614274565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca919061428f565b61236a565b604051610adc91906141d0565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b079190613fc3565b61238a565b005b348015610b1a57600080fd5b50610b23612470565b604051610b3091906141d0565b60405180910390f35b348015610b4557600080fd5b50610b606004803603810190610b5b91906145f3565b612483565b005b348015610b6e57600080fd5b50610b896004803603810190610b8491906146e9565b61258d565b604051610b969190614274565b60405180910390f35b348015610bab57600080fd5b50610bb4612614565b604051610bc19190614274565b60405180910390f35b348015610bd657600080fd5b50610bdf61261a565b604051610bec9190614274565b60405180910390f35b348015610c0157600080fd5b50610c1c6004803603810190610c17919061428f565b612620565b005b348015610c2a57600080fd5b50610c336127e6565b604051610c409190614274565b60405180910390f35b348015610c5557600080fd5b50610c5e6127ec565b604051610c6b9190614274565b60405180910390f35b348015610c8057600080fd5b50610c9b6004803603810190610c969190613fc3565b6127f2565b005b610ca5612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b90614775565b60405180910390fd5b670de0b6b3a764000081610d4891906147c4565b90506000610d636008546009546128fa90919063ffffffff16565b90506000610d8e82610d806009548661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000610db983610dab6008548761296090919063ffffffff16565b6129da90919063ffffffff16565b9050610dc484612a24565b610dd982600954612c6690919063ffffffff16565b600981905550610df481600854612c6690919063ffffffff16565b60088190555050505050565b606060038054610e0f9061484d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b9061484d565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b5050505050905090565b610e9a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2090614775565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fc691906141d0565b60405180910390a25050565b6000610fe6610fdf612958565b8484612cb0565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60215481565b61102e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa8160405161118591906145d8565b60405180910390a150565b60095481565b61119e612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490614775565b60405180910390fd5b8051825114611271576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611268906148ca565b60405180910390fd5b60c8825111156112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061495c565b60405180910390fd5b60005b82518110156113335760008382815181106112d7576112d661497c565b5b602002602001015190506000670de0b6b3a76400008484815181106112ff576112fe61497c565b5b602002602001015161131191906147c4565b905061131e338383612e79565b5050808061132b906149ab565b9150506112b9565b505050565b600061134584848461310c565b61140684611351612958565b6114018560405180606001604052806028815260200161575460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113b7612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b600190509392505050565b60006012905090565b60006114c3611427612958565b846114be8560016000611438612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b612cb0565b6001905092915050565b60085481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b601760009054906101000a900460ff1681565b600760159054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b611596612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516116ed91906145d8565b60405180910390a150565b611700612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690614775565b60405180910390fd5b670de0b6b3a7640000816117a391906147c4565b60108190555050565b6117b4612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a90614775565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b611868612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee90614775565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611942573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611996612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614775565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611aee612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7490614775565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c3681612620565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c67612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614775565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d59612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90614775565b60405180910390fd5b600760159054906101000a900460ff1615611e0257600080fd5b6001600760156101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054611ec49061484d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef09061484d565b8015611f3d5780601f10611f1257610100808354040283529160200191611f3d565b820191906000526020600020905b815481529060010190602001808311611f2057829003601f168201915b5050505050905090565b611f4f612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590614775565b60405180910390fd5b8560138190555083601481905550846011819055508260128190555081601581905550806016819055506120336016546120256012546011546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600a819055506120646015546120566014546013546128fa90919063ffffffff16565b6128fa90919063ffffffff16565b600b81905550600f600a54111580156120805750600f600b5411155b6120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614a19565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161210496959493929190614a39565b60405180910390a1505050505050565b61211c612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a290614775565b60405180910390fd5b6121b58282613aa8565b5050565b60155481565b60165481565b60006122886121d2612958565b84612283856040518060600160405280602581526020016157a260259139600160006121fc612958565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b612cb0565b6001905092915050565b61229a612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232090614775565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061235a612353612958565b848461310c565b6001905092915050565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b612392612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614775565b60405180910390fd5b61012c811115612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614b0c565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b61248b612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190614775565b60405180910390fd5b801515601760009054906101000a900460ff1615150361253957600080fd5b80601760006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef8160405161258291906141d0565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612628612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae90614775565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d90614b9e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600e5481565b6127fa612958565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288090614775565b60405180910390fd5b670de0b6b3a76400008161289d91906147c4565b905060646002546128ae9190614bed565b8110156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614c90565b60405180910390fd5b80600e8190555050565b60008082846129099190614cb0565b90508381101561294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590614d52565b60405180910390fd5b8091505092915050565b600033905090565b600080830361297257600090506129d4565b6000828461298091906147c4565b905082848261298f9190614bed565b146129cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c690614de4565b60405180910390fd5b809150505b92915050565b6000612a1c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b49565b905092915050565b6000810315612c6357612a3681613bac565b6000600190506000600190506000612a5b6015546013546128fa90919063ffffffff16565b612a726016546011546128fa90919063ffffffff16565b612a7c9190614cb0565b9050600080821115612a9e57612a9b82476129da90919063ffffffff16565b90505b600081612ab86011546013546128fa90919063ffffffff16565b612ac291906147c4565b9050600082612ade6016546015546128fa90919063ffffffff16565b612ae891906147c4565b90506000821115612b8257600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612b3990614e32565b60006040518083038185875af1925050503d8060008114612b76576040519150601f19603f3d011682016040523d82523d6000602084013e612b7b565b606091505b5050809650505b6000811115612c1a57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612bd190614e32565b60006040518083038185875af1925050503d8060008114612c0e576040519150601f19603f3d011682016040523d82523d6000602084013e612c13565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea982878015612c465750865b604051612c54929190614e47565b60405180910390a15050505050505b50565b6000612ca883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a44565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1690614ee2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590614f74565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e6c9190614274565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edf90615006565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e90615098565b60405180910390fd5b612f62838383613def565b612fcd8160405180606001604052806026815260200161577c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a449092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613060816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fa90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130ff9190614274565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361317b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131729061512a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e1906151bc565b60405180910390fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661329057600760159054906101000a900460ff1661328f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328690615228565b60405180910390fd5b5b600084036132ac576132a486866000612e79565b505050613a3f565b600760149054906101000a900460ff161580156133135750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a30576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080156134c257601154935060125492506016549150601b60009054906101000a900460ff16156134bd57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134369190614cb0565b421015613478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346f90615294565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613789565b601354935060145492506015549150601b60009054906101000a900460ff1615613714576002601f546134f59190614cb0565b4311613536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352d90615300565b60405180910390fd5b601c543a111561357b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135729061536c565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f3906153d8565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136499190614cb0565b42101561368b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368290615294565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff161561378857600061373487611946565b9050600e5486826137459190614cb0565b1115613786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377d9061546a565b60405180910390fd5b505b5b60006137b0836137a286886128fa90919063ffffffff16565b6128fa90919063ffffffff16565b905060006137bd30611946565b9050600060105482101590508080156138205750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561399e576001600760146101000a81548160ff0219169083151502179055506000601760009054906101000a900460ff16801561385e5750600087115b1561394e57600061387c6008546009546128fa90919063ffffffff16565b905060006138a7826138996009548861296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138d2836138c46008548961296090919063ffffffff16565b6129da90919063ffffffff16565b905060006138fd600b546138ef8d8661296090919063ffffffff16565b6129da90919063ffffffff16565b90506000613928600a5461391a8e8661296090919063ffffffff16565b6129da90919063ffffffff16565b905061393d82826128fa90919063ffffffff16565b955061394886613df4565b50505050505b600061396582601054612c6690919063ffffffff16565b905061397081612a24565b600060098190555060006008819055506000600760146101000a81548160ff02191690831515021790555050505b60006139c660646139b8868c61296090919063ffffffff16565b6129da90919063ffffffff16565b90506139db818a612c6690919063ffffffff16565b98508415613a03576139f8816008546128fa90919063ffffffff16565b600881905550613a1f565b613a18816009546128fa90919063ffffffff16565b6009819055505b613a2a8b3083612e79565b50505050505b613a3b868686612e79565b5050505b505050565b6000838311158290613a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a839190614089565b60405180910390fd5b5060008385613a9b919061548a565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008083118290613b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b879190614089565b60405180910390fd5b5060008385613b9f9190614bed565b9050809150509392505050565b6000600267ffffffffffffffff811115613bc957613bc86142c1565b5b604051908082528060200260200182016040528015613bf75781602001602082028036833780820191505090505b5090503081600081518110613c0f57613c0e61497c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cda91906154d3565b81600181518110613cee57613ced61497c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d5530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613db99594939291906155f9565b600060405180830381600087803b158015613dd357600080fd5b505af1158015613de7573d6000803e3d6000fd5b505050505050565b505050565b6000613e0a6002836129da90919063ffffffff16565b90506000613e218284612c6690919063ffffffff16565b90506000479050613e3183613bac565b6000613e468247612c6690919063ffffffff16565b9050613e528382613e94565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613e8593929190615653565b60405180910390a15050505050565b613ec130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cb0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f0d611e5f565b426040518863ffffffff1660e01b8152600401613f2f9695949392919061568a565b60606040518083038185885af1158015613f4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f729190615700565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613fa081613f8d565b8114613fab57600080fd5b50565b600081359050613fbd81613f97565b92915050565b600060208284031215613fd957613fd8613f83565b5b6000613fe784828501613fae565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561402a57808201518184015260208101905061400f565b83811115614039576000848401525b50505050565b6000601f19601f8301169050919050565b600061405b82613ff0565b6140658185613ffb565b935061407581856020860161400c565b61407e8161403f565b840191505092915050565b600060208201905081810360008301526140a38184614050565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140d6826140ab565b9050919050565b6140e6816140cb565b81146140f157600080fd5b50565b600081359050614103816140dd565b92915050565b60008115159050919050565b61411e81614109565b811461412957600080fd5b50565b60008135905061413b81614115565b92915050565b6000806040838503121561415857614157613f83565b5b6000614166858286016140f4565b92505060206141778582860161412c565b9150509250929050565b6000806040838503121561419857614197613f83565b5b60006141a6858286016140f4565b92505060206141b785828601613fae565b9150509250929050565b6141ca81614109565b82525050565b60006020820190506141e560008301846141c1565b92915050565b6000819050919050565b600061421061420b614206846140ab565b6141eb565b6140ab565b9050919050565b6000614222826141f5565b9050919050565b600061423482614217565b9050919050565b61424481614229565b82525050565b600060208201905061425f600083018461423b565b92915050565b61426e81613f8d565b82525050565b60006020820190506142896000830184614265565b92915050565b6000602082840312156142a5576142a4613f83565b5b60006142b3848285016140f4565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142f98261403f565b810181811067ffffffffffffffff82111715614318576143176142c1565b5b80604052505050565b600061432b613f79565b905061433782826142f0565b919050565b600067ffffffffffffffff821115614357576143566142c1565b5b602082029050602081019050919050565b600080fd5b600061438061437b8461433c565b614321565b905080838252602082019050602084028301858111156143a3576143a2614368565b5b835b818110156143cc57806143b888826140f4565b8452602084019350506020810190506143a5565b5050509392505050565b600082601f8301126143eb576143ea6142bc565b5b81356143fb84826020860161436d565b91505092915050565b600067ffffffffffffffff82111561441f5761441e6142c1565b5b602082029050602081019050919050565b600061444361443e84614404565b614321565b9050808382526020820190506020840283018581111561446657614465614368565b5b835b8181101561448f578061447b8882613fae565b845260208401935050602081019050614468565b5050509392505050565b600082601f8301126144ae576144ad6142bc565b5b81356144be848260208601614430565b91505092915050565b600080604083850312156144de576144dd613f83565b5b600083013567ffffffffffffffff8111156144fc576144fb613f88565b5b614508858286016143d6565b925050602083013567ffffffffffffffff81111561452957614528613f88565b5b61453585828601614499565b9150509250929050565b60008060006060848603121561455857614557613f83565b5b6000614566868287016140f4565b9350506020614577868287016140f4565b925050604061458886828701613fae565b9150509250925092565b600060ff82169050919050565b6145a881614592565b82525050565b60006020820190506145c3600083018461459f565b92915050565b6145d2816140cb565b82525050565b60006020820190506145ed60008301846145c9565b92915050565b60006020828403121561460957614608613f83565b5b60006146178482850161412c565b91505092915050565b600061462b826140ab565b9050919050565b61463b81614620565b82525050565b60006020820190506146566000830184614632565b92915050565b60008060008060008060c0878903121561467957614678613f83565b5b600061468789828a01613fae565b965050602061469889828a01613fae565b95505060406146a989828a01613fae565b94505060606146ba89828a01613fae565b93505060806146cb89828a01613fae565b92505060a06146dc89828a01613fae565b9150509295509295509295565b60008060408385031215614700576146ff613f83565b5b600061470e858286016140f4565b925050602061471f858286016140f4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061475f602083613ffb565b915061476a82614729565b602082019050919050565b6000602082019050818103600083015261478e81614752565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147cf82613f8d565b91506147da83613f8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561481357614812614795565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061486557607f821691505b6020821081036148785761487761481e565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b60006148b4601e83613ffb565b91506148bf8261487e565b602082019050919050565b600060208201905081810360008301526148e3816148a7565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614946602283613ffb565b9150614951826148ea565b604082019050919050565b6000602082019050818103600083015261497581614939565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006149b682613f8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149e8576149e7614795565b5b600182019050919050565b50565b6000614a03600083613ffb565b9150614a0e826149f3565b600082019050919050565b60006020820190508181036000830152614a32816149f6565b9050919050565b600060c082019050614a4e6000830189614265565b614a5b6020830188614265565b614a686040830187614265565b614a756060830186614265565b614a826080830185614265565b614a8f60a0830184614265565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614af6602683613ffb565b9150614b0182614a9a565b604082019050919050565b60006020820190508181036000830152614b2581614ae9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b88602683613ffb565b9150614b9382614b2c565b604082019050919050565b60006020820190508181036000830152614bb781614b7b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bf882613f8d565b9150614c0383613f8d565b925082614c1357614c12614bbe565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614c7a602883613ffb565b9150614c8582614c1e565b604082019050919050565b60006020820190508181036000830152614ca981614c6d565b9050919050565b6000614cbb82613f8d565b9150614cc683613f8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cfb57614cfa614795565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d3c601b83613ffb565b9150614d4782614d06565b602082019050919050565b60006020820190508181036000830152614d6b81614d2f565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dce602183613ffb565b9150614dd982614d72565b604082019050919050565b60006020820190508181036000830152614dfd81614dc1565b9050919050565b600081905092915050565b6000614e1c600083614e04565b9150614e27826149f3565b600082019050919050565b6000614e3d82614e0f565b9150819050919050565b6000604082019050614e5c6000830185614265565b614e6960208301846141c1565b9392505050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ecc602483613ffb565b9150614ed782614e70565b604082019050919050565b60006020820190508181036000830152614efb81614ebf565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f5e602283613ffb565b9150614f6982614f02565b604082019050919050565b60006020820190508181036000830152614f8d81614f51565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ff0602583613ffb565b9150614ffb82614f94565b604082019050919050565b6000602082019050818103600083015261501f81614fe3565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615082602383613ffb565b915061508d82615026565b604082019050919050565b600060208201905081810360008301526150b181615075565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615114602683613ffb565b915061511f826150b8565b604082019050919050565b6000602082019050818103600083015261514381615107565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151a6602483613ffb565b91506151b18261514a565b604082019050919050565b600060208201905081810360008301526151d581615199565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000615212602083613ffb565b915061521d826151dc565b602082019050919050565b6000602082019050818103600083015261524181615205565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061527e601683613ffb565b915061528982615248565b602082019050919050565b600060208201905081810360008301526152ad81615271565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006152ea601283613ffb565b91506152f5826152b4565b602082019050919050565b60006020820190508181036000830152615319816152dd565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615356601883613ffb565b915061536182615320565b602082019050919050565b6000602082019050818103600083015261538581615349565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006153c2601483613ffb565b91506153cd8261538c565b602082019050919050565b600060208201905081810360008301526153f1816153b5565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615454602483613ffb565b915061545f826153f8565b604082019050919050565b6000602082019050818103600083015261548381615447565b9050919050565b600061549582613f8d565b91506154a083613f8d565b9250828210156154b3576154b2614795565b5b828203905092915050565b6000815190506154cd816140dd565b92915050565b6000602082840312156154e9576154e8613f83565b5b60006154f7848285016154be565b91505092915050565b6000819050919050565b600061552561552061551b84615500565b6141eb565b613f8d565b9050919050565b6155358161550a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615570816140cb565b82525050565b60006155828383615567565b60208301905092915050565b6000602082019050919050565b60006155a68261553b565b6155b08185615546565b93506155bb83615557565b8060005b838110156155ec5781516155d38882615576565b97506155de8361558e565b9250506001810190506155bf565b5085935050505092915050565b600060a08201905061560e6000830188614265565b61561b602083018761552c565b818103604083015261562d818661559b565b905061563c60608301856145c9565b6156496080830184614265565b9695505050505050565b60006060820190506156686000830186614265565b6156756020830185614265565b6156826040830184614265565b949350505050565b600060c08201905061569f60008301896145c9565b6156ac6020830188614265565b6156b9604083018761552c565b6156c6606083018661552c565b6156d360808301856145c9565b6156e060a0830184614265565b979650505050505050565b6000815190506156fa81613f97565b92915050565b60008060006060848603121561571957615718613f83565b5b6000615727868287016156eb565b9350506020615738868287016156eb565b9250506040615749868287016156eb565b915050925092509256fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207e3dc2d1258b64feb83c6fb91c9c072702afad536161ab60c44e82d3e2a1f24c64736f6c634300080d0033

Deployed Bytecode Sourcemap

15458:15255:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28640:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3341:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19876:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4255:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15534:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3662:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16801:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19677:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15726:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30149:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4432:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19082:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4785:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15690:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15584:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16499:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16252:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15647:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22745:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16112:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19464:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21012:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20220:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20858:146;;;;;;;;;;;;;:::i;:::-;;3778:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7233:148;;;;;;;;;;;;;:::i;:::-;;21706:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15836:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20065:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19220:232;;;;;;;;;;;;;:::i;:::-;;16763:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7019:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15881:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16035;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3449:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21926:811;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21356:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16187:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16218:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5011:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20327:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3913:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16729:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16360:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20438:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15953:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21140:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4096:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15995:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16150:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7389:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16074:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15922:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20626:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28640:443;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28738:6:::1;28728;:17;;;;:::i;:::-;28719:26;;28756:19;28778:25;28792:10;;28778:9;;:13;;:25;;;;:::i;:::-;28756:47;;28814:15;28832:38;28858:11;28832:21;28843:9;;28832:6;:10;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;28814:56;;28881:16;28900:39;28927:11;28900:22;28911:10;;28900:6;:10;;:22;;;;:::i;:::-;:26;;:39;;;;:::i;:::-;28881:58;;28952:28;28973:6;28952:20;:28::i;:::-;29005:22;29019:7;29005:9;;:13;;:22;;;;:::i;:::-;28993:9;:34;;;;29051:24;29066:8;29051:10;;:14;;:24;;;;:::i;:::-;29038:10;:37;;;;28708:375;;;28640:443:::0;:::o;3341:100::-;3395:13;3428:5;3421:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3341:100;:::o;19876:181::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19991:8:::1;19960:19;:28;19980:7;19960:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20031:7;20015:34;;;20040:8;20015:34;;;;;;:::i;:::-;;;;;;;;19876:181:::0;;:::o;4255:169::-;4338:4;4355:39;4364:12;:10;:12::i;:::-;4378:7;4387:6;4355:8;:39::i;:::-;4412:4;4405:11;;4255:169;;;;:::o;15534:41::-;;;;;;;;;;;;;:::o;3662:108::-;3723:7;3750:12;;3743:19;;3662:108;:::o;16801:33::-;;;;:::o;19677:187::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19775:4:::1;19745:19;:27;19765:6;19745:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19810:6;19790:9;;:27;;;;;;;;;;;;;;;;;;19833:23;19849:6;19833:23;;;;;;:::i;:::-;;;;;;;;19677:187:::0;:::o;15726:28::-;;;;:::o;30149:561::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30321:6:::1;:13;30296:14;:21;:38;30288:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30413:3;30388:14;:21;:28;;30380:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;30471:9;30466:237;30490:14;:21;30486:1;:25;30466:237;;;30533:14;30550;30565:1;30550:17;;;;;;;;:::i;:::-;;;;;;;;30533:34;;30582:21;30619:6;30606;30613:1;30606:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;30582:44;;30641:50;30657:10;30669:6;30677:13;30641:15;:50::i;:::-;30518:185;;30513:3;;;;;:::i;:::-;;;;30466:237;;;;30149:561:::0;;:::o;4432:345::-;4545:4;4562:36;4572:6;4580:9;4591:6;4562:9;:36::i;:::-;4609:138;4618:6;4626:12;:10;:12::i;:::-;4640:106;4678:6;4640:106;;;;;;;;;;;;;;;;;:11;:19;4652:6;4640:19;;;;;;;;;;;;;;;:33;4660:12;:10;:12::i;:::-;4640:33;;;;;;;;;;;;;;;;:37;;:106;;;;;:::i;:::-;4609:8;:138::i;:::-;4765:4;4758:11;;4432:345;;;;;:::o;19082:93::-;19140:5;19165:2;19158:9;;19082:93;:::o;4785:218::-;4873:4;4890:83;4899:12;:10;:12::i;:::-;4913:7;4922:50;4961:10;4922:11;:25;4934:12;:10;:12::i;:::-;4922:25;;;;;;;;;;;;;;;:34;4948:7;4922:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4890:8;:83::i;:::-;4991:4;4984:11;;4785:218;;;;:::o;15690:29::-;;;;:::o;15584:28::-;;;;;;;;;;;;;:::o;16499:33::-;;;;;;;;;;;;;:::o;16252:40::-;;;;;;;;;;;;;:::o;15647:34::-;;;;;;;;;;;;;:::o;22745:126::-;22811:4;22835:19;:28;22855:7;22835:28;;;;;;;;;;;;;;;;;;;;;;;;;22828:35;;22745:126;;;:::o;16112:31::-;;;;:::o;19464:205::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19568:4:::1;19538:19;:27;19558:6;19538:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19609:6;19583:15;;:33;;;;;;;;;;;;;;;;;;19632:29;19654:6;19632:29;;;;;;:::i;:::-;;;;;;;;19464:205:::0;:::o;21012:120::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21117:6:::1;21107;:17;;;;:::i;:::-;21086:18;:38;;;;21012:120:::0;:::o;20220:99::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20306:5:::1;20289:14;;:22;;;;;;;;;;;;;;;;;;20220:99:::0;:::o;20858:146::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20905:17:::1;20925:21;20905:41;;20965:10;20957:28;;:39;20986:9;20957:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20894:110;20858:146::o:0;3778:127::-;3852:7;3879:9;:18;3889:7;3879:18;;;;;;;;;;;;;;;;3872:25;;3778:127;;;:::o;7233:148::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7340:1:::1;7303:40;;7324:6;;;;;;;;;;;7303:40;;;;;;;;;;;;7371:1;7354:6;;:19;;;;;;;;;;;;;;;;;;7233:148::o:0;21706:212::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21807:4:::1;21775:19;:29;21795:8;21775:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21868:4;21822:33;:43;21856:8;21822:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;21883:27;21901:8;21883:17;:27::i;:::-;21706:212:::0;:::o;15836:38::-;;;;;;;;;;;;;:::o;20065:147::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20198:6:::1;20154:33;:41;20188:6;20154:41;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20065:147:::0;;:::o;19220:232::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19284:14:::1;;;;;;;;;;;19283:15;19275:24;;;::::0;::::1;;19327:4;19310:14;;:21;;;;;;;;;;;;;;;;;;19356:12;19342:11;:26;;;;19397:15;19379;:33;;;;19428:16;;;;;;;;;;19220:232::o:0;16763:30::-;;;;:::o;7019:79::-;7057:7;7084:6;;;;;;;;;;;7077:13;;7019:79;:::o;15881:32::-;;;;;;;;;;;;;:::o;16035:::-;;;;:::o;3449:104::-;3505:13;3538:7;3531:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3449:104;:::o;21926:811::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22143:12:::1;22124:16;:31;;;;22184:12;22166:15;:30;;;;22227:13;22207:17;:33;;;;22270:13;22251:16;:32;;;;22306:6;22294:9;:18;;;;22336:7;22323:10;:20;;;;22372:55;22416:10;;22372:39;22394:16;;22372:17;;:21;;:39;;;;:::i;:::-;:43;;:55;;;;:::i;:::-;22356:13;:71;;;;22453:52;22495:9;;22453:37;22474:15;;22453:16;;:20;;:37;;;;:::i;:::-;:41;;:52;;;;:::i;:::-;22438:12;:67;;;;22552:2;22535:13;;:19;;:41;;;;;22574:2;22558:12;;:18;;22535:41;22527:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22599:130;22610:17;;22629:16;;22647:10;;22659:16;;22702:15;;22719:9;;22599:130;;;;;;;;;;;:::i;:::-;;;;;;;;21926:811:::0;;;;;;:::o;21356:140::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21447:41:::1;21476:4;21482:5;21447:28;:41::i;:::-;21356:140:::0;;:::o;16187:24::-;;;;:::o;16218:25::-;;;;:::o;5011:286::-;5104:4;5121:146;5130:12;:10;:12::i;:::-;5144:7;5153:113;5192:15;5153:113;;;;;;;;;;;;;;;;;:11;:25;5165:12;:10;:12::i;:::-;5153:25;;;;;;;;;;;;;;;:34;5179:7;5153:34;;;;;;;;;;;;;;;;:38;;:113;;;;;:::i;:::-;5121:8;:146::i;:::-;5285:4;5278:11;;5011:286;;;;:::o;20327:103::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20417:5:::1;20398:16;;:24;;;;;;;;;;;;;;;;;;20327:103:::0;:::o;3913:175::-;3999:4;4016:42;4026:12;:10;:12::i;:::-;4040:9;4051:6;4016:9;:42::i;:::-;4076:4;4069:11;;3913:175;;;;:::o;16729:26::-;;;;:::o;16360:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20438:174::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20526:3:::1;20517:5;:12;;20509:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20599:5;20583:13;:21;;;;20438:174:::0;:::o;15953:35::-;;;;;;;;;;;;;:::o;21140:208::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21245:7:::1;21220:32;;:21;;;;;;;;;;;:32;;::::0;21212:41:::1;;;::::0;::::1;;21288:7;21264:21;;:31;;;;;;;;;;;;;;;;;;21311:29;21332:7;21311:29;;;;;;:::i;:::-;;;;;;;;21140:208:::0;:::o;4096:151::-;4185:7;4212:11;:18;4224:5;4212:18;;;;;;;;;;;;;;;:27;4231:7;4212:27;;;;;;;;;;;;;;;;4205:34;;4096:151;;;;:::o;15995:33::-;;;;:::o;16150:30::-;;;;:::o;7389:244::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7498:1:::1;7478:22;;:8;:22;;::::0;7470:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7588:8;7559:38;;7580:6;;;;;;;;;;;7559:38;;;;;;;;;;;;7617:8;7608:6;;:17;;;;;;;;;;;;;;;;;;7389:244:::0;:::o;16074:31::-;;;;:::o;15922:24::-;;;;:::o;20626:218::-;7156:12;:10;:12::i;:::-;7146:22;;:6;;;;;;;;;;;:22;;;7138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20710:6:::1;20701:5;:16;;;;:::i;:::-;20693:24;;20760:3;20745:12;;:18;;;;:::i;:::-;20736:5;:27;;20728:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;20831:5;20819:9;:17;;;;20626:218:::0;:::o;575:179::-;633:7;653:9;669:1;665;:5;;;;:::i;:::-;653:17;;694:1;689;:6;;681:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;745:1;738:8;;;575:179;;;;:::o;254:98::-;307:7;334:10;327:17;;254:98;:::o;1104:248::-;1162:7;1191:1;1186;:6;1182:47;;1216:1;1209:8;;;;1182:47;1241:9;1257:1;1253;:5;;;;:::i;:::-;1241:17;;1286:1;1281;1277;:5;;;;:::i;:::-;:10;1269:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1343:1;1336:8;;;1104:248;;;;;:::o;1360:132::-;1418:7;1445:39;1449:1;1452;1445:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1438:46;;1360:132;;;;:::o;29116:1025::-;29195:1;29185:6;:11;29181:50;29213:7;29181:50;29241:24;29258:6;29241:16;:24::i;:::-;29278:12;29293:4;29278:19;;29308:15;29326:4;29308:22;;29351:23;29413:31;29434:9;;29413:16;;:20;;:31;;;;:::i;:::-;29377:33;29399:10;;29377:17;;:21;;:33;;;;:::i;:::-;:67;;;;:::i;:::-;29351:93;;29457:19;29509:1;29491:15;:19;29487:108;;;29541:42;29567:15;29541:21;:25;;:42;;;;:::i;:::-;29527:56;;29487:108;29605:23;29673:11;29631:39;29652:17;;29631:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;29605:79;;29695:17;29743:11;29715:25;29729:10;;29715:9;;:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;29695:59;;29797:1;29779:15;:19;29775:123;;;29837:15;;;;;;;;;;;29829:29;;29866:15;29829:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29815:71;;;;;29775:123;29934:1;29922:9;:13;29918:108;;;29977:9;;;;;;;;;;;29969:23;;30000:9;29969:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29952:62;;;;;29918:108;30043:90;30071:15;30101:7;:21;;;;;30112:10;30101:21;30043:90;;;;;;;:::i;:::-;;;;;;;;29170:971;;;;;;29116:1025;;:::o;762:136::-;820:7;847:43;851:1;854;847:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;840:50;;762:136;;;;:::o;6237:346::-;6356:1;6339:19;;:5;:19;;;6331:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6437:1;6418:21;;:7;:21;;;6410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6521:6;6491:11;:18;6503:5;6491:18;;;;;;;;;;;;;;;:27;6510:7;6491:27;;;;;;;;;;;;;;;:36;;;;6559:7;6543:32;;6552:5;6543:32;;;6568:6;6543:32;;;;;;:::i;:::-;;;;;;;;6237:346;;;:::o;5305:538::-;5429:1;5411:20;;:6;:20;;;5403:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5513:1;5492:23;;:9;:23;;;5484:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5568:47;5589:6;5597:9;5608:6;5568:20;:47::i;:::-;5648:70;5670:6;5648:70;;;;;;;;;;;;;;;;;:9;:17;5658:6;5648:17;;;;;;;;;;;;;;;;:21;;:70;;;;;:::i;:::-;5628:9;:17;5638:6;5628:17;;;;;;;;;;;;;;;:90;;;;5752:32;5777:6;5752:9;:20;5762:9;5752:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5729:9;:20;5739:9;5729:20;;;;;;;;;;;;;;;:55;;;;5817:9;5800:35;;5809:6;5800:35;;;5828:6;5800:35;;;;;;:::i;:::-;;;;;;;;5305:538;;;:::o;22879:4235::-;22995:1;22979:18;;:4;:18;;;22971:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23073:1;23059:16;;:2;:16;;;23051:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23129:21;23161:20;23192:14;23224:33;:39;23258:4;23224:39;;;;;;;;;;;;;;;;;;;;;;;;;23219:142;;23288:14;;;;;;;;;;;23280:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;23219:142;23387:1;23377:6;:11;23373:3678;;23405:28;23421:4;23427:2;23431:1;23405:15;:28::i;:::-;23448:7;;;;;23373:3678;23511:8;;;;;;;;;;;23510:9;:39;;;;;23524:19;:25;23544:4;23524:25;;;;;;;;;;;;;;;;;;;;;;;;;23523:26;23510:39;:67;;;;;23554:19;:23;23574:2;23554:23;;;;;;;;;;;;;;;;;;;;;;;;;23553:24;23510:67;23492:3559;;;23604:14;23621:25;:29;23647:2;23621:29;;;;;;;;;;;;;;;;;;;;;;;;;23604:46;;23669:9;23665:1514;;;23715:17;;23699:33;;23766:16;;23751:31;;23810:10;;23801:19;;23845:14;;;;;;;;;;;23841:269;;;23949:13;;23907:28;:39;23936:9;23907:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;23888:15;:74;;23880:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;24075:15;24033:28;:39;24062:9;24033:39;;;;;;;;;;;;;;;:57;;;;23841:269;23665:1514;;;24194:16;;24178:32;;24244:15;;24229:30;;24287:9;;24278:18;;24321:14;;;;;;;;;;;24317:598;;;24393:1;24379:11;;:15;;;;:::i;:::-;24364:12;:30;24356:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24458:13;;24443:11;:28;;24435:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24565:12;24526:24;:35;24551:9;24526:35;;;;;;;;;;;;;;;;:51;24518:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24689:13;;24647:28;:39;24676:9;24647:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;24628:15;:74;;24620:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;24811:12;24773:24;:35;24798:9;24773:35;;;;;;;;;;;;;;;:50;;;;24884:15;24842:28;:39;24871:9;24842:39;;;;;;;;;;;;;;;:57;;;;24317:598;24935:16;;;;;;;;;;;24931:233;;;24968:32;25003:13;25013:2;25003:9;:13::i;:::-;24968:48;;25076:9;;25066:6;25039:24;:33;;;;:::i;:::-;:46;;25031:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;24953:211;24931:233;23665:1514;25195:17;25215:43;25251:6;25215:31;25233:12;25215:13;:17;;:31;;;;:::i;:::-;:35;;:43;;;;:::i;:::-;25195:63;;25275:28;25306:24;25324:4;25306:9;:24::i;:::-;25275:55;;25347:12;25386:18;;25362:20;:42;;25347:57;;25425:7;:43;;;;;25437:25;:31;25463:4;25437:31;;;;;;;;;;;;;;;;;;;;;;;;;25436:32;25425:43;25421:1272;;;25500:4;25489:8;;:15;;;;;;;;;;;;;;;;;;25525:18;25568:21;;;;;;;;;;;:41;;;;;25608:1;25593:12;:16;25568:41;25564:875;;;25634:20;25657:25;25671:10;;25657:9;;:13;;:25;;;;:::i;:::-;25634:48;;25705:24;25732:105;25824:12;25732:61;25783:9;;25732:20;:50;;:61;;;;:::i;:::-;:91;;:105;;;;:::i;:::-;25705:132;;25860:22;25885:106;25978:12;25885:62;25936:10;;25885:20;:50;;:62;;;;:::i;:::-;:92;;:106;;;;:::i;:::-;25860:131;;26016:21;26040:104;26131:12;;26040:60;26087:12;26040:16;:46;;:60;;;;:::i;:::-;:90;;:104;;;;:::i;:::-;26016:128;;26169:22;26194:103;26283:13;;26194:58;26239:12;26194:14;:44;;:58;;;;:::i;:::-;:88;;:103;;;;:::i;:::-;26169:128;;26335:33;26354:13;26335:14;:18;;:33;;;;:::i;:::-;26322:46;;26393:26;26408:10;26393:14;:26::i;:::-;25611:828;;;;;25564:875;26459:24;26486:34;26509:10;26486:18;;:22;;:34;;;;:::i;:::-;26459:61;;26539:38;26560:16;26539:20;:38::i;:::-;26608:1;26596:9;:13;;;;26641:1;26628:10;:14;;;;26672:5;26661:8;;:16;;;;;;;;;;;;;;;;;;25470:1223;;25421:1272;26709:12;26724:30;26750:3;26724:21;26735:9;26724:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;26709:45;;26780:16;26791:4;26780:6;:10;;:16;;;;:::i;:::-;26771:25;;26817:9;26813:155;;;26860:20;26875:4;26860:10;;:14;;:20;;;;:::i;:::-;26847:10;:33;;;;26813:155;;;26933:19;26947:4;26933:9;;:13;;:19;;;;:::i;:::-;26921:9;:31;;;;26813:155;26984:42;27000:4;27014;27021;26984:15;:42::i;:::-;23589:3462;;;;;23492:3559;27063:33;27079:4;27085:2;27089:6;27063:15;:33::i;:::-;22958:4156;;;22879:4235;;;;:::o;906:190::-;992:7;1025:1;1020;:6;;1028:12;1012:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1052:9;1068:1;1064;:5;;;;:::i;:::-;1052:17;;1087:1;1080:8;;;906:190;;;;;:::o;21504:188::-;21621:5;21587:25;:31;21613:4;21587:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21678:5;21644:40;;21672:4;21644:40;;;;;;;;;;;;21504:188;;:::o;1500:189::-;1586:7;1618:1;1614;:5;1621:12;1606:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1645:9;1661:1;1657;:5;;;;:::i;:::-;1645:17;;1680:1;1673:8;;;1500:189;;;;;:::o;27612:499::-;27678:21;27716:1;27702:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27678:40;;27747:4;27729;27734:1;27729:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27773:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27763:4;27768:1;27763:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27806:62;27823:4;27838:15;;;;;;;;;;;27856:11;27806:8;:62::i;:::-;27879:15;;;;;;;;;;;:66;;;27960:11;27986:1;28030:4;28057;28077:15;27879:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27667:444;27612:499;:::o;6591:91::-;;;;:::o;27124:480::-;27183:12;27198:13;27209:1;27198:6;:10;;:13;;;;:::i;:::-;27183:28;;27222:17;27242:16;27253:4;27242:6;:10;;:16;;;;:::i;:::-;27222:36;;27269:22;27294:21;27269:46;;27326:22;27343:4;27326:16;:22::i;:::-;27429:18;27450:41;27476:14;27450:21;:25;;:41;;;;:::i;:::-;27429:62;;27502:35;27515:9;27526:10;27502:12;:35::i;:::-;27553:43;27568:4;27574:10;27586:9;27553:43;;;;;;;;:::i;:::-;;;;;;;;27172:432;;;;27124:480;:::o;28119:513::-;28267:62;28284:4;28299:15;;;;;;;;;;;28317:11;28267:8;:62::i;:::-;28372:15;;;;;;;;;;;:31;;;28411:9;28444:4;28464:11;28490:1;28533;28576:7;:5;:7::i;:::-;28598:15;28372:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28119:513;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:90::-;2956:7;2999:5;2992:13;2985:21;2974:32;;2922:90;;;:::o;3018:116::-;3088:21;3103:5;3088:21;:::i;:::-;3081:5;3078:32;3068:60;;3124:1;3121;3114:12;3068:60;3018:116;:::o;3140:133::-;3183:5;3221:6;3208:20;3199:29;;3237:30;3261:5;3237:30;:::i;:::-;3140:133;;;;:::o;3279:468::-;3344:6;3352;3401:2;3389:9;3380:7;3376:23;3372:32;3369:119;;;3407:79;;:::i;:::-;3369:119;3527:1;3552:53;3597:7;3588:6;3577:9;3573:22;3552:53;:::i;:::-;3542:63;;3498:117;3654:2;3680:50;3722:7;3713:6;3702:9;3698:22;3680:50;:::i;:::-;3670:60;;3625:115;3279:468;;;;;:::o;3753:474::-;3821:6;3829;3878:2;3866:9;3857:7;3853:23;3849:32;3846:119;;;3884:79;;:::i;:::-;3846:119;4004:1;4029:53;4074:7;4065:6;4054:9;4050:22;4029:53;:::i;:::-;4019:63;;3975:117;4131:2;4157:53;4202:7;4193:6;4182:9;4178:22;4157:53;:::i;:::-;4147:63;;4102:118;3753:474;;;;;:::o;4233:109::-;4314:21;4329:5;4314:21;:::i;:::-;4309:3;4302:34;4233:109;;:::o;4348:210::-;4435:4;4473:2;4462:9;4458:18;4450:26;;4486:65;4548:1;4537:9;4533:17;4524:6;4486:65;:::i;:::-;4348:210;;;;:::o;4564:60::-;4592:3;4613:5;4606:12;;4564:60;;;:::o;4630:142::-;4680:9;4713:53;4731:34;4740:24;4758:5;4740:24;:::i;:::-;4731:34;:::i;:::-;4713:53;:::i;:::-;4700:66;;4630:142;;;:::o;4778:126::-;4828:9;4861:37;4892:5;4861:37;:::i;:::-;4848:50;;4778:126;;;:::o;4910:153::-;4987:9;5020:37;5051:5;5020:37;:::i;:::-;5007:50;;4910:153;;;:::o;5069:185::-;5183:64;5241:5;5183:64;:::i;:::-;5178:3;5171:77;5069:185;;:::o;5260:276::-;5380:4;5418:2;5407:9;5403:18;5395:26;;5431:98;5526:1;5515:9;5511:17;5502:6;5431:98;:::i;:::-;5260:276;;;;:::o;5542:118::-;5629:24;5647:5;5629:24;:::i;:::-;5624:3;5617:37;5542:118;;:::o;5666:222::-;5759:4;5797:2;5786:9;5782:18;5774:26;;5810:71;5878:1;5867:9;5863:17;5854:6;5810:71;:::i;:::-;5666:222;;;;:::o;5894:329::-;5953:6;6002:2;5990:9;5981:7;5977:23;5973:32;5970:119;;;6008:79;;:::i;:::-;5970:119;6128:1;6153:53;6198:7;6189:6;6178:9;6174:22;6153:53;:::i;:::-;6143:63;;6099:117;5894:329;;;;:::o;6229:117::-;6338:1;6335;6328:12;6352:180;6400:77;6397:1;6390:88;6497:4;6494:1;6487:15;6521:4;6518:1;6511:15;6538:281;6621:27;6643:4;6621:27;:::i;:::-;6613:6;6609:40;6751:6;6739:10;6736:22;6715:18;6703:10;6700:34;6697:62;6694:88;;;6762:18;;:::i;:::-;6694:88;6802:10;6798:2;6791:22;6581:238;6538:281;;:::o;6825:129::-;6859:6;6886:20;;:::i;:::-;6876:30;;6915:33;6943:4;6935:6;6915:33;:::i;:::-;6825:129;;;:::o;6960:311::-;7037:4;7127:18;7119:6;7116:30;7113:56;;;7149:18;;:::i;:::-;7113:56;7199:4;7191:6;7187:17;7179:25;;7259:4;7253;7249:15;7241:23;;6960:311;;;:::o;7277:117::-;7386:1;7383;7376:12;7417:710;7513:5;7538:81;7554:64;7611:6;7554:64;:::i;:::-;7538:81;:::i;:::-;7529:90;;7639:5;7668:6;7661:5;7654:21;7702:4;7695:5;7691:16;7684:23;;7755:4;7747:6;7743:17;7735:6;7731:30;7784:3;7776:6;7773:15;7770:122;;;7803:79;;:::i;:::-;7770:122;7918:6;7901:220;7935:6;7930:3;7927:15;7901:220;;;8010:3;8039:37;8072:3;8060:10;8039:37;:::i;:::-;8034:3;8027:50;8106:4;8101:3;8097:14;8090:21;;7977:144;7961:4;7956:3;7952:14;7945:21;;7901:220;;;7905:21;7519:608;;7417:710;;;;;:::o;8150:370::-;8221:5;8270:3;8263:4;8255:6;8251:17;8247:27;8237:122;;8278:79;;:::i;:::-;8237:122;8395:6;8382:20;8420:94;8510:3;8502:6;8495:4;8487:6;8483:17;8420:94;:::i;:::-;8411:103;;8227:293;8150:370;;;;:::o;8526:311::-;8603:4;8693:18;8685:6;8682:30;8679:56;;;8715:18;;:::i;:::-;8679:56;8765:4;8757:6;8753:17;8745:25;;8825:4;8819;8815:15;8807:23;;8526:311;;;:::o;8860:710::-;8956:5;8981:81;8997:64;9054:6;8997:64;:::i;:::-;8981:81;:::i;:::-;8972:90;;9082:5;9111:6;9104:5;9097:21;9145:4;9138:5;9134:16;9127:23;;9198:4;9190:6;9186:17;9178:6;9174:30;9227:3;9219:6;9216:15;9213:122;;;9246:79;;:::i;:::-;9213:122;9361:6;9344:220;9378:6;9373:3;9370:15;9344:220;;;9453:3;9482:37;9515:3;9503:10;9482:37;:::i;:::-;9477:3;9470:50;9549:4;9544:3;9540:14;9533:21;;9420:144;9404:4;9399:3;9395:14;9388:21;;9344:220;;;9348:21;8962:608;;8860:710;;;;;:::o;9593:370::-;9664:5;9713:3;9706:4;9698:6;9694:17;9690:27;9680:122;;9721:79;;:::i;:::-;9680:122;9838:6;9825:20;9863:94;9953:3;9945:6;9938:4;9930:6;9926:17;9863:94;:::i;:::-;9854:103;;9670:293;9593:370;;;;:::o;9969:894::-;10087:6;10095;10144:2;10132:9;10123:7;10119:23;10115:32;10112:119;;;10150:79;;:::i;:::-;10112:119;10298:1;10287:9;10283:17;10270:31;10328:18;10320:6;10317:30;10314:117;;;10350:79;;:::i;:::-;10314:117;10455:78;10525:7;10516:6;10505:9;10501:22;10455:78;:::i;:::-;10445:88;;10241:302;10610:2;10599:9;10595:18;10582:32;10641:18;10633:6;10630:30;10627:117;;;10663:79;;:::i;:::-;10627:117;10768:78;10838:7;10829:6;10818:9;10814:22;10768:78;:::i;:::-;10758:88;;10553:303;9969:894;;;;;:::o;10869:619::-;10946:6;10954;10962;11011:2;10999:9;10990:7;10986:23;10982:32;10979:119;;;11017:79;;:::i;:::-;10979:119;11137:1;11162:53;11207:7;11198:6;11187:9;11183:22;11162:53;:::i;:::-;11152:63;;11108:117;11264:2;11290:53;11335:7;11326:6;11315:9;11311:22;11290:53;:::i;:::-;11280:63;;11235:118;11392:2;11418:53;11463:7;11454:6;11443:9;11439:22;11418:53;:::i;:::-;11408:63;;11363:118;10869:619;;;;;:::o;11494:86::-;11529:7;11569:4;11562:5;11558:16;11547:27;;11494:86;;;:::o;11586:112::-;11669:22;11685:5;11669:22;:::i;:::-;11664:3;11657:35;11586:112;;:::o;11704:214::-;11793:4;11831:2;11820:9;11816:18;11808:26;;11844:67;11908:1;11897:9;11893:17;11884:6;11844:67;:::i;:::-;11704:214;;;;:::o;11924:118::-;12011:24;12029:5;12011:24;:::i;:::-;12006:3;11999:37;11924:118;;:::o;12048:222::-;12141:4;12179:2;12168:9;12164:18;12156:26;;12192:71;12260:1;12249:9;12245:17;12236:6;12192:71;:::i;:::-;12048:222;;;;:::o;12276:323::-;12332:6;12381:2;12369:9;12360:7;12356:23;12352:32;12349:119;;;12387:79;;:::i;:::-;12349:119;12507:1;12532:50;12574:7;12565:6;12554:9;12550:22;12532:50;:::i;:::-;12522:60;;12478:114;12276:323;;;;:::o;12605:104::-;12650:7;12679:24;12697:5;12679:24;:::i;:::-;12668:35;;12605:104;;;:::o;12715:142::-;12818:32;12844:5;12818:32;:::i;:::-;12813:3;12806:45;12715:142;;:::o;12863:254::-;12972:4;13010:2;12999:9;12995:18;12987:26;;13023:87;13107:1;13096:9;13092:17;13083:6;13023:87;:::i;:::-;12863:254;;;;:::o;13123:1057::-;13227:6;13235;13243;13251;13259;13267;13316:3;13304:9;13295:7;13291:23;13287:33;13284:120;;;13323:79;;:::i;:::-;13284:120;13443:1;13468:53;13513:7;13504:6;13493:9;13489:22;13468:53;:::i;:::-;13458:63;;13414:117;13570:2;13596:53;13641:7;13632:6;13621:9;13617:22;13596:53;:::i;:::-;13586:63;;13541:118;13698:2;13724:53;13769:7;13760:6;13749:9;13745:22;13724:53;:::i;:::-;13714:63;;13669:118;13826:2;13852:53;13897:7;13888:6;13877:9;13873:22;13852:53;:::i;:::-;13842:63;;13797:118;13954:3;13981:53;14026:7;14017:6;14006:9;14002:22;13981:53;:::i;:::-;13971:63;;13925:119;14083:3;14110:53;14155:7;14146:6;14135:9;14131:22;14110:53;:::i;:::-;14100:63;;14054:119;13123:1057;;;;;;;;:::o;14186:474::-;14254:6;14262;14311:2;14299:9;14290:7;14286:23;14282:32;14279:119;;;14317:79;;:::i;:::-;14279:119;14437:1;14462:53;14507:7;14498:6;14487:9;14483:22;14462:53;:::i;:::-;14452:63;;14408:117;14564:2;14590:53;14635:7;14626:6;14615:9;14611:22;14590:53;:::i;:::-;14580:63;;14535:118;14186:474;;;;;:::o;14666:182::-;14806:34;14802:1;14794:6;14790:14;14783:58;14666:182;:::o;14854:366::-;14996:3;15017:67;15081:2;15076:3;15017:67;:::i;:::-;15010:74;;15093:93;15182:3;15093:93;:::i;:::-;15211:2;15206:3;15202:12;15195:19;;14854:366;;;:::o;15226:419::-;15392:4;15430:2;15419:9;15415:18;15407:26;;15479:9;15473:4;15469:20;15465:1;15454:9;15450:17;15443:47;15507:131;15633:4;15507:131;:::i;:::-;15499:139;;15226:419;;;:::o;15651:180::-;15699:77;15696:1;15689:88;15796:4;15793:1;15786:15;15820:4;15817:1;15810:15;15837:348;15877:7;15900:20;15918:1;15900:20;:::i;:::-;15895:25;;15934:20;15952:1;15934:20;:::i;:::-;15929:25;;16122:1;16054:66;16050:74;16047:1;16044:81;16039:1;16032:9;16025:17;16021:105;16018:131;;;16129:18;;:::i;:::-;16018:131;16177:1;16174;16170:9;16159:20;;15837:348;;;;:::o;16191:180::-;16239:77;16236:1;16229:88;16336:4;16333:1;16326:15;16360:4;16357:1;16350:15;16377:320;16421:6;16458:1;16452:4;16448:12;16438:22;;16505:1;16499:4;16495:12;16526:18;16516:81;;16582:4;16574:6;16570:17;16560:27;;16516:81;16644:2;16636:6;16633:14;16613:18;16610:38;16607:84;;16663:18;;:::i;:::-;16607:84;16428:269;16377:320;;;:::o;16703:180::-;16843:32;16839:1;16831:6;16827:14;16820:56;16703:180;:::o;16889:366::-;17031:3;17052:67;17116:2;17111:3;17052:67;:::i;:::-;17045:74;;17128:93;17217:3;17128:93;:::i;:::-;17246:2;17241:3;17237:12;17230:19;;16889:366;;;:::o;17261:419::-;17427:4;17465:2;17454:9;17450:18;17442:26;;17514:9;17508:4;17504:20;17500:1;17489:9;17485:17;17478:47;17542:131;17668:4;17542:131;:::i;:::-;17534:139;;17261:419;;;:::o;17686:221::-;17826:34;17822:1;17814:6;17810:14;17803:58;17895:4;17890:2;17882:6;17878:15;17871:29;17686:221;:::o;17913:366::-;18055:3;18076:67;18140:2;18135:3;18076:67;:::i;:::-;18069:74;;18152:93;18241:3;18152:93;:::i;:::-;18270:2;18265:3;18261:12;18254:19;;17913:366;;;:::o;18285:419::-;18451:4;18489:2;18478:9;18474:18;18466:26;;18538:9;18532:4;18528:20;18524:1;18513:9;18509:17;18502:47;18566:131;18692:4;18566:131;:::i;:::-;18558:139;;18285:419;;;:::o;18710:180::-;18758:77;18755:1;18748:88;18855:4;18852:1;18845:15;18879:4;18876:1;18869:15;18896:233;18935:3;18958:24;18976:5;18958:24;:::i;:::-;18949:33;;19004:66;18997:5;18994:77;18991:103;;19074:18;;:::i;:::-;18991:103;19121:1;19114:5;19110:13;19103:20;;18896:233;;;:::o;19135:114::-;;:::o;19255:364::-;19397:3;19418:66;19482:1;19477:3;19418:66;:::i;:::-;19411:73;;19493:93;19582:3;19493:93;:::i;:::-;19611:1;19606:3;19602:11;19595:18;;19255:364;;;:::o;19625:419::-;19791:4;19829:2;19818:9;19814:18;19806:26;;19878:9;19872:4;19868:20;19864:1;19853:9;19849:17;19842:47;19906:131;20032:4;19906:131;:::i;:::-;19898:139;;19625:419;;;:::o;20050:775::-;20283:4;20321:3;20310:9;20306:19;20298:27;;20335:71;20403:1;20392:9;20388:17;20379:6;20335:71;:::i;:::-;20416:72;20484:2;20473:9;20469:18;20460:6;20416:72;:::i;:::-;20498;20566:2;20555:9;20551:18;20542:6;20498:72;:::i;:::-;20580;20648:2;20637:9;20633:18;20624:6;20580:72;:::i;:::-;20662:73;20730:3;20719:9;20715:19;20706:6;20662:73;:::i;:::-;20745;20813:3;20802:9;20798:19;20789:6;20745:73;:::i;:::-;20050:775;;;;;;;;;:::o;20831:225::-;20971:34;20967:1;20959:6;20955:14;20948:58;21040:8;21035:2;21027:6;21023:15;21016:33;20831:225;:::o;21062:366::-;21204:3;21225:67;21289:2;21284:3;21225:67;:::i;:::-;21218:74;;21301:93;21390:3;21301:93;:::i;:::-;21419:2;21414:3;21410:12;21403:19;;21062:366;;;:::o;21434:419::-;21600:4;21638:2;21627:9;21623:18;21615:26;;21687:9;21681:4;21677:20;21673:1;21662:9;21658:17;21651:47;21715:131;21841:4;21715:131;:::i;:::-;21707:139;;21434:419;;;:::o;21859:225::-;21999:34;21995:1;21987:6;21983:14;21976:58;22068:8;22063:2;22055:6;22051:15;22044:33;21859:225;:::o;22090:366::-;22232:3;22253:67;22317:2;22312:3;22253:67;:::i;:::-;22246:74;;22329:93;22418:3;22329:93;:::i;:::-;22447:2;22442:3;22438:12;22431:19;;22090:366;;;:::o;22462:419::-;22628:4;22666:2;22655:9;22651:18;22643:26;;22715:9;22709:4;22705:20;22701:1;22690:9;22686:17;22679:47;22743:131;22869:4;22743:131;:::i;:::-;22735:139;;22462:419;;;:::o;22887:180::-;22935:77;22932:1;22925:88;23032:4;23029:1;23022:15;23056:4;23053:1;23046:15;23073:185;23113:1;23130:20;23148:1;23130:20;:::i;:::-;23125:25;;23164:20;23182:1;23164:20;:::i;:::-;23159:25;;23203:1;23193:35;;23208:18;;:::i;:::-;23193:35;23250:1;23247;23243:9;23238:14;;23073:185;;;;:::o;23264:227::-;23404:34;23400:1;23392:6;23388:14;23381:58;23473:10;23468:2;23460:6;23456:15;23449:35;23264:227;:::o;23497:366::-;23639:3;23660:67;23724:2;23719:3;23660:67;:::i;:::-;23653:74;;23736:93;23825:3;23736:93;:::i;:::-;23854:2;23849:3;23845:12;23838:19;;23497:366;;;:::o;23869:419::-;24035:4;24073:2;24062:9;24058:18;24050:26;;24122:9;24116:4;24112:20;24108:1;24097:9;24093:17;24086:47;24150:131;24276:4;24150:131;:::i;:::-;24142:139;;23869:419;;;:::o;24294:305::-;24334:3;24353:20;24371:1;24353:20;:::i;:::-;24348:25;;24387:20;24405:1;24387:20;:::i;:::-;24382:25;;24541:1;24473:66;24469:74;24466:1;24463:81;24460:107;;;24547:18;;:::i;:::-;24460:107;24591:1;24588;24584:9;24577:16;;24294:305;;;;:::o;24605:177::-;24745:29;24741:1;24733:6;24729:14;24722:53;24605:177;:::o;24788:366::-;24930:3;24951:67;25015:2;25010:3;24951:67;:::i;:::-;24944:74;;25027:93;25116:3;25027:93;:::i;:::-;25145:2;25140:3;25136:12;25129:19;;24788:366;;;:::o;25160:419::-;25326:4;25364:2;25353:9;25349:18;25341:26;;25413:9;25407:4;25403:20;25399:1;25388:9;25384:17;25377:47;25441:131;25567:4;25441:131;:::i;:::-;25433:139;;25160:419;;;:::o;25585:220::-;25725:34;25721:1;25713:6;25709:14;25702:58;25794:3;25789:2;25781:6;25777:15;25770:28;25585:220;:::o;25811:366::-;25953:3;25974:67;26038:2;26033:3;25974:67;:::i;:::-;25967:74;;26050:93;26139:3;26050:93;:::i;:::-;26168:2;26163:3;26159:12;26152:19;;25811:366;;;:::o;26183:419::-;26349:4;26387:2;26376:9;26372:18;26364:26;;26436:9;26430:4;26426:20;26422:1;26411:9;26407:17;26400:47;26464:131;26590:4;26464:131;:::i;:::-;26456:139;;26183:419;;;:::o;26608:147::-;26709:11;26746:3;26731:18;;26608:147;;;;:::o;26761:398::-;26920:3;26941:83;27022:1;27017:3;26941:83;:::i;:::-;26934:90;;27033:93;27122:3;27033:93;:::i;:::-;27151:1;27146:3;27142:11;27135:18;;26761:398;;;:::o;27165:379::-;27349:3;27371:147;27514:3;27371:147;:::i;:::-;27364:154;;27535:3;27528:10;;27165:379;;;:::o;27550:320::-;27665:4;27703:2;27692:9;27688:18;27680:26;;27716:71;27784:1;27773:9;27769:17;27760:6;27716:71;:::i;:::-;27797:66;27859:2;27848:9;27844:18;27835:6;27797:66;:::i;:::-;27550:320;;;;;:::o;27876:223::-;28016:34;28012:1;28004:6;28000:14;27993:58;28085:6;28080:2;28072:6;28068:15;28061:31;27876:223;:::o;28105:366::-;28247:3;28268:67;28332:2;28327:3;28268:67;:::i;:::-;28261:74;;28344:93;28433:3;28344:93;:::i;:::-;28462:2;28457:3;28453:12;28446:19;;28105:366;;;:::o;28477:419::-;28643:4;28681:2;28670:9;28666:18;28658:26;;28730:9;28724:4;28720:20;28716:1;28705:9;28701:17;28694:47;28758:131;28884:4;28758:131;:::i;:::-;28750:139;;28477:419;;;:::o;28902:221::-;29042:34;29038:1;29030:6;29026:14;29019:58;29111:4;29106:2;29098:6;29094:15;29087:29;28902:221;:::o;29129:366::-;29271:3;29292:67;29356:2;29351:3;29292:67;:::i;:::-;29285:74;;29368:93;29457:3;29368:93;:::i;:::-;29486:2;29481:3;29477:12;29470:19;;29129:366;;;:::o;29501:419::-;29667:4;29705:2;29694:9;29690:18;29682:26;;29754:9;29748:4;29744:20;29740:1;29729:9;29725:17;29718:47;29782:131;29908:4;29782:131;:::i;:::-;29774:139;;29501:419;;;:::o;29926:224::-;30066:34;30062:1;30054:6;30050:14;30043:58;30135:7;30130:2;30122:6;30118:15;30111:32;29926:224;:::o;30156:366::-;30298:3;30319:67;30383:2;30378:3;30319:67;:::i;:::-;30312:74;;30395:93;30484:3;30395:93;:::i;:::-;30513:2;30508:3;30504:12;30497:19;;30156:366;;;:::o;30528:419::-;30694:4;30732:2;30721:9;30717:18;30709:26;;30781:9;30775:4;30771:20;30767:1;30756:9;30752:17;30745:47;30809:131;30935:4;30809:131;:::i;:::-;30801:139;;30528:419;;;:::o;30953:222::-;31093:34;31089:1;31081:6;31077:14;31070:58;31162:5;31157:2;31149:6;31145:15;31138:30;30953:222;:::o;31181:366::-;31323:3;31344:67;31408:2;31403:3;31344:67;:::i;:::-;31337:74;;31420:93;31509:3;31420:93;:::i;:::-;31538:2;31533:3;31529:12;31522:19;;31181:366;;;:::o;31553:419::-;31719:4;31757:2;31746:9;31742:18;31734:26;;31806:9;31800:4;31796:20;31792:1;31781:9;31777:17;31770:47;31834:131;31960:4;31834:131;:::i;:::-;31826:139;;31553:419;;;:::o;31978:225::-;32118:34;32114:1;32106:6;32102:14;32095:58;32187:8;32182:2;32174:6;32170:15;32163:33;31978:225;:::o;32209:366::-;32351:3;32372:67;32436:2;32431:3;32372:67;:::i;:::-;32365:74;;32448:93;32537:3;32448:93;:::i;:::-;32566:2;32561:3;32557:12;32550:19;;32209:366;;;:::o;32581:419::-;32747:4;32785:2;32774:9;32770:18;32762:26;;32834:9;32828:4;32824:20;32820:1;32809:9;32805:17;32798:47;32862:131;32988:4;32862:131;:::i;:::-;32854:139;;32581:419;;;:::o;33006:223::-;33146:34;33142:1;33134:6;33130:14;33123:58;33215:6;33210:2;33202:6;33198:15;33191:31;33006:223;:::o;33235:366::-;33377:3;33398:67;33462:2;33457:3;33398:67;:::i;:::-;33391:74;;33474:93;33563:3;33474:93;:::i;:::-;33592:2;33587:3;33583:12;33576:19;;33235:366;;;:::o;33607:419::-;33773:4;33811:2;33800:9;33796:18;33788:26;;33860:9;33854:4;33850:20;33846:1;33835:9;33831:17;33824:47;33888:131;34014:4;33888:131;:::i;:::-;33880:139;;33607:419;;;:::o;34032:182::-;34172:34;34168:1;34160:6;34156:14;34149:58;34032:182;:::o;34220:366::-;34362:3;34383:67;34447:2;34442:3;34383:67;:::i;:::-;34376:74;;34459:93;34548:3;34459:93;:::i;:::-;34577:2;34572:3;34568:12;34561:19;;34220:366;;;:::o;34592:419::-;34758:4;34796:2;34785:9;34781:18;34773:26;;34845:9;34839:4;34835:20;34831:1;34820:9;34816:17;34809:47;34873:131;34999:4;34873:131;:::i;:::-;34865:139;;34592:419;;;:::o;35017:172::-;35157:24;35153:1;35145:6;35141:14;35134:48;35017:172;:::o;35195:366::-;35337:3;35358:67;35422:2;35417:3;35358:67;:::i;:::-;35351:74;;35434:93;35523:3;35434:93;:::i;:::-;35552:2;35547:3;35543:12;35536:19;;35195:366;;;:::o;35567:419::-;35733:4;35771:2;35760:9;35756:18;35748:26;;35820:9;35814:4;35810:20;35806:1;35795:9;35791:17;35784:47;35848:131;35974:4;35848:131;:::i;:::-;35840:139;;35567:419;;;:::o;35992:168::-;36132:20;36128:1;36120:6;36116:14;36109:44;35992:168;:::o;36166:366::-;36308:3;36329:67;36393:2;36388:3;36329:67;:::i;:::-;36322:74;;36405:93;36494:3;36405:93;:::i;:::-;36523:2;36518:3;36514:12;36507:19;;36166:366;;;:::o;36538:419::-;36704:4;36742:2;36731:9;36727:18;36719:26;;36791:9;36785:4;36781:20;36777:1;36766:9;36762:17;36755:47;36819:131;36945:4;36819:131;:::i;:::-;36811:139;;36538:419;;;:::o;36963:174::-;37103:26;37099:1;37091:6;37087:14;37080:50;36963:174;:::o;37143:366::-;37285:3;37306:67;37370:2;37365:3;37306:67;:::i;:::-;37299:74;;37382:93;37471:3;37382:93;:::i;:::-;37500:2;37495:3;37491:12;37484:19;;37143:366;;;:::o;37515:419::-;37681:4;37719:2;37708:9;37704:18;37696:26;;37768:9;37762:4;37758:20;37754:1;37743:9;37739:17;37732:47;37796:131;37922:4;37796:131;:::i;:::-;37788:139;;37515:419;;;:::o;37940:170::-;38080:22;38076:1;38068:6;38064:14;38057:46;37940:170;:::o;38116:366::-;38258:3;38279:67;38343:2;38338:3;38279:67;:::i;:::-;38272:74;;38355:93;38444:3;38355:93;:::i;:::-;38473:2;38468:3;38464:12;38457:19;;38116:366;;;:::o;38488:419::-;38654:4;38692:2;38681:9;38677:18;38669:26;;38741:9;38735:4;38731:20;38727:1;38716:9;38712:17;38705:47;38769:131;38895:4;38769:131;:::i;:::-;38761:139;;38488:419;;;:::o;38913:223::-;39053:34;39049:1;39041:6;39037:14;39030:58;39122:6;39117:2;39109:6;39105:15;39098:31;38913:223;:::o;39142:366::-;39284:3;39305:67;39369:2;39364:3;39305:67;:::i;:::-;39298:74;;39381:93;39470:3;39381:93;:::i;:::-;39499:2;39494:3;39490:12;39483:19;;39142:366;;;:::o;39514:419::-;39680:4;39718:2;39707:9;39703:18;39695:26;;39767:9;39761:4;39757:20;39753:1;39742:9;39738:17;39731:47;39795:131;39921:4;39795:131;:::i;:::-;39787:139;;39514:419;;;:::o;39939:191::-;39979:4;39999:20;40017:1;39999:20;:::i;:::-;39994:25;;40033:20;40051:1;40033:20;:::i;:::-;40028:25;;40072:1;40069;40066:8;40063:34;;;40077:18;;:::i;:::-;40063:34;40122:1;40119;40115:9;40107:17;;39939:191;;;;:::o;40136:143::-;40193:5;40224:6;40218:13;40209:22;;40240:33;40267:5;40240:33;:::i;:::-;40136:143;;;;:::o;40285:351::-;40355:6;40404:2;40392:9;40383:7;40379:23;40375:32;40372:119;;;40410:79;;:::i;:::-;40372:119;40530:1;40555:64;40611:7;40602:6;40591:9;40587:22;40555:64;:::i;:::-;40545:74;;40501:128;40285:351;;;;:::o;40642:85::-;40687:7;40716:5;40705:16;;40642:85;;;:::o;40733:158::-;40791:9;40824:61;40842:42;40851:32;40877:5;40851:32;:::i;:::-;40842:42;:::i;:::-;40824:61;:::i;:::-;40811:74;;40733:158;;;:::o;40897:147::-;40992:45;41031:5;40992:45;:::i;:::-;40987:3;40980:58;40897:147;;:::o;41050:114::-;41117:6;41151:5;41145:12;41135:22;;41050:114;;;:::o;41170:184::-;41269:11;41303:6;41298:3;41291:19;41343:4;41338:3;41334:14;41319:29;;41170:184;;;;:::o;41360:132::-;41427:4;41450:3;41442:11;;41480:4;41475:3;41471:14;41463:22;;41360:132;;;:::o;41498:108::-;41575:24;41593:5;41575:24;:::i;:::-;41570:3;41563:37;41498:108;;:::o;41612:179::-;41681:10;41702:46;41744:3;41736:6;41702:46;:::i;:::-;41780:4;41775:3;41771:14;41757:28;;41612:179;;;;:::o;41797:113::-;41867:4;41899;41894:3;41890:14;41882:22;;41797:113;;;:::o;41946:732::-;42065:3;42094:54;42142:5;42094:54;:::i;:::-;42164:86;42243:6;42238:3;42164:86;:::i;:::-;42157:93;;42274:56;42324:5;42274:56;:::i;:::-;42353:7;42384:1;42369:284;42394:6;42391:1;42388:13;42369:284;;;42470:6;42464:13;42497:63;42556:3;42541:13;42497:63;:::i;:::-;42490:70;;42583:60;42636:6;42583:60;:::i;:::-;42573:70;;42429:224;42416:1;42413;42409:9;42404:14;;42369:284;;;42373:14;42669:3;42662:10;;42070:608;;;41946:732;;;;:::o;42684:831::-;42947:4;42985:3;42974:9;42970:19;42962:27;;42999:71;43067:1;43056:9;43052:17;43043:6;42999:71;:::i;:::-;43080:80;43156:2;43145:9;43141:18;43132:6;43080:80;:::i;:::-;43207:9;43201:4;43197:20;43192:2;43181:9;43177:18;43170:48;43235:108;43338:4;43329:6;43235:108;:::i;:::-;43227:116;;43353:72;43421:2;43410:9;43406:18;43397:6;43353:72;:::i;:::-;43435:73;43503:3;43492:9;43488:19;43479:6;43435:73;:::i;:::-;42684:831;;;;;;;;:::o;43521:442::-;43670:4;43708:2;43697:9;43693:18;43685:26;;43721:71;43789:1;43778:9;43774:17;43765:6;43721:71;:::i;:::-;43802:72;43870:2;43859:9;43855:18;43846:6;43802:72;:::i;:::-;43884;43952:2;43941:9;43937:18;43928:6;43884:72;:::i;:::-;43521:442;;;;;;:::o;43969:807::-;44218:4;44256:3;44245:9;44241:19;44233:27;;44270:71;44338:1;44327:9;44323:17;44314:6;44270:71;:::i;:::-;44351:72;44419:2;44408:9;44404:18;44395:6;44351:72;:::i;:::-;44433:80;44509:2;44498:9;44494:18;44485:6;44433:80;:::i;:::-;44523;44599:2;44588:9;44584:18;44575:6;44523:80;:::i;:::-;44613:73;44681:3;44670:9;44666:19;44657:6;44613:73;:::i;:::-;44696;44764:3;44753:9;44749:19;44740:6;44696:73;:::i;:::-;43969:807;;;;;;;;;:::o;44782:143::-;44839:5;44870:6;44864:13;44855:22;;44886:33;44913:5;44886:33;:::i;:::-;44782:143;;;;:::o;44931:663::-;45019:6;45027;45035;45084:2;45072:9;45063:7;45059:23;45055:32;45052:119;;;45090:79;;:::i;:::-;45052:119;45210:1;45235:64;45291:7;45282:6;45271:9;45267:22;45235:64;:::i;:::-;45225:74;;45181:128;45348:2;45374:64;45430:7;45421:6;45410:9;45406:22;45374:64;:::i;:::-;45364:74;;45319:129;45487:2;45513:64;45569:7;45560:6;45549:9;45545:22;45513:64;:::i;:::-;45503:74;;45458:129;44931:663;;;;;:::o

Swarm Source

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