ETH Price: $3,910.62 (+0.45%)

Token

ERC-20: SETH (SETH)
 

Overview

Max Total Supply

100,000,000,000,000 SETH

Holders

298

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
nftfits.eth
Balance
25,055,499,701.358884039691485837 SETH

Value
$0.00
0xf92ad0c97d3587baaedc2ba169498b70821ff061
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:
SETH

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SETH by Spacebar (@mrspcbr) | https://t.me/soyboyseth | https://twitter.com/soyboyseth
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

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

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

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }
        return true;
    }
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(from, to, amount);
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface 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 SETH is ERC20, Ownable { 
    using SafeMath for uint256;
    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    bool private swapping;
    bool public tradingEnabled = false;

    uint256 internal sellAmount = 1;
    uint256 internal buyAmount = 1;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet; 

    uint256 public maxWallet;
    bool public maxWalletEnabled = true;    
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public buyMarketingFees;
    bool public swapAndLiquifyEnabled = true;

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

    bool public limitsInEffect = true; 
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 private deadblocks;
    uint256 public launchtimestamp; 
    uint256 public cooldowntimer = 60; //COOLDOWN TIMER

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

    event UpdateFees(uint256 sellMarketingFees, uint256 buyMarketingFees);

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

    constructor() ERC20("SETH", "SETH") { 
        marketingWallet = payable(0xf430eb562f9EC9dceBAfffc7c66fAa6bd2000000); 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; 
        
        buyMarketingFees = 0;
        sellMarketingFees = 4;

        totalBuyFees = buyMarketingFees;
        totalSellFees = sellMarketingFees;

        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;

        // TOTAL SUPPLY IS SET HERE
        uint _totalSupply = 100_000_000_000_000 ether;
        _mint(owner(), _totalSupply); // only time internal mint function is ever called is to create supply
        maxWallet = 1_000_000_000_000 * (10**18); // 1%
        swapTokensAtAmount = _totalSupply / 1000;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

    receive() external payable {}

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

    function setMaxWalletEnabled(bool value) external onlyOwner {
        maxWalletEnabled = value;
    }    
    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setCanTransferBeforeTradingIsEnabled(address account, bool excluded) public onlyOwner {
        canTransferBeforeTradingIsEnabled[account] = excluded;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }  
    
    function sweep() external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH);
    }

    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 updateFees(uint256 marketingBuy, uint256 marketingSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        sellMarketingFees = marketingSell;

        totalSellFees = sellMarketingFees;
        totalBuyFees = buyMarketingFees;

        require(totalSellFees <= 10 && totalBuyFees <= 5, "total fees cannot be higher than 5% buys 10% sells");

        emit UpdateFees(sellMarketingFees, buyMarketingFees);
    }

    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), "IERC20: transfer from the zero address");
        require(to != address(0), "IERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 marketingFees;

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

        if (to == DEAD) {
            _burn(from, amount);
            return;
        }
        
        else if (
            !swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            bool isSelling = automatedMarketMakerPairs[to];
            bool isBuying = automatedMarketMakerPairs[from];            
            
            if (!isBuying && !isSelling) {
                super._transfer(from, to, amount);
                return;
            }            
            
            else if (isSelling) {
                marketingFees = sellMarketingFees;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "One Sell Per 60 Seconds");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else if (isBuying) {
                marketingFees = buyMarketingFees;

                if (limitsInEffect) {
                require(block.number > launchblock + deadblocks,"Bought Too Fast");
                require(_holderLastTransferBlock[tx.origin] != block.number,"One Buy per block");
                _holderLastTransferBlock[tx.origin] = block.number;
            }

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

            uint256 totalFees = marketingFees;

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && isSelling) {
                swapping = true;
             
                if (swapAndLiquifyEnabled && marketingFees > 0 && totalBuyFees > 0) {
                    uint256 totalBuySell = buyAmount.add(sellAmount);
                    uint256 swapAmountBought = contractTokenBalance
                        .mul(buyAmount)
                        .div(totalBuySell);
                    uint256 swapAmountSold = contractTokenBalance
                        .mul(sellAmount)
                        .div(totalBuySell);

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

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

                    uint256 swapTokens = swapSellTokens.add(swapBuyTokens);

                    swapAndLiquify(swapTokens);
                }                
                
                
                uint256 swapBalance = balanceOf(address(this));
                swapAndSendDividends(swapBalance);
                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;
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); // <- this breaks the ETH -> when swap+liquify is triggered
        uint256 newBalance = address(this).balance.sub(initialBalance);
        emit SwapAndLiquify(half, newBalance);
    }

    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 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 _completeFees = sellMarketingFees + buyMarketingFees;

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","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":"buyMarketingFees","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"setdeadblocks","type":"uint256"}],"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":"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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setCanTransferBeforeTradingIsEnabled","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":[],"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":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860156101000a81548160ff02191690831515021790555060016009556001600a556001600f60006101000a81548160ff0219169083151502179055506001601360006101000a81548160ff0219169083151502179055506001601760006101000a81548160ff021916908315150217905550603c601d55348015620000cf57600080fd5b506040518060400160405280600481526020017f53455448000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534554480000000000000000000000000000000000000000000000000000000081525081600390816200014d919062000c55565b5080600490816200015f919062000c55565b5050506200018262000176620006c060201b60201c565b620006c860201b60201c565b73f430eb562f9ec9dcebafffc7c66faa6bd2000000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060006012819055506004601181905550601254600c81905550601154600b8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e7919062000da6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000371573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000397919062000da6565b6040518363ffffffff1660e01b8152600401620003b692919062000de9565b6020604051808303816000875af1158015620003d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fc919062000da6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000471600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200078e60201b60201c565b6001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160146000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006d04ee2d6d415b85acef81000000009050620005cf620005c26200082f60201b60201c565b826200085960201b60201c565b6c0c9f2c9cd04674edea40000000600e819055506103e881620005f3919062000e74565b6010819055506001601660006200060f6200082f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000f98565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008c29062000f0d565b60405180910390fd5b620008df60008383620009d160201b60201c565b8060026000828254620008f3919062000f2f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200094a919062000f2f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009b1919062000f7b565b60405180910390a3620009cd60008383620009d660201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a5d57607f821691505b60208210810362000a735762000a7262000a15565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000add7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a9e565b62000ae9868362000a9e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b3662000b3062000b2a8462000b01565b62000b0b565b62000b01565b9050919050565b6000819050919050565b62000b528362000b15565b62000b6a62000b618262000b3d565b84845462000aab565b825550505050565b600090565b62000b8162000b72565b62000b8e81848462000b47565b505050565b5b8181101562000bb65762000baa60008262000b77565b60018101905062000b94565b5050565b601f82111562000c055762000bcf8162000a79565b62000bda8462000a8e565b8101602085101562000bea578190505b62000c0262000bf98562000a8e565b83018262000b93565b50505b505050565b600082821c905092915050565b600062000c2a6000198460080262000c0a565b1980831691505092915050565b600062000c45838362000c17565b9150826002028217905092915050565b62000c6082620009db565b67ffffffffffffffff81111562000c7c5762000c7b620009e6565b5b62000c88825462000a44565b62000c9582828562000bba565b600060209050601f83116001811462000ccd576000841562000cb8578287015190505b62000cc4858262000c37565b86555062000d34565b601f19841662000cdd8662000a79565b60005b8281101562000d075784890151825560018201915060208501945060208101905062000ce0565b8683101562000d27578489015162000d23601f89168262000c17565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d6e8262000d41565b9050919050565b62000d808162000d61565b811462000d8c57600080fd5b50565b60008151905062000da08162000d75565b92915050565b60006020828403121562000dbf5762000dbe62000d3c565b5b600062000dcf8482850162000d8f565b91505092915050565b62000de38162000d61565b82525050565b600060408201905062000e00600083018562000dd8565b62000e0f602083018462000dd8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e818262000b01565b915062000e8e8362000b01565b92508262000ea15762000ea062000e16565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ef5601f8362000eac565b915062000f028262000ebd565b602082019050919050565b6000602082019050818103600083015262000f288162000ee6565b9050919050565b600062000f3c8262000b01565b915062000f498362000b01565b925082820190508082111562000f645762000f6362000e45565b5b92915050565b62000f758162000b01565b82525050565b600060208201905062000f92600083018462000f6a565b92915050565b613df08062000fa86000396000f3fe6080604052600436106102605760003560e01c8063679ca6e911610144578063a457c2d7116100b6578063d045a3291161007a578063d045a329146108f7578063d5e3725114610922578063dd62ed3e1461094b578063e2f4560514610988578063f2fde38b146109b3578063f8b45b05146109dc57610267565b8063a457c2d7146107ec578063a614ff7514610829578063a9059cbb14610852578063b49429881461088f578063b62496f5146108ba57610267565b806382aa7c681161010857806382aa7c68146106ee5780638c3c82b2146107175780638da5cb5b1461074257806395451c291461076d57806395d89b41146107985780639a7a23d6146107c357610267565b8063679ca6e91461061d5780636db794371461064657806370a082311461066f578063715018a6146106ac57806375f0a874146106c357610267565b806335faa416116101dd5780634a74bb02116101a15780634a74bb021461050d5780634ada218b146105385780634fbee193146105635780635124f874146105a05780635d098b38146105cb5780635eee4bae146105f457610267565b806335faa4161461043a57806339509351146104515780633c7691dc1461048e57806349bd5a5e146104b75780634a62bb65146104e257610267565b80631694505e116102245780631694505e1461035157806318160ddd1461037c5780631d7b1fb4146103a757806323b872dd146103d2578063313ce5671461040f57610267565b806303fd2a451461026c57806305ca5f081461029757806306fdde03146102c057806308dfe8a5146102eb578063095ea7b31461031457610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a07565b60405161028e9190612ab1565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612b07565b610a2d565b005b3480156102cc57600080fd5b506102d5610b01565b6040516102e29190612bc4565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612c4a565b610b93565b005b34801561032057600080fd5b5061033b60048036038101906103369190612c8a565b610c44565b6040516103489190612cd9565b60405180910390f35b34801561035d57600080fd5b50610366610c67565b6040516103739190612d53565b60405180910390f35b34801561038857600080fd5b50610391610c8d565b60405161039e9190612d7d565b60405180910390f35b3480156103b357600080fd5b506103bc610c97565b6040516103c99190612d7d565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190612d98565b610c9d565b6040516104069190612cd9565b60405180910390f35b34801561041b57600080fd5b50610424610ccc565b6040516104319190612e07565b60405180910390f35b34801561044657600080fd5b5061044f610cd5565b005b34801561045d57600080fd5b5061047860048036038101906104739190612c8a565b610d2c565b6040516104859190612cd9565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612c4a565b610d63565b005b3480156104c357600080fd5b506104cc610dc6565b6040516104d99190612ab1565b60405180910390f35b3480156104ee57600080fd5b506104f7610dec565b6040516105049190612cd9565b60405180910390f35b34801561051957600080fd5b50610522610dff565b60405161052f9190612cd9565b60405180910390f35b34801561054457600080fd5b5061054d610e12565b60405161055a9190612cd9565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190612e22565b610e25565b6040516105979190612cd9565b60405180910390f35b3480156105ac57600080fd5b506105b5610e7b565b6040516105c29190612d7d565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190612e22565b610e81565b005b34801561060057600080fd5b5061061b60048036038101906106169190612b07565b610f5c565b005b34801561062957600080fd5b50610644600480360381019061063f9190612e4f565b610f81565b005b34801561065257600080fd5b5061066d60048036038101906106689190612e7c565b610fa6565b005b34801561067b57600080fd5b5061069660048036038101906106919190612e22565b611064565b6040516106a39190612d7d565b60405180910390f35b3480156106b857600080fd5b506106c16110ac565b005b3480156106cf57600080fd5b506106d86110c0565b6040516106e59190612edd565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190612b07565b6110e6565b005b34801561072357600080fd5b5061072c611167565b6040516107399190612d7d565b60405180910390f35b34801561074e57600080fd5b5061075761116d565b6040516107649190612ab1565b60405180910390f35b34801561077957600080fd5b50610782611197565b60405161078f9190612d7d565b60405180910390f35b3480156107a457600080fd5b506107ad61119d565b6040516107ba9190612bc4565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190612c4a565b61122f565b005b3480156107f857600080fd5b50610813600480360381019061080e9190612c8a565b611245565b6040516108209190612cd9565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190612e4f565b6112bc565b005b34801561085e57600080fd5b5061087960048036038101906108749190612c8a565b6112e1565b6040516108869190612cd9565b60405180910390f35b34801561089b57600080fd5b506108a4611304565b6040516108b19190612d7d565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190612e22565b61130a565b6040516108ee9190612cd9565b60405180910390f35b34801561090357600080fd5b5061090c61132a565b6040516109199190612cd9565b60405180910390f35b34801561092e57600080fd5b5061094960048036038101906109449190612e4f565b61133d565b005b34801561095757600080fd5b50610972600480360381019061096d9190612ef8565b6113b8565b60405161097f9190612d7d565b60405180910390f35b34801561099457600080fd5b5061099d61143f565b6040516109aa9190612d7d565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190612e22565b611445565b005b3480156109e857600080fd5b506109f16114c8565b6040516109fe9190612d7d565b60405180910390f35b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a356114ce565b670de0b6b3a764000081610a499190612f67565b90506000610a64600954600a5461154c90919063ffffffff16565b90506000610a8f82610a81600a548661156290919063ffffffff16565b61157890919063ffffffff16565b90506000610aba83610aac6009548761156290919063ffffffff16565b61157890919063ffffffff16565b9050610ac58461158e565b610ada82600a546116e990919063ffffffff16565b600a81905550610af5816009546116e990919063ffffffff16565b60098190555050505050565b606060038054610b1090612fd8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3c90612fd8565b8015610b895780601f10610b5e57610100808354040283529160200191610b89565b820191906000526020600020905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b610b9b6114ce565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610c389190612cd9565b60405180910390a25050565b600080610c4f6116ff565b9050610c5c818585611707565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b601d5481565b600080610ca86116ff565b9050610cb58582856118d0565b610cc085858561195c565b60019150509392505050565b60006012905090565b610cdd6114ce565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d28573d6000803e3d6000fd5b5050565b600080610d376116ff565b9050610d58818585610d4985896113b8565b610d539190613009565b611707565b600191505092915050565b610d6b6114ce565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900460ff1681565b601360009054906101000a900460ff1681565b600860159054906101000a900460ff1681565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b610e896114ce565b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c22443381604051610f519190612ab1565b60405180910390a150565b610f646114ce565b670de0b6b3a764000081610f789190612f67565b60108190555050565b610f896114ce565b80601760006101000a81548160ff02191690831515021790555050565b610fae6114ce565b8160128190555080601181905550601154600b81905550601254600c81905550600a600b5411158015610fe457506005600c5411155b611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a906130af565b60405180910390fd5b7f53482196ef67ac615caab1c3eca2c270acbfdcd75e57c5f24c1b98b10c8e6e046011546012546040516110589291906130cf565b60405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b46114ce565b6110be60006121fe565b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ee6114ce565b600860159054906101000a900460ff161561110857600080fd5b6001600860156101000a81548160ff02191690831515021790555043601a8190555042601c8190555080601b819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a150565b601c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6060600480546111ac90612fd8565b80601f01602080910402602001604051908101604052809291908181526020018280546111d890612fd8565b80156112255780601f106111fa57610100808354040283529160200191611225565b820191906000526020600020905b81548152906001019060200180831161120857829003601f168201915b5050505050905090565b6112376114ce565b61124182826122c4565b5050565b6000806112506116ff565b9050600061125e82866113b8565b9050838110156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a9061316a565b60405180910390fd5b6112b08286868403611707565b60019250505092915050565b6112c46114ce565b80600f60006101000a81548160ff02191690831515021790555050565b6000806112ec6116ff565b90506112f981858561195c565b600191505092915050565b601a5481565b60156020528060005260406000206000915054906101000a900460ff1681565b600f60009054906101000a900460ff1681565b6113456114ce565b801515601360009054906101000a900460ff1615150361136457600080fd5b80601360006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef816040516113ad9190612cd9565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b61144d6114ce565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b3906131fc565b60405180910390fd5b6114c5816121fe565b50565b600e5481565b6114d66116ff565b73ffffffffffffffffffffffffffffffffffffffff166114f461116d565b73ffffffffffffffffffffffffffffffffffffffff161461154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190613268565b60405180910390fd5b565b6000818361155a9190613009565b905092915050565b600081836115709190612f67565b905092915050565b6000818361158691906132b7565b905092915050565b60008103156116e6576115a081612365565b60006001905060006001905060006012546011546115be9190613009565b90506000808211156115e0576115dd824761157890919063ffffffff16565b90505b6000816115fa60115460125461154c90919063ffffffff16565b6116049190612f67565b9050600081111561169e57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161165590613319565b60006040518083038185875af1925050503d8060008114611692576040519150601f19603f3d011682016040523d82523d6000602084013e611697565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9818680156116ca5750855b6040516116d892919061332e565b60405180910390a150505050505b50565b600081836116f79190613357565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d906133fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc9061348f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118c39190612d7d565b60405180910390a3505050565b60006118dc84846113b8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119565781811015611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f906134fb565b60405180910390fd5b6119558484848403611707565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c29061358d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a319061361f565b60405180910390fd5b60008111611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a74906136b1565b60405180910390fd5b6000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b2057600860159054906101000a900460ff16611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b169061371d565b60405180910390fd5b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b8557611b7f84836125a8565b506121f9565b600860149054906101000a900460ff16158015611bec5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c425750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121ec576000601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080158015611cf5575081155b15611d0d57611d0586868661277e565b5050506121f9565b8115611e06576011549250601760009054906101000a900460ff1615611e0157601d54601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d7a9190613009565b421015611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390613789565b60405180910390fd5b42601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611fb3565b8015611fb2576012549250601760009054906101000a900460ff1615611f3d57601b54601a54611e369190613009565b4311611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e906137f5565b60405180910390fd5b43601860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90613861565b60405180910390fd5b43601860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff1615611fb1576000611f5d86611064565b9050600e548582611f6e9190613009565b1115611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa6906138cd565b60405180910390fd5b505b5b5b60008390506000611fc330611064565b905060006010548210159050808015611fd95750845b15612159576001600860146101000a81548160ff021916908315150217905550601360009054906101000a900460ff1680156120155750600086115b801561202357506000600c54115b15612116576000612041600954600a5461154c90919063ffffffff16565b9050600061206c8261205e600a548761156290919063ffffffff16565b61157890919063ffffffff16565b90506000612097836120896009548861156290919063ffffffff16565b61157890919063ffffffff16565b905060006120c2600c546120b48c8661156290919063ffffffff16565b61157890919063ffffffff16565b905060006120ed600b546120df8d8661156290919063ffffffff16565b61157890919063ffffffff16565b90506000612104838361154c90919063ffffffff16565b905061210f816129fd565b5050505050505b600061212130611064565b905061212c8161158e565b6000600a8190555060006009819055506000600860146101000a81548160ff021916908315150217905550505b60006121816064612173868b61156290919063ffffffff16565b61157890919063ffffffff16565b905061219681896116e990919063ffffffff16565b975085156121be576121b38160095461154c90919063ffffffff16565b6009819055506121da565b6121d381600a5461154c90919063ffffffff16565b600a819055505b6121e58a308361277e565b5050505050505b6121f784848461277e565b505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115612382576123816138ed565b5b6040519080825280602002602001820160405280156123b05781602001602082028036833780820191505090505b50905030816000815181106123c8576123c761391c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124939190613960565b816001815181106124a7576124a661391c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061250e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611707565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612572959493929190613a86565b600060405180830381600087803b15801561258c57600080fd5b505af11580156125a0573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e90613b52565b60405180910390fd5b61262382600083612a66565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156126a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a090613be4565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546127009190613357565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127659190612d7d565b60405180910390a361277983600084612a6b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e490613c76565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390613d08565b60405180910390fd5b612867838383612a66565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e490613d9a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129809190613009565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e49190612d7d565b60405180910390a36129f7848484612a6b565b50505050565b60008190506000479050612a1082612365565b6000612a2582476116e990919063ffffffff16565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868382604051612a589291906130cf565b60405180910390a150505050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a9b82612a70565b9050919050565b612aab81612a90565b82525050565b6000602082019050612ac66000830184612aa2565b92915050565b600080fd5b6000819050919050565b612ae481612ad1565b8114612aef57600080fd5b50565b600081359050612b0181612adb565b92915050565b600060208284031215612b1d57612b1c612acc565b5b6000612b2b84828501612af2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b6e578082015181840152602081019050612b53565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b9682612b34565b612ba08185612b3f565b9350612bb0818560208601612b50565b612bb981612b7a565b840191505092915050565b60006020820190508181036000830152612bde8184612b8b565b905092915050565b612bef81612a90565b8114612bfa57600080fd5b50565b600081359050612c0c81612be6565b92915050565b60008115159050919050565b612c2781612c12565b8114612c3257600080fd5b50565b600081359050612c4481612c1e565b92915050565b60008060408385031215612c6157612c60612acc565b5b6000612c6f85828601612bfd565b9250506020612c8085828601612c35565b9150509250929050565b60008060408385031215612ca157612ca0612acc565b5b6000612caf85828601612bfd565b9250506020612cc085828601612af2565b9150509250929050565b612cd381612c12565b82525050565b6000602082019050612cee6000830184612cca565b92915050565b6000819050919050565b6000612d19612d14612d0f84612a70565b612cf4565b612a70565b9050919050565b6000612d2b82612cfe565b9050919050565b6000612d3d82612d20565b9050919050565b612d4d81612d32565b82525050565b6000602082019050612d686000830184612d44565b92915050565b612d7781612ad1565b82525050565b6000602082019050612d926000830184612d6e565b92915050565b600080600060608486031215612db157612db0612acc565b5b6000612dbf86828701612bfd565b9350506020612dd086828701612bfd565b9250506040612de186828701612af2565b9150509250925092565b600060ff82169050919050565b612e0181612deb565b82525050565b6000602082019050612e1c6000830184612df8565b92915050565b600060208284031215612e3857612e37612acc565b5b6000612e4684828501612bfd565b91505092915050565b600060208284031215612e6557612e64612acc565b5b6000612e7384828501612c35565b91505092915050565b60008060408385031215612e9357612e92612acc565b5b6000612ea185828601612af2565b9250506020612eb285828601612af2565b9150509250929050565b6000612ec782612a70565b9050919050565b612ed781612ebc565b82525050565b6000602082019050612ef26000830184612ece565b92915050565b60008060408385031215612f0f57612f0e612acc565b5b6000612f1d85828601612bfd565b9250506020612f2e85828601612bfd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f7282612ad1565b9150612f7d83612ad1565b9250828202612f8b81612ad1565b91508282048414831517612fa257612fa1612f38565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ff057607f821691505b60208210810361300357613002612fa9565b5b50919050565b600061301482612ad1565b915061301f83612ad1565b925082820190508082111561303757613036612f38565b5b92915050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2035252062757973203130252073656c6c730000000000000000000000000000602082015250565b6000613099603283612b3f565b91506130a48261303d565b604082019050919050565b600060208201905081810360008301526130c88161308c565b9050919050565b60006040820190506130e46000830185612d6e565b6130f16020830184612d6e565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613154602583612b3f565b915061315f826130f8565b604082019050919050565b6000602082019050818103600083015261318381613147565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131e6602683612b3f565b91506131f18261318a565b604082019050919050565b60006020820190508181036000830152613215816131d9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613252602083612b3f565b915061325d8261321c565b602082019050919050565b6000602082019050818103600083015261328181613245565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132c282612ad1565b91506132cd83612ad1565b9250826132dd576132dc613288565b5b828204905092915050565b600081905092915050565b50565b60006133036000836132e8565b915061330e826132f3565b600082019050919050565b6000613324826132f6565b9150819050919050565b60006040820190506133436000830185612d6e565b6133506020830184612cca565b9392505050565b600061336282612ad1565b915061336d83612ad1565b925082820390508181111561338557613384612f38565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133e7602483612b3f565b91506133f28261338b565b604082019050919050565b60006020820190508181036000830152613416816133da565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613479602283612b3f565b91506134848261341d565b604082019050919050565b600060208201905081810360008301526134a88161346c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006134e5601d83612b3f565b91506134f0826134af565b602082019050919050565b60006020820190508181036000830152613514816134d8565b9050919050565b7f4945524332303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613577602683612b3f565b91506135828261351b565b604082019050919050565b600060208201905081810360008301526135a68161356a565b9050919050565b7f4945524332303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613609602483612b3f565b9150613614826135ad565b604082019050919050565b60006020820190508181036000830152613638816135fc565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061369b602983612b3f565b91506136a68261363f565b604082019050919050565b600060208201905081810360008301526136ca8161368e565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000613707602083612b3f565b9150613712826136d1565b602082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f4f6e652053656c6c20506572203630205365636f6e6473000000000000000000600082015250565b6000613773601783612b3f565b915061377e8261373d565b602082019050919050565b600060208201905081810360008301526137a281613766565b9050919050565b7f426f7567687420546f6f20466173740000000000000000000000000000000000600082015250565b60006137df600f83612b3f565b91506137ea826137a9565b602082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b7f4f6e65204275792070657220626c6f636b000000000000000000000000000000600082015250565b600061384b601183612b3f565b915061385682613815565b602082019050919050565b6000602082019050818103600083015261387a8161383e565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657400000000000000000000600082015250565b60006138b7601683612b3f565b91506138c282613881565b602082019050919050565b600060208201905081810360008301526138e6816138aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061395a81612be6565b92915050565b60006020828403121561397657613975612acc565b5b60006139848482850161394b565b91505092915050565b6000819050919050565b60006139b26139ad6139a88461398d565b612cf4565b612ad1565b9050919050565b6139c281613997565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139fd81612a90565b82525050565b6000613a0f83836139f4565b60208301905092915050565b6000602082019050919050565b6000613a33826139c8565b613a3d81856139d3565b9350613a48836139e4565b8060005b83811015613a79578151613a608882613a03565b9750613a6b83613a1b565b925050600181019050613a4c565b5085935050505092915050565b600060a082019050613a9b6000830188612d6e565b613aa860208301876139b9565b8181036040830152613aba8186613a28565b9050613ac96060830185612aa2565b613ad66080830184612d6e565b9695505050505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b3c602183612b3f565b9150613b4782613ae0565b604082019050919050565b60006020820190508181036000830152613b6b81613b2f565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bce602283612b3f565b9150613bd982613b72565b604082019050919050565b60006020820190508181036000830152613bfd81613bc1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c60602583612b3f565b9150613c6b82613c04565b604082019050919050565b60006020820190508181036000830152613c8f81613c53565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf2602383612b3f565b9150613cfd82613c96565b604082019050919050565b60006020820190508181036000830152613d2181613ce5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613d84602683612b3f565b9150613d8f82613d28565b604082019050919050565b60006020820190508181036000830152613db381613d77565b905091905056fea264697066735822122006da6e0abb1d266d9387461fd27f4fbd0a8db1202291b14435f41eb5ae2c0d3464736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063679ca6e911610144578063a457c2d7116100b6578063d045a3291161007a578063d045a329146108f7578063d5e3725114610922578063dd62ed3e1461094b578063e2f4560514610988578063f2fde38b146109b3578063f8b45b05146109dc57610267565b8063a457c2d7146107ec578063a614ff7514610829578063a9059cbb14610852578063b49429881461088f578063b62496f5146108ba57610267565b806382aa7c681161010857806382aa7c68146106ee5780638c3c82b2146107175780638da5cb5b1461074257806395451c291461076d57806395d89b41146107985780639a7a23d6146107c357610267565b8063679ca6e91461061d5780636db794371461064657806370a082311461066f578063715018a6146106ac57806375f0a874146106c357610267565b806335faa416116101dd5780634a74bb02116101a15780634a74bb021461050d5780634ada218b146105385780634fbee193146105635780635124f874146105a05780635d098b38146105cb5780635eee4bae146105f457610267565b806335faa4161461043a57806339509351146104515780633c7691dc1461048e57806349bd5a5e146104b75780634a62bb65146104e257610267565b80631694505e116102245780631694505e1461035157806318160ddd1461037c5780631d7b1fb4146103a757806323b872dd146103d2578063313ce5671461040f57610267565b806303fd2a451461026c57806305ca5f081461029757806306fdde03146102c057806308dfe8a5146102eb578063095ea7b31461031457610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a07565b60405161028e9190612ab1565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612b07565b610a2d565b005b3480156102cc57600080fd5b506102d5610b01565b6040516102e29190612bc4565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612c4a565b610b93565b005b34801561032057600080fd5b5061033b60048036038101906103369190612c8a565b610c44565b6040516103489190612cd9565b60405180910390f35b34801561035d57600080fd5b50610366610c67565b6040516103739190612d53565b60405180910390f35b34801561038857600080fd5b50610391610c8d565b60405161039e9190612d7d565b60405180910390f35b3480156103b357600080fd5b506103bc610c97565b6040516103c99190612d7d565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f49190612d98565b610c9d565b6040516104069190612cd9565b60405180910390f35b34801561041b57600080fd5b50610424610ccc565b6040516104319190612e07565b60405180910390f35b34801561044657600080fd5b5061044f610cd5565b005b34801561045d57600080fd5b5061047860048036038101906104739190612c8a565b610d2c565b6040516104859190612cd9565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612c4a565b610d63565b005b3480156104c357600080fd5b506104cc610dc6565b6040516104d99190612ab1565b60405180910390f35b3480156104ee57600080fd5b506104f7610dec565b6040516105049190612cd9565b60405180910390f35b34801561051957600080fd5b50610522610dff565b60405161052f9190612cd9565b60405180910390f35b34801561054457600080fd5b5061054d610e12565b60405161055a9190612cd9565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190612e22565b610e25565b6040516105979190612cd9565b60405180910390f35b3480156105ac57600080fd5b506105b5610e7b565b6040516105c29190612d7d565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190612e22565b610e81565b005b34801561060057600080fd5b5061061b60048036038101906106169190612b07565b610f5c565b005b34801561062957600080fd5b50610644600480360381019061063f9190612e4f565b610f81565b005b34801561065257600080fd5b5061066d60048036038101906106689190612e7c565b610fa6565b005b34801561067b57600080fd5b5061069660048036038101906106919190612e22565b611064565b6040516106a39190612d7d565b60405180910390f35b3480156106b857600080fd5b506106c16110ac565b005b3480156106cf57600080fd5b506106d86110c0565b6040516106e59190612edd565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190612b07565b6110e6565b005b34801561072357600080fd5b5061072c611167565b6040516107399190612d7d565b60405180910390f35b34801561074e57600080fd5b5061075761116d565b6040516107649190612ab1565b60405180910390f35b34801561077957600080fd5b50610782611197565b60405161078f9190612d7d565b60405180910390f35b3480156107a457600080fd5b506107ad61119d565b6040516107ba9190612bc4565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190612c4a565b61122f565b005b3480156107f857600080fd5b50610813600480360381019061080e9190612c8a565b611245565b6040516108209190612cd9565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190612e4f565b6112bc565b005b34801561085e57600080fd5b5061087960048036038101906108749190612c8a565b6112e1565b6040516108869190612cd9565b60405180910390f35b34801561089b57600080fd5b506108a4611304565b6040516108b19190612d7d565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190612e22565b61130a565b6040516108ee9190612cd9565b60405180910390f35b34801561090357600080fd5b5061090c61132a565b6040516109199190612cd9565b60405180910390f35b34801561092e57600080fd5b5061094960048036038101906109449190612e4f565b61133d565b005b34801561095757600080fd5b50610972600480360381019061096d9190612ef8565b6113b8565b60405161097f9190612d7d565b60405180910390f35b34801561099457600080fd5b5061099d61143f565b6040516109aa9190612d7d565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190612e22565b611445565b005b3480156109e857600080fd5b506109f16114c8565b6040516109fe9190612d7d565b60405180910390f35b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a356114ce565b670de0b6b3a764000081610a499190612f67565b90506000610a64600954600a5461154c90919063ffffffff16565b90506000610a8f82610a81600a548661156290919063ffffffff16565b61157890919063ffffffff16565b90506000610aba83610aac6009548761156290919063ffffffff16565b61157890919063ffffffff16565b9050610ac58461158e565b610ada82600a546116e990919063ffffffff16565b600a81905550610af5816009546116e990919063ffffffff16565b60098190555050505050565b606060038054610b1090612fd8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3c90612fd8565b8015610b895780601f10610b5e57610100808354040283529160200191610b89565b820191906000526020600020905b815481529060010190602001808311610b6c57829003601f168201915b5050505050905090565b610b9b6114ce565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610c389190612cd9565b60405180910390a25050565b600080610c4f6116ff565b9050610c5c818585611707565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b601d5481565b600080610ca86116ff565b9050610cb58582856118d0565b610cc085858561195c565b60019150509392505050565b60006012905090565b610cdd6114ce565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d28573d6000803e3d6000fd5b5050565b600080610d376116ff565b9050610d58818585610d4985896113b8565b610d539190613009565b611707565b600191505092915050565b610d6b6114ce565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900460ff1681565b601360009054906101000a900460ff1681565b600860159054906101000a900460ff1681565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b610e896114ce565b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c22443381604051610f519190612ab1565b60405180910390a150565b610f646114ce565b670de0b6b3a764000081610f789190612f67565b60108190555050565b610f896114ce565b80601760006101000a81548160ff02191690831515021790555050565b610fae6114ce565b8160128190555080601181905550601154600b81905550601254600c81905550600a600b5411158015610fe457506005600c5411155b611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a906130af565b60405180910390fd5b7f53482196ef67ac615caab1c3eca2c270acbfdcd75e57c5f24c1b98b10c8e6e046011546012546040516110589291906130cf565b60405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b46114ce565b6110be60006121fe565b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ee6114ce565b600860159054906101000a900460ff161561110857600080fd5b6001600860156101000a81548160ff02191690831515021790555043601a8190555042601c8190555080601b819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a150565b601c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6060600480546111ac90612fd8565b80601f01602080910402602001604051908101604052809291908181526020018280546111d890612fd8565b80156112255780601f106111fa57610100808354040283529160200191611225565b820191906000526020600020905b81548152906001019060200180831161120857829003601f168201915b5050505050905090565b6112376114ce565b61124182826122c4565b5050565b6000806112506116ff565b9050600061125e82866113b8565b9050838110156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a9061316a565b60405180910390fd5b6112b08286868403611707565b60019250505092915050565b6112c46114ce565b80600f60006101000a81548160ff02191690831515021790555050565b6000806112ec6116ff565b90506112f981858561195c565b600191505092915050565b601a5481565b60156020528060005260406000206000915054906101000a900460ff1681565b600f60009054906101000a900460ff1681565b6113456114ce565b801515601360009054906101000a900460ff1615150361136457600080fd5b80601360006101000a81548160ff0219169083151502179055507fff5917043f8453af413305b2dbd1ed9748a37df481beb71ba4b9b212a07b9bef816040516113ad9190612cd9565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b61144d6114ce565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b3906131fc565b60405180910390fd5b6114c5816121fe565b50565b600e5481565b6114d66116ff565b73ffffffffffffffffffffffffffffffffffffffff166114f461116d565b73ffffffffffffffffffffffffffffffffffffffff161461154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190613268565b60405180910390fd5b565b6000818361155a9190613009565b905092915050565b600081836115709190612f67565b905092915050565b6000818361158691906132b7565b905092915050565b60008103156116e6576115a081612365565b60006001905060006001905060006012546011546115be9190613009565b90506000808211156115e0576115dd824761157890919063ffffffff16565b90505b6000816115fa60115460125461154c90919063ffffffff16565b6116049190612f67565b9050600081111561169e57600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161165590613319565b60006040518083038185875af1925050503d8060008114611692576040519150601f19603f3d011682016040523d82523d6000602084013e611697565b606091505b5050809550505b7f31ea026303a62d39c4ad14716f9621f1afe3242309c2ed761d4e241ae4bf2ea9818680156116ca5750855b6040516116d892919061332e565b60405180910390a150505050505b50565b600081836116f79190613357565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d906133fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc9061348f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118c39190612d7d565b60405180910390a3505050565b60006118dc84846113b8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119565781811015611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f906134fb565b60405180910390fd5b6119558484848403611707565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c29061358d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a319061361f565b60405180910390fd5b60008111611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a74906136b1565b60405180910390fd5b6000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b2057600860159054906101000a900460ff16611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b169061371d565b60405180910390fd5b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b8557611b7f84836125a8565b506121f9565b600860149054906101000a900460ff16158015611bec5750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c425750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121ec576000601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080158015611cf5575081155b15611d0d57611d0586868661277e565b5050506121f9565b8115611e06576011549250601760009054906101000a900460ff1615611e0157601d54601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d7a9190613009565b421015611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390613789565b60405180910390fd5b42601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611fb3565b8015611fb2576012549250601760009054906101000a900460ff1615611f3d57601b54601a54611e369190613009565b4311611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e906137f5565b60405180910390fd5b43601860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90613861565b60405180910390fd5b43601860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff1615611fb1576000611f5d86611064565b9050600e548582611f6e9190613009565b1115611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa6906138cd565b60405180910390fd5b505b5b5b60008390506000611fc330611064565b905060006010548210159050808015611fd95750845b15612159576001600860146101000a81548160ff021916908315150217905550601360009054906101000a900460ff1680156120155750600086115b801561202357506000600c54115b15612116576000612041600954600a5461154c90919063ffffffff16565b9050600061206c8261205e600a548761156290919063ffffffff16565b61157890919063ffffffff16565b90506000612097836120896009548861156290919063ffffffff16565b61157890919063ffffffff16565b905060006120c2600c546120b48c8661156290919063ffffffff16565b61157890919063ffffffff16565b905060006120ed600b546120df8d8661156290919063ffffffff16565b61157890919063ffffffff16565b90506000612104838361154c90919063ffffffff16565b905061210f816129fd565b5050505050505b600061212130611064565b905061212c8161158e565b6000600a8190555060006009819055506000600860146101000a81548160ff021916908315150217905550505b60006121816064612173868b61156290919063ffffffff16565b61157890919063ffffffff16565b905061219681896116e990919063ffffffff16565b975085156121be576121b38160095461154c90919063ffffffff16565b6009819055506121da565b6121d381600a5461154c90919063ffffffff16565b600a819055505b6121e58a308361277e565b5050505050505b6121f784848461277e565b505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115612382576123816138ed565b5b6040519080825280602002602001820160405280156123b05781602001602082028036833780820191505090505b50905030816000815181106123c8576123c761391c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124939190613960565b816001815181106124a7576124a661391c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061250e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611707565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612572959493929190613a86565b600060405180830381600087803b15801561258c57600080fd5b505af11580156125a0573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260e90613b52565b60405180910390fd5b61262382600083612a66565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156126a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a090613be4565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546127009190613357565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127659190612d7d565b60405180910390a361277983600084612a6b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e490613c76565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390613d08565b60405180910390fd5b612867838383612a66565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e490613d9a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129809190613009565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e49190612d7d565b60405180910390a36129f7848484612a6b565b50505050565b60008190506000479050612a1082612365565b6000612a2582476116e990919063ffffffff16565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868382604051612a589291906130cf565b60405180910390a150505050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a9b82612a70565b9050919050565b612aab81612a90565b82525050565b6000602082019050612ac66000830184612aa2565b92915050565b600080fd5b6000819050919050565b612ae481612ad1565b8114612aef57600080fd5b50565b600081359050612b0181612adb565b92915050565b600060208284031215612b1d57612b1c612acc565b5b6000612b2b84828501612af2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b6e578082015181840152602081019050612b53565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b9682612b34565b612ba08185612b3f565b9350612bb0818560208601612b50565b612bb981612b7a565b840191505092915050565b60006020820190508181036000830152612bde8184612b8b565b905092915050565b612bef81612a90565b8114612bfa57600080fd5b50565b600081359050612c0c81612be6565b92915050565b60008115159050919050565b612c2781612c12565b8114612c3257600080fd5b50565b600081359050612c4481612c1e565b92915050565b60008060408385031215612c6157612c60612acc565b5b6000612c6f85828601612bfd565b9250506020612c8085828601612c35565b9150509250929050565b60008060408385031215612ca157612ca0612acc565b5b6000612caf85828601612bfd565b9250506020612cc085828601612af2565b9150509250929050565b612cd381612c12565b82525050565b6000602082019050612cee6000830184612cca565b92915050565b6000819050919050565b6000612d19612d14612d0f84612a70565b612cf4565b612a70565b9050919050565b6000612d2b82612cfe565b9050919050565b6000612d3d82612d20565b9050919050565b612d4d81612d32565b82525050565b6000602082019050612d686000830184612d44565b92915050565b612d7781612ad1565b82525050565b6000602082019050612d926000830184612d6e565b92915050565b600080600060608486031215612db157612db0612acc565b5b6000612dbf86828701612bfd565b9350506020612dd086828701612bfd565b9250506040612de186828701612af2565b9150509250925092565b600060ff82169050919050565b612e0181612deb565b82525050565b6000602082019050612e1c6000830184612df8565b92915050565b600060208284031215612e3857612e37612acc565b5b6000612e4684828501612bfd565b91505092915050565b600060208284031215612e6557612e64612acc565b5b6000612e7384828501612c35565b91505092915050565b60008060408385031215612e9357612e92612acc565b5b6000612ea185828601612af2565b9250506020612eb285828601612af2565b9150509250929050565b6000612ec782612a70565b9050919050565b612ed781612ebc565b82525050565b6000602082019050612ef26000830184612ece565b92915050565b60008060408385031215612f0f57612f0e612acc565b5b6000612f1d85828601612bfd565b9250506020612f2e85828601612bfd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f7282612ad1565b9150612f7d83612ad1565b9250828202612f8b81612ad1565b91508282048414831517612fa257612fa1612f38565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ff057607f821691505b60208210810361300357613002612fa9565b5b50919050565b600061301482612ad1565b915061301f83612ad1565b925082820190508082111561303757613036612f38565b5b92915050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2035252062757973203130252073656c6c730000000000000000000000000000602082015250565b6000613099603283612b3f565b91506130a48261303d565b604082019050919050565b600060208201905081810360008301526130c88161308c565b9050919050565b60006040820190506130e46000830185612d6e565b6130f16020830184612d6e565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613154602583612b3f565b915061315f826130f8565b604082019050919050565b6000602082019050818103600083015261318381613147565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131e6602683612b3f565b91506131f18261318a565b604082019050919050565b60006020820190508181036000830152613215816131d9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613252602083612b3f565b915061325d8261321c565b602082019050919050565b6000602082019050818103600083015261328181613245565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132c282612ad1565b91506132cd83612ad1565b9250826132dd576132dc613288565b5b828204905092915050565b600081905092915050565b50565b60006133036000836132e8565b915061330e826132f3565b600082019050919050565b6000613324826132f6565b9150819050919050565b60006040820190506133436000830185612d6e565b6133506020830184612cca565b9392505050565b600061336282612ad1565b915061336d83612ad1565b925082820390508181111561338557613384612f38565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133e7602483612b3f565b91506133f28261338b565b604082019050919050565b60006020820190508181036000830152613416816133da565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613479602283612b3f565b91506134848261341d565b604082019050919050565b600060208201905081810360008301526134a88161346c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006134e5601d83612b3f565b91506134f0826134af565b602082019050919050565b60006020820190508181036000830152613514816134d8565b9050919050565b7f4945524332303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613577602683612b3f565b91506135828261351b565b604082019050919050565b600060208201905081810360008301526135a68161356a565b9050919050565b7f4945524332303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613609602483612b3f565b9150613614826135ad565b604082019050919050565b60006020820190508181036000830152613638816135fc565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061369b602983612b3f565b91506136a68261363f565b604082019050919050565b600060208201905081810360008301526136ca8161368e565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000613707602083612b3f565b9150613712826136d1565b602082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f4f6e652053656c6c20506572203630205365636f6e6473000000000000000000600082015250565b6000613773601783612b3f565b915061377e8261373d565b602082019050919050565b600060208201905081810360008301526137a281613766565b9050919050565b7f426f7567687420546f6f20466173740000000000000000000000000000000000600082015250565b60006137df600f83612b3f565b91506137ea826137a9565b602082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b7f4f6e65204275792070657220626c6f636b000000000000000000000000000000600082015250565b600061384b601183612b3f565b915061385682613815565b602082019050919050565b6000602082019050818103600083015261387a8161383e565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657400000000000000000000600082015250565b60006138b7601683612b3f565b91506138c282613881565b602082019050919050565b600060208201905081810360008301526138e6816138aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061395a81612be6565b92915050565b60006020828403121561397657613975612acc565b5b60006139848482850161394b565b91505092915050565b6000819050919050565b60006139b26139ad6139a88461398d565b612cf4565b612ad1565b9050919050565b6139c281613997565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139fd81612a90565b82525050565b6000613a0f83836139f4565b60208301905092915050565b6000602082019050919050565b6000613a33826139c8565b613a3d81856139d3565b9350613a48836139e4565b8060005b83811015613a79578151613a608882613a03565b9750613a6b83613a1b565b925050600181019050613a4c565b5085935050505092915050565b600060a082019050613a9b6000830188612d6e565b613aa860208301876139b9565b8181036040830152613aba8186613a28565b9050613ac96060830185612aa2565b613ad66080830184612d6e565b9695505050505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b3c602183612b3f565b9150613b4782613ae0565b604082019050919050565b60006020820190508181036000830152613b6b81613b2f565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bce602283612b3f565b9150613bd982613b72565b604082019050919050565b60006020820190508181036000830152613bfd81613bc1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c60602583612b3f565b9150613c6b82613c04565b604082019050919050565b60006020820190508181036000830152613c8f81613c53565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf2602383612b3f565b9150613cfd82613c96565b604082019050919050565b60006020820190508181036000830152613d2181613ce5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613d84602683612b3f565b9150613d8f82613d28565b604082019050919050565b60006020820190508181036000830152613db381613d77565b905091905056fea264697066735822122006da6e0abb1d266d9387461fd27f4fbd0a8db1202291b14435f41eb5ae2c0d3464736f6c63430008110033

Deployed Bytecode Sourcemap

17695:11888:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17853:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28314:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2760:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21545:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3678:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17768:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3075:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18972:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3885:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2976:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22022:146;;;;;;;;;;;;;:::i;:::-;;4186:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21734:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17818:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18634:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18387:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17952:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23319:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18349:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21213:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22176:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21909:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22864:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3189:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;934:103;;;;;;;;;;;;;:::i;:::-;;18145:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20911:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18934:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;703:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18310:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2866:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22520:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4430:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21426:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3322:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18850:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18495:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18224:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22304:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3521:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18270:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1043:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18193:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17853:64;;;;;;;;;;;;;:::o;28314:443::-;664:13;:11;:13::i;:::-;28412:6:::1;28402;:17;;;;:::i;:::-;28393:26;;28430:19;28452:25;28466:10;;28452:9;;:13;;:25;;;;:::i;:::-;28430:47;;28488:15;28506:38;28532:11;28506:21;28517:9;;28506:6;:10;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;28488:56;;28555:16;28574:39;28601:11;28574:22;28585:10;;28574:6;:10;;:22;;;;:::i;:::-;:26;;:39;;;;:::i;:::-;28555:58;;28626:28;28647:6;28626:20;:28::i;:::-;28679:22;28693:7;28679:9;;:13;;:22;;;;:::i;:::-;28667:9;:34;;;;28725:24;28740:8;28725:10;;:14;;:24;;;;:::i;:::-;28712:10;:37;;;;28382:375;;;28314:443:::0;:::o;2760:100::-;2814:13;2847:5;2840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2760:100;:::o;21545:181::-;664:13;:11;:13::i;:::-;21660:8:::1;21629:19;:28;21649:7;21629:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21700:7;21684:34;;;21709:8;21684:34;;;;;;:::i;:::-;;;;;;;;21545:181:::0;;:::o;3678:201::-;3761:4;3778:13;3794:12;:10;:12::i;:::-;3778:28;;3817:32;3826:5;3833:7;3842:6;3817:8;:32::i;:::-;3867:4;3860:11;;;3678:201;;;;:::o;17768:41::-;;;;;;;;;;;;;:::o;3075:108::-;3136:7;3163:12;;3156:19;;3075:108;:::o;18972:33::-;;;;:::o;3885:295::-;4016:4;4033:15;4051:12;:10;:12::i;:::-;4033:30;;4074:38;4090:4;4096:7;4105:6;4074:15;:38::i;:::-;4123:27;4133:4;4139:2;4143:6;4123:9;:27::i;:::-;4168:4;4161:11;;;3885:295;;;;;:::o;2976:93::-;3034:5;3059:2;3052:9;;2976:93;:::o;22022:146::-;664:13;:11;:13::i;:::-;22069:17:::1;22089:21;22069:41;;22129:10;22121:28;;:39;22150:9;22121:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22058:110;22022:146::o:0;4186:238::-;4274:4;4291:13;4307:12;:10;:12::i;:::-;4291:28;;4330:64;4339:5;4346:7;4383:10;4355:25;4365:5;4372:7;4355:9;:25::i;:::-;:38;;;;:::i;:::-;4330:8;:64::i;:::-;4412:4;4405:11;;;4186:238;;;;:::o;21734:167::-;664:13;:11;:13::i;:::-;21885:8:::1;21840:33;:42;21874:7;21840:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21734:167:::0;;:::o;17818:28::-;;;;;;;;;;;;;:::o;18634:33::-;;;;;;;;;;;;;:::o;18387:40::-;;;;;;;;;;;;;:::o;17952:34::-;;;;;;;;;;;;;:::o;23319:126::-;23385:4;23409:19;:28;23429:7;23409:28;;;;;;;;;;;;;;;;;;;;;;;;;23402:35;;23319:126;;;:::o;18349:31::-;;;;:::o;21213:205::-;664:13;:11;:13::i;:::-;21317:4:::1;21287:19;:27;21307:6;21287:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;21358:6;21332:15;;:33;;;;;;;;;;;;;;;;;;21381:29;21403:6;21381:29;;;;;;:::i;:::-;;;;;;;;21213:205:::0;:::o;22176:120::-;664:13;:11;:13::i;:::-;22281:6:::1;22271;:17;;;;:::i;:::-;22250:18;:38;;;;22176:120:::0;:::o;21909:99::-;664:13;:11;:13::i;:::-;21995:5:::1;21978:14;;:22;;;;;;;;;;;;;;;;;;21909:99:::0;:::o;22864:447::-;664:13;:11;:13::i;:::-;22978:12:::1;22959:16;:31;;;;23021:13;23001:17;:33;;;;23063:17;;23047:13;:33;;;;23106:16;;23091:12;:31;;;;23160:2;23143:13;;:19;;:40;;;;;23182:1;23166:12;;:17;;23143:40;23135:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23256:47;23267:17;;23286:16;;23256:47;;;;;;;:::i;:::-;;;;;;;;22864:447:::0;;:::o;3189:127::-;3263:7;3290:9;:18;3300:7;3290:18;;;;;;;;;;;;;;;;3283:25;;3189:127;;;:::o;934:103::-;664:13;:11;:13::i;:::-;999:30:::1;1026:1;999:18;:30::i;:::-;934:103::o:0;18145:38::-;;;;;;;;;;;;;:::o;20911:290::-;664:13;:11;:13::i;:::-;20996:14:::1;;;;;;;;;;;20995:15;20987:24;;;::::0;::::1;;21039:4;21022:14;;:21;;;;;;;;;;;;;;;;;;21068:12;21054:11;:26;;;;21109:15;21091;:33;;;;21148:13;21135:10;:26;;;;21177:16;;;;;;;;;;20911:290:::0;:::o;18934:30::-;;;;:::o;703:87::-;749:7;776:6;;;;;;;;;;;769:13;;703:87;:::o;18310:32::-;;;;:::o;2866:104::-;2922:13;2955:7;2948:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2866:104;:::o;22520:140::-;664:13;:11;:13::i;:::-;22611:41:::1;22640:4;22646:5;22611:28;:41::i;:::-;22520:140:::0;;:::o;4430:434::-;4523:4;4540:13;4556:12;:10;:12::i;:::-;4540:28;;4579:24;4606:25;4616:5;4623:7;4606:9;:25::i;:::-;4579:52;;4670:15;4650:16;:35;;4642:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4763:60;4772:5;4779:7;4807:15;4788:16;:34;4763:8;:60::i;:::-;4852:4;4845:11;;;;4430:434;;;;:::o;21426:103::-;664:13;:11;:13::i;:::-;21516:5:::1;21497:16;;:24;;;;;;;;;;;;;;;;;;21426:103:::0;:::o;3322:193::-;3401:4;3418:13;3434:12;:10;:12::i;:::-;3418:28;;3457;3467:5;3474:2;3478:6;3457:9;:28::i;:::-;3503:4;3496:11;;;3322:193;;;;:::o;18850:26::-;;;;:::o;18495:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;18224:35::-;;;;;;;;;;;;;:::o;22304:208::-;664:13;:11;:13::i;:::-;22409:7:::1;22384:32;;:21;;;;;;;;;;;:32;;::::0;22376:41:::1;;;::::0;::::1;;22452:7;22428:21;;:31;;;;;;;;;;;;;;;;;;22475:29;22496:7;22475:29;;;;;;:::i;:::-;;;;;;;;22304:208:::0;:::o;3521:151::-;3610:7;3637:11;:18;3649:5;3637:18;;;;;;;;;;;;;;;:27;3656:7;3637:27;;;;;;;;;;;;;;;;3630:34;;3521:151;;;;:::o;18270:33::-;;;;:::o;1043:201::-;664:13;:11;:13::i;:::-;1152:1:::1;1132:22;;:8;:22;;::::0;1124:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1208:28;1227:8;1208:18;:28::i;:::-;1043:201:::0;:::o;18193:24::-;;;;:::o;796:132::-;871:12;:10;:12::i;:::-;860:23;;:7;:5;:7::i;:::-;:23;;;852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;796:132::o;8762:98::-;8820:7;8851:1;8847;:5;;;;:::i;:::-;8840:12;;8762:98;;;;:::o;8970:::-;9028:7;9059:1;9055;:5;;;;:::i;:::-;9048:12;;8970:98;;;;:::o;9074:::-;9132:7;9163:1;9159;:5;;;;:::i;:::-;9152:12;;9074:98;;;;:::o;28790:790::-;28869:1;28859:6;:11;28855:50;28887:7;28855:50;28915:24;28932:6;28915:16;:24::i;:::-;28952:12;28967:4;28952:19;;28982:15;29000:4;28982:22;;29025:21;29069:16;;29049:17;;:36;;;;:::i;:::-;29025:60;;29098:19;29148:1;29132:13;:17;29128:104;;;29180:40;29206:13;29180:21;:25;;:40;;;;:::i;:::-;29166:54;;29128:104;29242:23;29310:11;29268:39;29289:17;;29268:16;;:20;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;29242:79;;29364:1;29346:15;:19;29342:123;;;29404:15;;;;;;;;;;;29396:29;;29433:15;29396:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29382:71;;;;;29342:123;29482:90;29510:15;29540:7;:21;;;;;29551:10;29540:21;29482:90;;;;;;;:::i;:::-;;;;;;;;28844:736;;;;;28790:790;;:::o;8866:98::-;8924:7;8955:1;8951;:5;;;;:::i;:::-;8944:12;;8866:98;;;;:::o;184:::-;237:7;264:10;257:17;;184:98;:::o;6527:378::-;6680:1;6663:19;;:5;:19;;;6655:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6761:1;6742:21;;:7;:21;;;6734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6843:6;6813:11;:18;6825:5;6813:18;;;;;;;;;;;;;;;:27;6832:7;6813:27;;;;;;;;;;;;;;;:36;;;;6881:7;6865:32;;6874:5;6865:32;;;6890:6;6865:32;;;;;;:::i;:::-;;;;;;;;6527:378;;;:::o;6911:453::-;7046:24;7073:25;7083:5;7090:7;7073:9;:25::i;:::-;7046:52;;7133:17;7113:16;:37;7109:248;;7195:6;7175:16;:26;;7167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7279:51;7288:5;7295:7;7323:6;7304:16;:25;7279:8;:51::i;:::-;7109:248;7035:329;6911:453;;;:::o;23453:3979::-;23569:1;23553:18;;:4;:18;;;23545:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23647:1;23633:16;;:2;:16;;;23625:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23718:1;23709:6;:10;23701:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23778:21;23817:33;:39;23851:4;23817:39;;;;;;;;;;;;;;;;;;;;;;;;;23812:142;;23881:14;;;;;;;;;;;23873:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;23812:142;23976:4;;;;;;;;;;;23970:10;;:2;:10;;;23966:3413;;23997:19;24003:4;24009:6;23997:5;:19::i;:::-;24031:7;;;23966:3413;24093:8;;;;;;;;;;;24092:9;:39;;;;;24106:19;:25;24126:4;24106:25;;;;;;;;;;;;;;;;;;;;;;;;;24105:26;24092:39;:67;;;;;24136:19;:23;24156:2;24136:23;;;;;;;;;;;;;;;;;;;;;;;;;24135:24;24092:67;24074:3305;;;24176:14;24193:25;:29;24219:2;24193:29;;;;;;;;;;;;;;;;;;;;;;;;;24176:46;;24237:13;24253:25;:31;24279:4;24253:31;;;;;;;;;;;;;;;;;;;;;;;;;24237:47;;24330:8;24329:9;:23;;;;;24343:9;24342:10;24329:23;24325:1199;;;24373:33;24389:4;24395:2;24399:6;24373:15;:33::i;:::-;24425:7;;;;;24325:1199;24496:9;24492:1032;;;24542:17;;24526:33;;24584:14;;;;;;;;;;;24580:270;;;24688:13;;24646:28;:39;24675:9;24646:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;24627:15;:74;;24619:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;24815:15;24773:28;:39;24802:9;24773:39;;;;;;;;;;;;;;;:57;;;;24580:270;24492:1032;;;24903:8;24899:625;;;24948:16;;24932:32;;24989:14;;;;;;;;;;;24985:289;;;25061:10;;25047:11;;:24;;;;:::i;:::-;25032:12;:39;25024:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25156:12;25117:24;:35;25142:9;25117:35;;;;;;;;;;;;;;;;:51;25109:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;25246:12;25208:24;:35;25233:9;25208:35;;;;;;;;;;;;;;;:50;;;;24985:289;25294:16;;;;;;;;;;;25290:219;;;25327:32;25362:13;25372:2;25362:9;:13::i;:::-;25327:48;;25435:9;;25425:6;25398:24;:33;;;;:::i;:::-;:46;;25390:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25312:197;25290:219;24899:625;24492:1032;25540:17;25560:13;25540:33;;25590:28;25621:24;25639:4;25621:9;:24::i;:::-;25590:55;;25662:12;25701:18;;25677:20;:42;;25662:57;;25740:7;:20;;;;;25751:9;25740:20;25736:1284;;;25792:4;25781:8;;:15;;;;;;;;;;;;;;;;;;25834:21;;;;;;;;;;;:42;;;;;25875:1;25859:13;:17;25834:42;:62;;;;;25895:1;25880:12;;:16;25834:62;25830:906;;;25921:20;25944:25;25958:10;;25944:9;;:13;;:25;;;;:::i;:::-;25921:48;;25992:24;26019:105;26111:12;26019:61;26070:9;;26019:20;:50;;:61;;;;:::i;:::-;:91;;:105;;;;:::i;:::-;25992:132;;26147:22;26172:106;26265:12;26172:62;26223:10;;26172:20;:50;;:62;;;;:::i;:::-;:92;;:106;;;;:::i;:::-;26147:131;;26303:21;26327:105;26419:12;;26327:61;26374:13;26327:16;:46;;:61;;;;:::i;:::-;:91;;:105;;;;:::i;:::-;26303:129;;26457:22;26482:104;26572:13;;26482:59;26527:13;26482:14;:44;;:59;;;;:::i;:::-;:89;;:104;;;;:::i;:::-;26457:129;;26611:18;26632:33;26651:13;26632:14;:18;;:33;;;;:::i;:::-;26611:54;;26690:26;26705:10;26690:14;:26::i;:::-;25898:838;;;;;;25830:906;26806:19;26828:24;26846:4;26828:9;:24::i;:::-;26806:46;;26871:33;26892:11;26871:20;:33::i;:::-;26935:1;26923:9;:13;;;;26968:1;26955:10;:14;;;;26999:5;26988:8;;:16;;;;;;;;;;;;;;;;;;25762:1258;25736:1284;27036:12;27051:30;27077:3;27051:21;27062:9;27051:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27036:45;;27107:16;27118:4;27107:6;:10;;:16;;;;:::i;:::-;27098:25;;27144:9;27140:155;;;27187:20;27202:4;27187:10;;:14;;:20;;;;:::i;:::-;27174:10;:33;;;;27140:155;;;27260:19;27274:4;27260:9;;:13;;:19;;;;:::i;:::-;27248:9;:31;;;;27140:155;27311:42;27327:4;27341;27348;27311:15;:42::i;:::-;24161:3218;;;;;;24074:3305;27391:33;27407:4;27413:2;27417:6;27391:15;:33::i;:::-;23532:3900;23453:3979;;;;:::o;1250:191::-;1324:16;1343:6;;;;;;;;;;;1324:25;;1369:8;1360:6;;:17;;;;;;;;;;;;;;;;;;1424:8;1393:40;;1414:8;1393:40;;;;;;;;;;;;1313:128;1250:191;:::o;22668:188::-;22785:5;22751:25;:31;22777:4;22751:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22842:5;22808:40;;22836:4;22808:40;;;;;;;;;;;;22668:188;;:::o;27807:499::-;27873:21;27911:1;27897:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27873:40;;27942:4;27924;27929:1;27924:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27968:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27958:4;27963:1;27958:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28001:62;28018:4;28033:15;;;;;;;;;;;28051:11;28001:8;:62::i;:::-;28074:15;;;;;;;;;;;:66;;;28155:11;28181:1;28225:4;28252;28272:15;28074:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27862:444;27807:499;:::o;5938:583::-;6041:1;6022:21;;:7;:21;;;6014:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6092:49;6113:7;6130:1;6134:6;6092:20;:49::i;:::-;6152:22;6177:9;:18;6187:7;6177:18;;;;;;;;;;;;;;;;6152:43;;6232:6;6214:14;:24;;6206:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6351:6;6334:14;:23;6313:9;:18;6323:7;6313:18;;;;;;;;;;;;;;;:44;;;;6395:6;6379:12;;:22;;;;;;;:::i;:::-;;;;;;;;6443:1;6417:37;;6426:7;6417:37;;;6447:6;6417:37;;;;;;:::i;:::-;;;;;;;;6465:48;6485:7;6502:1;6506:6;6465:19;:48::i;:::-;6003:518;5938:583;;:::o;4870:663::-;5017:1;5001:18;;:4;:18;;;4993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5094:1;5080:16;;:2;:16;;;5072:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5147:38;5168:4;5174:2;5178:6;5147:20;:38::i;:::-;5196:19;5218:9;:15;5228:4;5218:15;;;;;;;;;;;;;;;;5196:37;;5267:6;5252:11;:21;;5244:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;5384:6;5370:11;:20;5352:9;:15;5362:4;5352:15;;;;;;;;;;;;;;;:38;;;;5429:6;5412:9;:13;5422:2;5412:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;5466:2;5451:26;;5460:4;5451:26;;;5470:6;5451:26;;;;;;:::i;:::-;;;;;;;;5488:37;5508:4;5514:2;5518:6;5488:19;:37::i;:::-;4982:551;4870:663;;;:::o;27440:359::-;27499:12;27514:6;27499:21;;27531:22;27556:21;27531:46;;27588:22;27605:4;27588:16;:22::i;:::-;27681:18;27702:41;27728:14;27702:21;:25;;:41;;;;:::i;:::-;27681:62;;27759:32;27774:4;27780:10;27759:32;;;;;;;:::i;:::-;;;;;;;;27488:311;;;27440:359;:::o;7370:125::-;;;;:::o;7501:124::-;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;674:117::-;783:1;780;773:12;920:77;957:7;986:5;975:16;;920:77;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:99::-;1663:6;1697:5;1691:12;1681:22;;1611:99;;;:::o;1716:169::-;1800:11;1834:6;1829:3;1822:19;1874:4;1869:3;1865:14;1850:29;;1716:169;;;;:::o;1891:246::-;1972:1;1982:113;1996:6;1993:1;1990:13;1982:113;;;2081:1;2076:3;2072:11;2066:18;2062:1;2057:3;2053:11;2046:39;2018:2;2015:1;2011:10;2006:15;;1982:113;;;2129:1;2120:6;2115:3;2111:16;2104:27;1953:184;1891:246;;;:::o;2143:102::-;2184:6;2235:2;2231:7;2226:2;2219:5;2215:14;2211:28;2201:38;;2143:102;;;:::o;2251:377::-;2339:3;2367:39;2400:5;2367:39;:::i;:::-;2422:71;2486:6;2481:3;2422:71;:::i;:::-;2415:78;;2502:65;2560:6;2555:3;2548:4;2541:5;2537:16;2502:65;:::i;:::-;2592:29;2614:6;2592:29;:::i;:::-;2587:3;2583:39;2576:46;;2343:285;2251:377;;;;:::o;2634:313::-;2747:4;2785:2;2774:9;2770:18;2762:26;;2834:9;2828:4;2824:20;2820:1;2809:9;2805:17;2798:47;2862:78;2935:4;2926:6;2862:78;:::i;:::-;2854:86;;2634:313;;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:90::-;3260:7;3303:5;3296:13;3289:21;3278:32;;3226:90;;;:::o;3322:116::-;3392:21;3407:5;3392:21;:::i;:::-;3385:5;3382:32;3372:60;;3428:1;3425;3418:12;3372:60;3322:116;:::o;3444:133::-;3487:5;3525:6;3512:20;3503:29;;3541:30;3565:5;3541:30;:::i;:::-;3444:133;;;;:::o;3583:468::-;3648:6;3656;3705:2;3693:9;3684:7;3680:23;3676:32;3673:119;;;3711:79;;:::i;:::-;3673:119;3831:1;3856:53;3901:7;3892:6;3881:9;3877:22;3856:53;:::i;:::-;3846:63;;3802:117;3958:2;3984:50;4026:7;4017:6;4006:9;4002:22;3984:50;:::i;:::-;3974:60;;3929:115;3583:468;;;;;:::o;4057:474::-;4125:6;4133;4182:2;4170:9;4161:7;4157:23;4153:32;4150:119;;;4188:79;;:::i;:::-;4150:119;4308:1;4333:53;4378:7;4369:6;4358:9;4354:22;4333:53;:::i;:::-;4323:63;;4279:117;4435:2;4461:53;4506:7;4497:6;4486:9;4482:22;4461:53;:::i;:::-;4451:63;;4406:118;4057:474;;;;;:::o;4537:109::-;4618:21;4633:5;4618:21;:::i;:::-;4613:3;4606:34;4537:109;;:::o;4652:210::-;4739:4;4777:2;4766:9;4762:18;4754:26;;4790:65;4852:1;4841:9;4837:17;4828:6;4790:65;:::i;:::-;4652:210;;;;:::o;4868:60::-;4896:3;4917:5;4910:12;;4868:60;;;:::o;4934:142::-;4984:9;5017:53;5035:34;5044:24;5062:5;5044:24;:::i;:::-;5035:34;:::i;:::-;5017:53;:::i;:::-;5004:66;;4934:142;;;:::o;5082:126::-;5132:9;5165:37;5196:5;5165:37;:::i;:::-;5152:50;;5082:126;;;:::o;5214:153::-;5291:9;5324:37;5355:5;5324:37;:::i;:::-;5311:50;;5214:153;;;:::o;5373:185::-;5487:64;5545:5;5487:64;:::i;:::-;5482:3;5475:77;5373:185;;:::o;5564:276::-;5684:4;5722:2;5711:9;5707:18;5699:26;;5735:98;5830:1;5819:9;5815:17;5806:6;5735:98;:::i;:::-;5564:276;;;;:::o;5846:118::-;5933:24;5951:5;5933:24;:::i;:::-;5928:3;5921:37;5846:118;;:::o;5970:222::-;6063:4;6101:2;6090:9;6086:18;6078:26;;6114:71;6182:1;6171:9;6167:17;6158:6;6114:71;:::i;:::-;5970:222;;;;:::o;6198:619::-;6275:6;6283;6291;6340:2;6328:9;6319:7;6315:23;6311:32;6308:119;;;6346:79;;:::i;:::-;6308:119;6466:1;6491:53;6536:7;6527:6;6516:9;6512:22;6491:53;:::i;:::-;6481:63;;6437:117;6593:2;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6564:118;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6198:619;;;;;:::o;6823:86::-;6858:7;6898:4;6891:5;6887:16;6876:27;;6823:86;;;:::o;6915:112::-;6998:22;7014:5;6998:22;:::i;:::-;6993:3;6986:35;6915:112;;:::o;7033:214::-;7122:4;7160:2;7149:9;7145:18;7137:26;;7173:67;7237:1;7226:9;7222:17;7213:6;7173:67;:::i;:::-;7033:214;;;;:::o;7253:329::-;7312:6;7361:2;7349:9;7340:7;7336:23;7332:32;7329:119;;;7367:79;;:::i;:::-;7329:119;7487:1;7512:53;7557:7;7548:6;7537:9;7533:22;7512:53;:::i;:::-;7502:63;;7458:117;7253:329;;;;:::o;7588:323::-;7644:6;7693:2;7681:9;7672:7;7668:23;7664:32;7661:119;;;7699:79;;:::i;:::-;7661:119;7819:1;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7790:114;7588:323;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:104::-;8442:7;8471:24;8489:5;8471:24;:::i;:::-;8460:35;;8397:104;;;:::o;8507:142::-;8610:32;8636:5;8610:32;:::i;:::-;8605:3;8598:45;8507:142;;:::o;8655:254::-;8764:4;8802:2;8791:9;8787:18;8779:26;;8815:87;8899:1;8888:9;8884:17;8875:6;8815:87;:::i;:::-;8655:254;;;;:::o;8915:474::-;8983:6;8991;9040:2;9028:9;9019:7;9015:23;9011:32;9008:119;;;9046:79;;:::i;:::-;9008:119;9166:1;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9137:117;9293:2;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9264:118;8915:474;;;;;:::o;9395:180::-;9443:77;9440:1;9433:88;9540:4;9537:1;9530:15;9564:4;9561:1;9554:15;9581:410;9621:7;9644:20;9662:1;9644:20;:::i;:::-;9639:25;;9678:20;9696:1;9678:20;:::i;:::-;9673:25;;9733:1;9730;9726:9;9755:30;9773:11;9755:30;:::i;:::-;9744:41;;9934:1;9925:7;9921:15;9918:1;9915:22;9895:1;9888:9;9868:83;9845:139;;9964:18;;:::i;:::-;9845:139;9629:362;9581:410;;;;:::o;9997:180::-;10045:77;10042:1;10035:88;10142:4;10139:1;10132:15;10166:4;10163:1;10156:15;10183:320;10227:6;10264:1;10258:4;10254:12;10244:22;;10311:1;10305:4;10301:12;10332:18;10322:81;;10388:4;10380:6;10376:17;10366:27;;10322:81;10450:2;10442:6;10439:14;10419:18;10416:38;10413:84;;10469:18;;:::i;:::-;10413:84;10234:269;10183:320;;;:::o;10509:191::-;10549:3;10568:20;10586:1;10568:20;:::i;:::-;10563:25;;10602:20;10620:1;10602:20;:::i;:::-;10597:25;;10645:1;10642;10638:9;10631:16;;10666:3;10663:1;10660:10;10657:36;;;10673:18;;:::i;:::-;10657:36;10509:191;;;;:::o;10706:237::-;10846:34;10842:1;10834:6;10830:14;10823:58;10915:20;10910:2;10902:6;10898:15;10891:45;10706:237;:::o;10949:366::-;11091:3;11112:67;11176:2;11171:3;11112:67;:::i;:::-;11105:74;;11188:93;11277:3;11188:93;:::i;:::-;11306:2;11301:3;11297:12;11290:19;;10949:366;;;:::o;11321:419::-;11487:4;11525:2;11514:9;11510:18;11502:26;;11574:9;11568:4;11564:20;11560:1;11549:9;11545:17;11538:47;11602:131;11728:4;11602:131;:::i;:::-;11594:139;;11321:419;;;:::o;11746:332::-;11867:4;11905:2;11894:9;11890:18;11882:26;;11918:71;11986:1;11975:9;11971:17;11962:6;11918:71;:::i;:::-;11999:72;12067:2;12056:9;12052:18;12043:6;11999:72;:::i;:::-;11746:332;;;;;:::o;12084:224::-;12224:34;12220:1;12212:6;12208:14;12201:58;12293:7;12288:2;12280:6;12276:15;12269:32;12084:224;:::o;12314:366::-;12456:3;12477:67;12541:2;12536:3;12477:67;:::i;:::-;12470:74;;12553:93;12642:3;12553:93;:::i;:::-;12671:2;12666:3;12662:12;12655:19;;12314:366;;;:::o;12686:419::-;12852:4;12890:2;12879:9;12875:18;12867:26;;12939:9;12933:4;12929:20;12925:1;12914:9;12910:17;12903:47;12967:131;13093:4;12967:131;:::i;:::-;12959:139;;12686:419;;;:::o;13111:225::-;13251:34;13247:1;13239:6;13235:14;13228:58;13320:8;13315:2;13307:6;13303:15;13296:33;13111:225;:::o;13342:366::-;13484:3;13505:67;13569:2;13564:3;13505:67;:::i;:::-;13498:74;;13581:93;13670:3;13581:93;:::i;:::-;13699:2;13694:3;13690:12;13683:19;;13342:366;;;:::o;13714:419::-;13880:4;13918:2;13907:9;13903:18;13895:26;;13967:9;13961:4;13957:20;13953:1;13942:9;13938:17;13931:47;13995:131;14121:4;13995:131;:::i;:::-;13987:139;;13714:419;;;:::o;14139:182::-;14279:34;14275:1;14267:6;14263:14;14256:58;14139:182;:::o;14327:366::-;14469:3;14490:67;14554:2;14549:3;14490:67;:::i;:::-;14483:74;;14566:93;14655:3;14566:93;:::i;:::-;14684:2;14679:3;14675:12;14668:19;;14327:366;;;:::o;14699:419::-;14865:4;14903:2;14892:9;14888:18;14880:26;;14952:9;14946:4;14942:20;14938:1;14927:9;14923:17;14916:47;14980:131;15106:4;14980:131;:::i;:::-;14972:139;;14699:419;;;:::o;15124:180::-;15172:77;15169:1;15162:88;15269:4;15266:1;15259:15;15293:4;15290:1;15283:15;15310:185;15350:1;15367:20;15385:1;15367:20;:::i;:::-;15362:25;;15401:20;15419:1;15401:20;:::i;:::-;15396:25;;15440:1;15430:35;;15445:18;;:::i;:::-;15430:35;15487:1;15484;15480:9;15475:14;;15310:185;;;;:::o;15501:147::-;15602:11;15639:3;15624:18;;15501:147;;;;:::o;15654:114::-;;:::o;15774:398::-;15933:3;15954:83;16035:1;16030:3;15954:83;:::i;:::-;15947:90;;16046:93;16135:3;16046:93;:::i;:::-;16164:1;16159:3;16155:11;16148:18;;15774:398;;;:::o;16178:379::-;16362:3;16384:147;16527:3;16384:147;:::i;:::-;16377:154;;16548:3;16541:10;;16178:379;;;:::o;16563:320::-;16678:4;16716:2;16705:9;16701:18;16693:26;;16729:71;16797:1;16786:9;16782:17;16773:6;16729:71;:::i;:::-;16810:66;16872:2;16861:9;16857:18;16848:6;16810:66;:::i;:::-;16563:320;;;;;:::o;16889:194::-;16929:4;16949:20;16967:1;16949:20;:::i;:::-;16944:25;;16983:20;17001:1;16983:20;:::i;:::-;16978:25;;17027:1;17024;17020:9;17012:17;;17051:1;17045:4;17042:11;17039:37;;;17056:18;;:::i;:::-;17039:37;16889:194;;;;:::o;17089:223::-;17229:34;17225:1;17217:6;17213:14;17206:58;17298:6;17293:2;17285:6;17281:15;17274:31;17089:223;:::o;17318:366::-;17460:3;17481:67;17545:2;17540:3;17481:67;:::i;:::-;17474:74;;17557:93;17646:3;17557:93;:::i;:::-;17675:2;17670:3;17666:12;17659:19;;17318:366;;;:::o;17690:419::-;17856:4;17894:2;17883:9;17879:18;17871:26;;17943:9;17937:4;17933:20;17929:1;17918:9;17914:17;17907:47;17971:131;18097:4;17971:131;:::i;:::-;17963:139;;17690:419;;;:::o;18115:221::-;18255:34;18251:1;18243:6;18239:14;18232:58;18324:4;18319:2;18311:6;18307:15;18300:29;18115:221;:::o;18342:366::-;18484:3;18505:67;18569:2;18564:3;18505:67;:::i;:::-;18498:74;;18581:93;18670:3;18581:93;:::i;:::-;18699:2;18694:3;18690:12;18683:19;;18342:366;;;:::o;18714:419::-;18880:4;18918:2;18907:9;18903:18;18895:26;;18967:9;18961:4;18957:20;18953:1;18942:9;18938:17;18931:47;18995:131;19121:4;18995:131;:::i;:::-;18987:139;;18714:419;;;:::o;19139:179::-;19279:31;19275:1;19267:6;19263:14;19256:55;19139:179;:::o;19324:366::-;19466:3;19487:67;19551:2;19546:3;19487:67;:::i;:::-;19480:74;;19563:93;19652:3;19563:93;:::i;:::-;19681:2;19676:3;19672:12;19665:19;;19324:366;;;:::o;19696:419::-;19862:4;19900:2;19889:9;19885:18;19877:26;;19949:9;19943:4;19939:20;19935:1;19924:9;19920:17;19913:47;19977:131;20103:4;19977:131;:::i;:::-;19969:139;;19696:419;;;:::o;20121:225::-;20261:34;20257:1;20249:6;20245:14;20238:58;20330:8;20325:2;20317:6;20313:15;20306:33;20121:225;:::o;20352:366::-;20494:3;20515:67;20579:2;20574:3;20515:67;:::i;:::-;20508:74;;20591:93;20680:3;20591:93;:::i;:::-;20709:2;20704:3;20700:12;20693:19;;20352:366;;;:::o;20724:419::-;20890:4;20928:2;20917:9;20913:18;20905:26;;20977:9;20971:4;20967:20;20963:1;20952:9;20948:17;20941:47;21005:131;21131:4;21005:131;:::i;:::-;20997:139;;20724:419;;;:::o;21149:223::-;21289:34;21285:1;21277:6;21273:14;21266:58;21358:6;21353:2;21345:6;21341:15;21334:31;21149:223;:::o;21378:366::-;21520:3;21541:67;21605:2;21600:3;21541:67;:::i;:::-;21534:74;;21617:93;21706:3;21617:93;:::i;:::-;21735:2;21730:3;21726:12;21719:19;;21378:366;;;:::o;21750:419::-;21916:4;21954:2;21943:9;21939:18;21931:26;;22003:9;21997:4;21993:20;21989:1;21978:9;21974:17;21967:47;22031:131;22157:4;22031:131;:::i;:::-;22023:139;;21750:419;;;:::o;22175:228::-;22315:34;22311:1;22303:6;22299:14;22292:58;22384:11;22379:2;22371:6;22367:15;22360:36;22175:228;:::o;22409:366::-;22551:3;22572:67;22636:2;22631:3;22572:67;:::i;:::-;22565:74;;22648:93;22737:3;22648:93;:::i;:::-;22766:2;22761:3;22757:12;22750:19;;22409:366;;;:::o;22781:419::-;22947:4;22985:2;22974:9;22970:18;22962:26;;23034:9;23028:4;23024:20;23020:1;23009:9;23005:17;22998:47;23062:131;23188:4;23062:131;:::i;:::-;23054:139;;22781:419;;;:::o;23206:182::-;23346:34;23342:1;23334:6;23330:14;23323:58;23206:182;:::o;23394:366::-;23536:3;23557:67;23621:2;23616:3;23557:67;:::i;:::-;23550:74;;23633:93;23722:3;23633:93;:::i;:::-;23751:2;23746:3;23742:12;23735:19;;23394:366;;;:::o;23766:419::-;23932:4;23970:2;23959:9;23955:18;23947:26;;24019:9;24013:4;24009:20;24005:1;23994:9;23990:17;23983:47;24047:131;24173:4;24047:131;:::i;:::-;24039:139;;23766:419;;;:::o;24191:173::-;24331:25;24327:1;24319:6;24315:14;24308:49;24191:173;:::o;24370:366::-;24512:3;24533:67;24597:2;24592:3;24533:67;:::i;:::-;24526:74;;24609:93;24698:3;24609:93;:::i;:::-;24727:2;24722:3;24718:12;24711:19;;24370:366;;;:::o;24742:419::-;24908:4;24946:2;24935:9;24931:18;24923:26;;24995:9;24989:4;24985:20;24981:1;24970:9;24966:17;24959:47;25023:131;25149:4;25023:131;:::i;:::-;25015:139;;24742:419;;;:::o;25167:165::-;25307:17;25303:1;25295:6;25291:14;25284:41;25167:165;:::o;25338:366::-;25480:3;25501:67;25565:2;25560:3;25501:67;:::i;:::-;25494:74;;25577:93;25666:3;25577:93;:::i;:::-;25695:2;25690:3;25686:12;25679:19;;25338:366;;;:::o;25710:419::-;25876:4;25914:2;25903:9;25899:18;25891:26;;25963:9;25957:4;25953:20;25949:1;25938:9;25934:17;25927:47;25991:131;26117:4;25991:131;:::i;:::-;25983:139;;25710:419;;;:::o;26135:167::-;26275:19;26271:1;26263:6;26259:14;26252:43;26135:167;:::o;26308:366::-;26450:3;26471:67;26535:2;26530:3;26471:67;:::i;:::-;26464:74;;26547:93;26636:3;26547:93;:::i;:::-;26665:2;26660:3;26656:12;26649:19;;26308:366;;;:::o;26680:419::-;26846:4;26884:2;26873:9;26869:18;26861:26;;26933:9;26927:4;26923:20;26919:1;26908:9;26904:17;26897:47;26961:131;27087:4;26961:131;:::i;:::-;26953:139;;26680:419;;;:::o;27105:172::-;27245:24;27241:1;27233:6;27229:14;27222:48;27105:172;:::o;27283:366::-;27425:3;27446:67;27510:2;27505:3;27446:67;:::i;:::-;27439:74;;27522:93;27611:3;27522:93;:::i;:::-;27640:2;27635:3;27631:12;27624:19;;27283:366;;;:::o;27655:419::-;27821:4;27859:2;27848:9;27844:18;27836:26;;27908:9;27902:4;27898:20;27894:1;27883:9;27879:17;27872:47;27936:131;28062:4;27936:131;:::i;:::-;27928:139;;27655:419;;;:::o;28080:180::-;28128:77;28125:1;28118:88;28225:4;28222:1;28215:15;28249:4;28246:1;28239:15;28266:180;28314:77;28311:1;28304:88;28411:4;28408:1;28401:15;28435:4;28432:1;28425:15;28452:143;28509:5;28540:6;28534:13;28525:22;;28556:33;28583:5;28556:33;:::i;:::-;28452:143;;;;:::o;28601:351::-;28671:6;28720:2;28708:9;28699:7;28695:23;28691:32;28688:119;;;28726:79;;:::i;:::-;28688:119;28846:1;28871:64;28927:7;28918:6;28907:9;28903:22;28871:64;:::i;:::-;28861:74;;28817:128;28601:351;;;;:::o;28958:85::-;29003:7;29032:5;29021:16;;28958:85;;;:::o;29049:158::-;29107:9;29140:61;29158:42;29167:32;29193:5;29167:32;:::i;:::-;29158:42;:::i;:::-;29140:61;:::i;:::-;29127:74;;29049:158;;;:::o;29213:147::-;29308:45;29347:5;29308:45;:::i;:::-;29303:3;29296:58;29213:147;;:::o;29366:114::-;29433:6;29467:5;29461:12;29451:22;;29366:114;;;:::o;29486:184::-;29585:11;29619:6;29614:3;29607:19;29659:4;29654:3;29650:14;29635:29;;29486:184;;;;:::o;29676:132::-;29743:4;29766:3;29758:11;;29796:4;29791:3;29787:14;29779:22;;29676:132;;;:::o;29814:108::-;29891:24;29909:5;29891:24;:::i;:::-;29886:3;29879:37;29814:108;;:::o;29928:179::-;29997:10;30018:46;30060:3;30052:6;30018:46;:::i;:::-;30096:4;30091:3;30087:14;30073:28;;29928:179;;;;:::o;30113:113::-;30183:4;30215;30210:3;30206:14;30198:22;;30113:113;;;:::o;30262:732::-;30381:3;30410:54;30458:5;30410:54;:::i;:::-;30480:86;30559:6;30554:3;30480:86;:::i;:::-;30473:93;;30590:56;30640:5;30590:56;:::i;:::-;30669:7;30700:1;30685:284;30710:6;30707:1;30704:13;30685:284;;;30786:6;30780:13;30813:63;30872:3;30857:13;30813:63;:::i;:::-;30806:70;;30899:60;30952:6;30899:60;:::i;:::-;30889:70;;30745:224;30732:1;30729;30725:9;30720:14;;30685:284;;;30689:14;30985:3;30978:10;;30386:608;;;30262:732;;;;:::o;31000:831::-;31263:4;31301:3;31290:9;31286:19;31278:27;;31315:71;31383:1;31372:9;31368:17;31359:6;31315:71;:::i;:::-;31396:80;31472:2;31461:9;31457:18;31448:6;31396:80;:::i;:::-;31523:9;31517:4;31513:20;31508:2;31497:9;31493:18;31486:48;31551:108;31654:4;31645:6;31551:108;:::i;:::-;31543:116;;31669:72;31737:2;31726:9;31722:18;31713:6;31669:72;:::i;:::-;31751:73;31819:3;31808:9;31804:19;31795:6;31751:73;:::i;:::-;31000:831;;;;;;;;:::o;31837:220::-;31977:34;31973:1;31965:6;31961:14;31954:58;32046:3;32041:2;32033:6;32029:15;32022:28;31837:220;:::o;32063:366::-;32205:3;32226:67;32290:2;32285:3;32226:67;:::i;:::-;32219:74;;32302:93;32391:3;32302:93;:::i;:::-;32420:2;32415:3;32411:12;32404:19;;32063:366;;;:::o;32435:419::-;32601:4;32639:2;32628:9;32624:18;32616:26;;32688:9;32682:4;32678:20;32674:1;32663:9;32659:17;32652:47;32716:131;32842:4;32716:131;:::i;:::-;32708:139;;32435:419;;;:::o;32860:221::-;33000:34;32996:1;32988:6;32984:14;32977:58;33069:4;33064:2;33056:6;33052:15;33045:29;32860:221;:::o;33087:366::-;33229:3;33250:67;33314:2;33309:3;33250:67;:::i;:::-;33243:74;;33326:93;33415:3;33326:93;:::i;:::-;33444:2;33439:3;33435:12;33428:19;;33087:366;;;:::o;33459:419::-;33625:4;33663:2;33652:9;33648:18;33640:26;;33712:9;33706:4;33702:20;33698:1;33687:9;33683:17;33676:47;33740:131;33866:4;33740:131;:::i;:::-;33732:139;;33459:419;;;:::o;33884:224::-;34024:34;34020:1;34012:6;34008:14;34001:58;34093:7;34088:2;34080:6;34076:15;34069:32;33884:224;:::o;34114:366::-;34256:3;34277:67;34341:2;34336:3;34277:67;:::i;:::-;34270:74;;34353:93;34442:3;34353:93;:::i;:::-;34471:2;34466:3;34462:12;34455:19;;34114:366;;;:::o;34486:419::-;34652:4;34690:2;34679:9;34675:18;34667:26;;34739:9;34733:4;34729:20;34725:1;34714:9;34710:17;34703:47;34767:131;34893:4;34767:131;:::i;:::-;34759:139;;34486:419;;;:::o;34911:222::-;35051:34;35047:1;35039:6;35035:14;35028:58;35120:5;35115:2;35107:6;35103:15;35096:30;34911:222;:::o;35139:366::-;35281:3;35302:67;35366:2;35361:3;35302:67;:::i;:::-;35295:74;;35378:93;35467:3;35378:93;:::i;:::-;35496:2;35491:3;35487:12;35480:19;;35139:366;;;:::o;35511:419::-;35677:4;35715:2;35704:9;35700:18;35692:26;;35764:9;35758:4;35754:20;35750:1;35739:9;35735:17;35728:47;35792:131;35918:4;35792:131;:::i;:::-;35784:139;;35511:419;;;:::o;35936:225::-;36076:34;36072:1;36064:6;36060:14;36053:58;36145:8;36140:2;36132:6;36128:15;36121:33;35936:225;:::o;36167:366::-;36309:3;36330:67;36394:2;36389:3;36330:67;:::i;:::-;36323:74;;36406:93;36495:3;36406:93;:::i;:::-;36524:2;36519:3;36515:12;36508:19;;36167:366;;;:::o;36539:419::-;36705:4;36743:2;36732:9;36728:18;36720:26;;36792:9;36786:4;36782:20;36778:1;36767:9;36763:17;36756:47;36820:131;36946:4;36820:131;:::i;:::-;36812:139;;36539:419;;;:::o

Swarm Source

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