ETH Price: $3,005.56 (+1.56%)
Gas: 2 Gwei

Token

HERO (HERO)
 

Overview

Max Total Supply

1,000,000,000 HERO

Holders

79

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
802,025.140759921447514498 HERO

Value
$0.00
0x2d9980158a910219550027adc0b001b347869a06
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:
HERO

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
                          ██████████                            
                    ████████      ██████████                    
                ██████                    ██████                
            ██████                            ██████            
          ████                                    ████          
        ████                                        ████        
      ████  ██                ██████████          ██  ████      
      ██  ██████              ██████            ██████  ██      
    ████  ██████████        ████████        ██████████  ████    
    ██    ████████████      ████████      ████████████    ██    
  ████  ██  ████████████  ████████████  ████████████  ██  ████  
  ██  ████    ██████████████████████████████████████  ████  ██  
████  ██████    ██████████████████████████████████  ██████  ████
██  ████████      ██████████████████████████████  ██  ██████  ██
██  ██████  ████    ██████████████████████████  ██████  ████  ██
██  ████  ████████  ████████████████████████  ██████████  ██  ██
██      ██████████    ████████████████████    ████████████    ██
██  ████████████  ██    ████████████████    ██  ████████████  ██
██  ██████████  ██████    ████████████    ██████  ██████████  ██
██  ████████  ██████████    ████████    ██████████  ████████  ██
████  ████  ██████████    ██  ████  ██    ██████████  ████  ████
  ██      ████████████  ██████    ██████  ████████████  ██  ██  
  ████  ████████████    ██████    ██████    ████████████  ████  
    ██  ██████████    ████████████████████    ██████████  ██    
    ████  ██████    ████████████████████████    ██████  ████    
      ████  ██      ██████████████████████████    ██  ████      
        ████      ████████████████████████████      ████        
          ████  ████████████████████████████████  ████          
*/

                                            
// SPDX-License-Identifier: MIT


pragma solidity 0.8.11;

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function factory() external view returns (address);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn, 
        uint amountOutMin, 
        address[] calldata path, 
        address to, 
        uint deadline
    ) external;
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping (address => bool) public isBot;
    bool private _swapping;
    uint256 private _launchTime;

    address private marketingWallet;
    address private devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
        
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

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

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

    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);
    
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);

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

        uint256 _buyMarketingFee = 5;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 5;
 
        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 5;
        
        uint256 totalSupply = 1 * 1e9 * 1e18;
        
        maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 3 / 100; // 3% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        // Set Fees
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        // Set Fee Wallet
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

        receive() external payable {
 
    }
 

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp.add(1);
    }
   
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e18;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    // Variable Block - once enabled, can never be turned off 
    function enableTrading(uint256 Bblock) external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp.add(Bblock);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }
    
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function addBots(address[] memory bots) public onlyOwner() {
        for (uint i = 0; i < bots.length; i++) {
            if (bots[i] != uniswapV2Pair && bots[i] != address(uniswapV2Router)) {
                isBot[bots[i]] = true;
            }
        }
    }
    
    function removeBots(address[] memory bots) public onlyOwner() {
        for (uint i = 0; i < bots.length; i++) {
            isBot[bots[i]] = false;
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBot[from], "Your address has been marked as a bot/sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if (block.timestamp < _launchTime) isBot[to] = true;
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                // On buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                // On sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) takeFee = false;
        
        
        uint256 fees = 0;
        // Only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // On sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }

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

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        _swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Bblock","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"removeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506001601060006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600481526020017f4845524f000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4845524f000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000a50565b5080600490805190602001906200010092919062000a50565b5050506200012362000117620005a660201b60201c565b620005ae60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200014f8160016200067460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000b6a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000283919062000b6a565b6040518363ffffffff1660e01b8152600401620002a292919062000bad565b6020604051808303816000875af1158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000b6a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033060a05160016200067460201b60201c565b6200034560a05160016200075e60201b60201c565b600060059050600080600590506000600590506000806005905060006b033b2e3c9fd0803ce80000009050606460028262000381919062000c13565b6200038d919062000ca3565b600b819055506064600382620003a4919062000c13565b620003b0919062000ca3565b600d81905550612710600582620003c8919062000c13565b620003d4919062000ca3565b600c8190555086601281905550856013819055508460148190555060145460135460125462000404919062000cdb565b62000410919062000cdb565b60118190555083601681905550826017819055508160188190555060185460175460165462000440919062000cdb565b6200044c919062000cdb565b60158190555062000462620007b960201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004b2620007b960201b60201c565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200051462000506620007b960201b60201c565b6001620007e360201b60201c565b62000527306001620007e360201b60201c565b6200053c61dead6001620007e360201b60201c565b6200055e62000550620007b960201b60201c565b60016200067460201b60201c565b620005713060016200067460201b60201c565b6200058661dead60016200067460201b60201c565b620005983382620008cd60201b60201c565b505050505050505062000ec0565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000684620005a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006aa620007b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000703576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fa9062000d99565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007f3620005a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000819620007b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000872576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008699062000d99565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009379062000e0b565b60405180910390fd5b620009546000838362000a4660201b60201c565b806002600082825462000968919062000cdb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009bf919062000cdb565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a26919062000e3e565b60405180910390a362000a426000838362000a4b60201b60201c565b5050565b505050565b505050565b82805462000a5e9062000e8a565b90600052602060002090601f01602090048101928262000a82576000855562000ace565b82601f1062000a9d57805160ff191683800117855562000ace565b8280016001018555821562000ace579182015b8281111562000acd57825182559160200191906001019062000ab0565b5b50905062000add919062000ae1565b5090565b5b8082111562000afc57600081600090555060010162000ae2565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b328262000b05565b9050919050565b62000b448162000b25565b811462000b5057600080fd5b50565b60008151905062000b648162000b39565b92915050565b60006020828403121562000b835762000b8262000b00565b5b600062000b938482850162000b53565b91505092915050565b62000ba78162000b25565b82525050565b600060408201905062000bc4600083018562000b9c565b62000bd3602083018462000b9c565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c208262000bda565b915062000c2d8362000bda565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c695762000c6862000be4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cb08262000bda565b915062000cbd8362000bda565b92508262000cd05762000ccf62000c74565b5b828204905092915050565b600062000ce88262000bda565b915062000cf58362000bda565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d2d5762000d2c62000be4565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d8160208362000d38565b915062000d8e8262000d49565b602082019050919050565b6000602082019050818103600083015262000db48162000d72565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000df3601f8362000d38565b915062000e008262000dbb565b602082019050919050565b6000602082019050818103600083015262000e268162000de4565b9050919050565b62000e388162000bda565b82525050565b600060208201905062000e55600083018462000e2d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ea357607f821691505b6020821081141562000eba5762000eb962000e5b565b5b50919050565b60805160a05161560e62000f2c600039600081816111f201528181611986015281816121880152612ba9015260008181610d79015281816121f901528181612b5101528181613bfd01528181613cde01528181613d0501528181613da10152613dc8015261560e6000f3fe60806040526004361061031e5760003560e01c80638da5cb5b116101ab578063c17b5b8c116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bfd578063f2fde38b14610c28578063f637434214610c51578063f8b45b0514610c7c57610325565b8063dd62ed3e14610b6a578063e2f4560514610ba7578063e884f26014610bd257610325565b8063c8c8ebe4116100d1578063c8c8ebe414610aae578063d257b34f14610ad9578063d34628cc14610b16578063d85ba06314610b3f57610325565b8063c17b5b8c14610a31578063c18bc19514610a5a578063c876d0b914610a8357610325565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610977578063b62496f5146109a0578063bbc0c742146109dd578063c024666814610a0857610325565b8063a0d82dc5146108d2578063a457c2d7146108fd578063a9059cbb1461093a57610325565b80638da5cb5b146107d257806392136913146107fd57806395d89b41146108285780639a7a23d6146108535780639c3b4fdc1461087c5780639fccce32146108a757610325565b806349bd5a5e1161026a578063715018a6116102235780637bce5a04116101fd5780637bce5a041461073e5780638095d5641461076957806382aa7c68146107925780638a8c523c146107bb57610325565b8063715018a6146106d3578063751039fc146106ea5780637571336a1461071557610325565b806349bd5a5e146105af5780634a62bb65146105da5780634fbee193146106055780636a486a8e146106425780636c3bbfd71461066d57806370a082311461069657610325565b80631a8145bb116102d757806323b872dd116102b157806323b872dd146104cd578063313ce5671461050a57806339509351146105355780633bbac5791461057257610325565b80631a8145bb1461044e5780631f3fed8f14610479578063203e727e146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631816467f1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610ca7565b60405161034c9190613f15565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613fdf565b610d39565b604051610389919061403a565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190614055565b610d57565b6040516103c6919061403a565b60405180910390f35b3480156103db57600080fd5b506103e4610d77565b6040516103f191906140e1565b60405180910390f35b34801561040657600080fd5b5061040f610d9b565b60405161041c919061410b565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190614055565b610da5565b005b34801561045a57600080fd5b50610463610ee1565b604051610470919061410b565b60405180910390f35b34801561048557600080fd5b5061048e610ee7565b60405161049b919061410b565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614126565b610eed565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190614153565b610ffc565b604051610501919061403a565b60405180910390f35b34801561051657600080fd5b5061051f61111b565b60405161052c91906141c2565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190613fdf565b611124565b604051610569919061403a565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190614055565b6111d0565b6040516105a6919061403a565b60405180910390f35b3480156105bb57600080fd5b506105c46111f0565b6040516105d191906141ec565b60405180910390f35b3480156105e657600080fd5b506105ef611214565b6040516105fc919061403a565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190614055565b611227565b604051610639919061403a565b60405180910390f35b34801561064e57600080fd5b5061065761127d565b604051610664919061410b565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f919061434f565b611283565b005b3480156106a257600080fd5b506106bd60048036038101906106b89190614055565b611394565b6040516106ca919061410b565b60405180910390f35b3480156106df57600080fd5b506106e86113dc565b005b3480156106f657600080fd5b506106ff611464565b60405161070c919061403a565b60405180910390f35b34801561072157600080fd5b5061073c600480360381019061073791906143c4565b611504565b005b34801561074a57600080fd5b506107536115db565b604051610760919061410b565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190614404565b6115e1565b005b34801561079e57600080fd5b506107b960048036038101906107b49190614126565b6116e0565b005b3480156107c757600080fd5b506107d0611793565b005b3480156107de57600080fd5b506107e7611846565b6040516107f491906141ec565b60405180910390f35b34801561080957600080fd5b50610812611870565b60405161081f919061410b565b60405180910390f35b34801561083457600080fd5b5061083d611876565b60405161084a9190613f15565b60405180910390f35b34801561085f57600080fd5b5061087a600480360381019061087591906143c4565b611908565b005b34801561088857600080fd5b50610891611a21565b60405161089e919061410b565b60405180910390f35b3480156108b357600080fd5b506108bc611a27565b6040516108c9919061410b565b60405180910390f35b3480156108de57600080fd5b506108e7611a2d565b6040516108f4919061410b565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f9190613fdf565b611a33565b604051610931919061403a565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c9190613fdf565b611b1e565b60405161096e919061403a565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190614055565b611b3c565b005b3480156109ac57600080fd5b506109c760048036038101906109c29190614055565b611c78565b6040516109d4919061403a565b60405180910390f35b3480156109e957600080fd5b506109f2611c98565b6040516109ff919061403a565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a91906143c4565b611cab565b005b348015610a3d57600080fd5b50610a586004803603810190610a539190614404565b611d82565b005b348015610a6657600080fd5b50610a816004803603810190610a7c9190614126565b611e81565b005b348015610a8f57600080fd5b50610a98611f90565b604051610aa5919061403a565b60405180910390f35b348015610aba57600080fd5b50610ac3611fa3565b604051610ad0919061410b565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb9190614126565b611fa9565b604051610b0d919061403a565b60405180910390f35b348015610b2257600080fd5b50610b3d6004803603810190610b38919061434f565b6120fe565b005b348015610b4b57600080fd5b50610b546122f1565b604051610b61919061410b565b60405180910390f35b348015610b7657600080fd5b50610b916004803603810190610b8c9190614457565b6122f7565b604051610b9e919061410b565b60405180910390f35b348015610bb357600080fd5b50610bbc61237e565b604051610bc9919061410b565b60405180910390f35b348015610bde57600080fd5b50610be7612384565b604051610bf4919061403a565b60405180910390f35b348015610c0957600080fd5b50610c12612424565b604051610c1f919061410b565b60405180910390f35b348015610c3457600080fd5b50610c4f6004803603810190610c4a9190614055565b61242a565b005b348015610c5d57600080fd5b50610c66612522565b604051610c73919061410b565b60405180910390f35b348015610c8857600080fd5b50610c91612528565b604051610c9e919061410b565b60405180910390f35b606060038054610cb6906144c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce2906144c6565b8015610d2f5780601f10610d0457610100808354040283529160200191610d2f565b820191906000526020600020905b815481529060010190602001808311610d1257829003601f168201915b5050505050905090565b6000610d4d610d4661252e565b8484612536565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610dad61252e565b73ffffffffffffffffffffffffffffffffffffffff16610dcb611846565b73ffffffffffffffffffffffffffffffffffffffff1614610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1890614544565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60195481565b610ef561252e565b73ffffffffffffffffffffffffffffffffffffffff16610f13611846565b73ffffffffffffffffffffffffffffffffffffffff1614610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090614544565b60405180910390fd5b670de0b6b3a76400006103e86001610f7f610d9b565b610f899190614593565b610f93919061461c565b610f9d919061461c565b811015610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd6906146bf565b60405180910390fd5b670de0b6b3a764000081610ff39190614593565b600b8190555050565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061104861252e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461110457828110156110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690614751565b60405180910390fd5b611103856110fb61252e565b858403612536565b5b61110f858585612701565b60019150509392505050565b60006012905090565b60006111c661113161252e565b84846001600061113f61252e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c19190614771565b612536565b6001905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b61128b61252e565b73ffffffffffffffffffffffffffffffffffffffff166112a9611846565b73ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690614544565b60405180910390fd5b60005b815181101561139057600060066000848481518110611324576113236147c7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611388906147f6565b915050611302565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113e461252e565b73ffffffffffffffffffffffffffffffffffffffff16611402611846565b73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f90614544565b60405180910390fd5b6114626000613473565b565b600061146e61252e565b73ffffffffffffffffffffffffffffffffffffffff1661148c611846565b73ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990614544565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b61150c61252e565b73ffffffffffffffffffffffffffffffffffffffff1661152a611846565b73ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790614544565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b6115e961252e565b73ffffffffffffffffffffffffffffffffffffffff16611607611846565b73ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490614544565b60405180910390fd5b8260128190555081601381905550806014819055506014546013546012546116859190614771565b61168f9190614771565b601181905550601460115411156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d29061488b565b60405180910390fd5b505050565b6116e861252e565b73ffffffffffffffffffffffffffffffffffffffff16611706611846565b73ffffffffffffffffffffffffffffffffffffffff161461175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390614544565b60405180910390fd5b6001600e60016101000a81548160ff02191690831515021790555061178a814261353990919063ffffffff16565b60088190555050565b61179b61252e565b73ffffffffffffffffffffffffffffffffffffffff166117b9611846565b73ffffffffffffffffffffffffffffffffffffffff161461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690614544565b60405180910390fd5b6001600e60016101000a81548160ff02191690831515021790555061183e60014261353990919063ffffffff16565b600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b606060048054611885906144c6565b80601f01602080910402602001604051908101604052809291908181526020018280546118b1906144c6565b80156118fe5780601f106118d3576101008083540402835291602001916118fe565b820191906000526020600020905b8154815290600101906020018083116118e157829003601f168201915b5050505050905090565b61191061252e565b73ffffffffffffffffffffffffffffffffffffffff1661192e611846565b73ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90614544565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a9061491d565b60405180910390fd5b611a1d828261354f565b5050565b60145481565b601b5481565b60185481565b60008060016000611a4261252e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906149af565b60405180910390fd5b611b13611b0a61252e565b85858403612536565b600191505092915050565b6000611b32611b2b61252e565b8484612701565b6001905092915050565b611b4461252e565b73ffffffffffffffffffffffffffffffffffffffff16611b62611846565b73ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90614544565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b611cb361252e565b73ffffffffffffffffffffffffffffffffffffffff16611cd1611846565b73ffffffffffffffffffffffffffffffffffffffff1614611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e90614544565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d8a61252e565b73ffffffffffffffffffffffffffffffffffffffff16611da8611846565b73ffffffffffffffffffffffffffffffffffffffff1614611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614544565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611e269190614771565b611e309190614771565b60158190555060196015541115611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390614a1b565b60405180910390fd5b505050565b611e8961252e565b73ffffffffffffffffffffffffffffffffffffffff16611ea7611846565b73ffffffffffffffffffffffffffffffffffffffff1614611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef490614544565b60405180910390fd5b670de0b6b3a76400006103e86005611f13610d9b565b611f1d9190614593565b611f27919061461c565b611f31919061461c565b811015611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a90614aad565b60405180910390fd5b670de0b6b3a764000081611f879190614593565b600d8190555050565b601060009054906101000a900460ff1681565b600b5481565b6000611fb361252e565b73ffffffffffffffffffffffffffffffffffffffff16611fd1611846565b73ffffffffffffffffffffffffffffffffffffffff1614612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e90614544565b60405180910390fd5b620186a06001612035610d9b565b61203f9190614593565b612049919061461c565b82101561208b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208290614b3f565b60405180910390fd5b6103e86005612098610d9b565b6120a29190614593565b6120ac919061461c565b8211156120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590614bd1565b60405180910390fd5b81600c8190555060019050919050565b61210661252e565b73ffffffffffffffffffffffffffffffffffffffff16612124611846565b73ffffffffffffffffffffffffffffffffffffffff161461217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190614544565b60405180910390fd5b60005b81518110156122ed577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168282815181106121d0576121cf6147c7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415801561226257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16828281518110612241576122406147c7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156122da576001600660008484815181106122805761227f6147c7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80806122e5906147f6565b91505061217d565b5050565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b600061238e61252e565b73ffffffffffffffffffffffffffffffffffffffff166123ac611846565b73ffffffffffffffffffffffffffffffffffffffff1614612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f990614544565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60135481565b61243261252e565b73ffffffffffffffffffffffffffffffffffffffff16612450611846565b73ffffffffffffffffffffffffffffffffffffffff16146124a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249d90614544565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250d90614c63565b60405180910390fd5b61251f81613473565b50565b60175481565b600d5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259d90614cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90614d87565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126f4919061410b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276890614e19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d890614eab565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286590614f63565b60405180910390fd5b600081141561288857612883838360006135aa565b61346e565b6008544210156128eb576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600e60009054906101000a900460ff1615612fae57612908611846565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129765750612946611846565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129af5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129e9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a025750600760009054906101000a900460ff16155b15612fad57600e60019054906101000a900460ff16612afc57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612abc5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af290614fcf565b60405180910390fd5b5b601060009054906101000a900460ff1615612cc457612b19611846565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ba057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bf857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612cc35743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7590615087565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d675750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0e57600b54811115612db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da890615119565b60405180910390fd5b600d54612dbd83611394565b82612dc89190614771565b1115612e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0090615185565b60405180910390fd5b612fac565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612eb15750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f0057600b54811115612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef290615217565b60405180910390fd5b612fab565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612faa57600d54612f5d83611394565b82612f689190614771565b1115612fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa090615185565b60405180910390fd5b5b5b5b5b5b6000612fb930611394565b90506000600c548210159050808015612fdf5750600760009054906101000a900460ff16155b80156130355750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561308b5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130e15750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613125576001600760006101000a81548160ff02191690831515021790555061310961382b565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131db5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131e557600090505b6000811561345e57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561324857506000601554115b1561331557613275606461326760155488613b1290919063ffffffff16565b613b2890919063ffffffff16565b9050601554601754826132889190614593565b613292919061461c565b601a60008282546132a39190614771565b92505081905550601554601854826132bb9190614593565b6132c5919061461c565b601b60008282546132d69190614771565b92505081905550601554601654826132ee9190614593565b6132f8919061461c565b601960008282546133099190614771565b9250508190555061343a565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561337057506000601154115b156134395761339d606461338f60115488613b1290919063ffffffff16565b613b2890919063ffffffff16565b9050601154601354826133b09190614593565b6133ba919061461c565b601a60008282546133cb9190614771565b92505081905550601154601454826133e39190614593565b6133ed919061461c565b601b60008282546133fe9190614771565b92505081905550601154601254826134169190614593565b613420919061461c565b601960008282546134319190614771565b925050819055505b5b600081111561344f5761344e8730836135aa565b5b808561345b9190615237565b94505b6134698787876135aa565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836135479190614771565b905092915050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561361a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361190614e19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561368a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368190614eab565b60405180910390fd5b613695838383613b3e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561371b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613712906152dd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137ae9190614771565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613812919061410b565b60405180910390a3613825848484613b43565b50505050565b600061383630611394565b90506000601b54601954601a5461384d9190614771565b6138579190614771565b90506000808314806138695750600082145b1561387657505050613b10565b6014600c546138859190614593565b83111561389e576014600c5461389b9190614593565b92505b6000600283601a54866138b19190614593565b6138bb919061461c565b6138c5919061461c565b905060006138dc8286613b4890919063ffffffff16565b905060004790506138ec82613b5e565b60006139018247613b4890919063ffffffff16565b9050600061392c8761391e60195485613b1290919063ffffffff16565b613b2890919063ffffffff16565b9050600061395788613949601b5486613b1290919063ffffffff16565b613b2890919063ffffffff16565b905060008183856139689190615237565b6139729190615237565b90506000601a8190555060006019819055506000601b81905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139d29061532e565b60006040518083038185875af1925050503d8060008114613a0f576040519150601f19603f3d011682016040523d82523d6000602084013e613a14565b606091505b505080985050600087118015613a2a5750600081115b15613a7757613a398782613d9b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601a54604051613a6e93929190615343565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613abd9061532e565b60006040518083038185875af1925050503d8060008114613afa576040519150601f19603f3d011682016040523d82523d6000602084013e613aff565b606091505b505080985050505050505050505050505b565b60008183613b209190614593565b905092915050565b60008183613b36919061461c565b905092915050565b505050565b505050565b60008183613b569190615237565b905092915050565b6000600267ffffffffffffffff811115613b7b57613b7a61420c565b5b604051908082528060200260200182016040528015613ba95781602001602082028036833780820191505090505b5090503081600081518110613bc157613bc06147c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8a919061538f565b81600181518110613c9e57613c9d6147c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d03307f000000000000000000000000000000000000000000000000000000000000000084612536565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d659594939291906154b5565b600060405180830381600087803b158015613d7f57600080fd5b505af1158015613d93573d6000803e3d6000fd5b505050505050565b613dc6307f000000000000000000000000000000000000000000000000000000000000000084612536565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e10611846565b426040518863ffffffff1660e01b8152600401613e329695949392919061550f565b60606040518083038185885af1158015613e50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e759190615585565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613eb6578082015181840152602081019050613e9b565b83811115613ec5576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ee782613e7c565b613ef18185613e87565b9350613f01818560208601613e98565b613f0a81613ecb565b840191505092915050565b60006020820190508181036000830152613f2f8184613edc565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f7682613f4b565b9050919050565b613f8681613f6b565b8114613f9157600080fd5b50565b600081359050613fa381613f7d565b92915050565b6000819050919050565b613fbc81613fa9565b8114613fc757600080fd5b50565b600081359050613fd981613fb3565b92915050565b60008060408385031215613ff657613ff5613f41565b5b600061400485828601613f94565b925050602061401585828601613fca565b9150509250929050565b60008115159050919050565b6140348161401f565b82525050565b600060208201905061404f600083018461402b565b92915050565b60006020828403121561406b5761406a613f41565b5b600061407984828501613f94565b91505092915050565b6000819050919050565b60006140a76140a261409d84613f4b565b614082565b613f4b565b9050919050565b60006140b98261408c565b9050919050565b60006140cb826140ae565b9050919050565b6140db816140c0565b82525050565b60006020820190506140f660008301846140d2565b92915050565b61410581613fa9565b82525050565b600060208201905061412060008301846140fc565b92915050565b60006020828403121561413c5761413b613f41565b5b600061414a84828501613fca565b91505092915050565b60008060006060848603121561416c5761416b613f41565b5b600061417a86828701613f94565b935050602061418b86828701613f94565b925050604061419c86828701613fca565b9150509250925092565b600060ff82169050919050565b6141bc816141a6565b82525050565b60006020820190506141d760008301846141b3565b92915050565b6141e681613f6b565b82525050565b600060208201905061420160008301846141dd565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61424482613ecb565b810181811067ffffffffffffffff821117156142635761426261420c565b5b80604052505050565b6000614276613f37565b9050614282828261423b565b919050565b600067ffffffffffffffff8211156142a2576142a161420c565b5b602082029050602081019050919050565b600080fd5b60006142cb6142c684614287565b61426c565b905080838252602082019050602084028301858111156142ee576142ed6142b3565b5b835b8181101561431757806143038882613f94565b8452602084019350506020810190506142f0565b5050509392505050565b600082601f83011261433657614335614207565b5b81356143468482602086016142b8565b91505092915050565b60006020828403121561436557614364613f41565b5b600082013567ffffffffffffffff81111561438357614382613f46565b5b61438f84828501614321565b91505092915050565b6143a18161401f565b81146143ac57600080fd5b50565b6000813590506143be81614398565b92915050565b600080604083850312156143db576143da613f41565b5b60006143e985828601613f94565b92505060206143fa858286016143af565b9150509250929050565b60008060006060848603121561441d5761441c613f41565b5b600061442b86828701613fca565b935050602061443c86828701613fca565b925050604061444d86828701613fca565b9150509250925092565b6000806040838503121561446e5761446d613f41565b5b600061447c85828601613f94565b925050602061448d85828601613f94565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144de57607f821691505b602082108114156144f2576144f1614497565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061452e602083613e87565b9150614539826144f8565b602082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061459e82613fa9565b91506145a983613fa9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e2576145e1614564565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061462782613fa9565b915061463283613fa9565b925082614642576146416145ed565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006146a9602f83613e87565b91506146b48261464d565b604082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061473b602883613e87565b9150614746826146df565b604082019050919050565b6000602082019050818103600083015261476a8161472e565b9050919050565b600061477c82613fa9565b915061478783613fa9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147bc576147bb614564565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061480182613fa9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561483457614833614564565b5b600182019050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614875601d83613e87565b91506148808261483f565b602082019050919050565b600060208201905081810360008301526148a481614868565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614907603983613e87565b9150614912826148ab565b604082019050919050565b60006020820190508181036000830152614936816148fa565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614999602583613e87565b91506149a48261493d565b604082019050919050565b600060208201905081810360008301526149c88161498c565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614a05601d83613e87565b9150614a10826149cf565b602082019050919050565b60006020820190508181036000830152614a34816149f8565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a97602483613e87565b9150614aa282614a3b565b604082019050919050565b60006020820190508181036000830152614ac681614a8a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b29603583613e87565b9150614b3482614acd565b604082019050919050565b60006020820190508181036000830152614b5881614b1c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614bbb603483613e87565b9150614bc682614b5f565b604082019050919050565b60006020820190508181036000830152614bea81614bae565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c4d602683613e87565b9150614c5882614bf1565b604082019050919050565b60006020820190508181036000830152614c7c81614c40565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cdf602483613e87565b9150614cea82614c83565b604082019050919050565b60006020820190508181036000830152614d0e81614cd2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d71602283613e87565b9150614d7c82614d15565b604082019050919050565b60006020820190508181036000830152614da081614d64565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e03602583613e87565b9150614e0e82614da7565b604082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e95602383613e87565b9150614ea082614e39565b604082019050919050565b60006020820190508181036000830152614ec481614e88565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120626f742f736e697065722c20796f752061726520756e61626c6520746f2060208201527f7472616e73666572206f7220737761702e000000000000000000000000000000604082015250565b6000614f4d605183613e87565b9150614f5882614ecb565b606082019050919050565b60006020820190508181036000830152614f7c81614f40565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fb9601683613e87565b9150614fc482614f83565b602082019050919050565b60006020820190508181036000830152614fe881614fac565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615071604983613e87565b915061507c82614fef565b606082019050919050565b600060208201905081810360008301526150a081615064565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615103603583613e87565b915061510e826150a7565b604082019050919050565b60006020820190508181036000830152615132816150f6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061516f601383613e87565b915061517a82615139565b602082019050919050565b6000602082019050818103600083015261519e81615162565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615201603683613e87565b915061520c826151a5565b604082019050919050565b60006020820190508181036000830152615230816151f4565b9050919050565b600061524282613fa9565b915061524d83613fa9565b9250828210156152605761525f614564565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152c7602683613e87565b91506152d28261526b565b604082019050919050565b600060208201905081810360008301526152f6816152ba565b9050919050565b600081905092915050565b50565b60006153186000836152fd565b915061532382615308565b600082019050919050565b60006153398261530b565b9150819050919050565b600060608201905061535860008301866140fc565b61536560208301856140fc565b61537260408301846140fc565b949350505050565b60008151905061538981613f7d565b92915050565b6000602082840312156153a5576153a4613f41565b5b60006153b38482850161537a565b91505092915050565b6000819050919050565b60006153e16153dc6153d7846153bc565b614082565b613fa9565b9050919050565b6153f1816153c6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61542c81613f6b565b82525050565b600061543e8383615423565b60208301905092915050565b6000602082019050919050565b6000615462826153f7565b61546c8185615402565b935061547783615413565b8060005b838110156154a857815161548f8882615432565b975061549a8361544a565b92505060018101905061547b565b5085935050505092915050565b600060a0820190506154ca60008301886140fc565b6154d760208301876153e8565b81810360408301526154e98186615457565b90506154f860608301856141dd565b61550560808301846140fc565b9695505050505050565b600060c08201905061552460008301896141dd565b61553160208301886140fc565b61553e60408301876153e8565b61554b60608301866153e8565b61555860808301856141dd565b61556560a08301846140fc565b979650505050505050565b60008151905061557f81613fb3565b92915050565b60008060006060848603121561559e5761559d613f41565b5b60006155ac86828701615570565b93505060206155bd86828701615570565b92505060406155ce86828701615570565b915050925092509256fea2646970667358221220842c0fa857234e7f3710ea060f54df097a87325a65fa6b6b6e7f5262dfd8983b64736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80638da5cb5b116101ab578063c17b5b8c116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bfd578063f2fde38b14610c28578063f637434214610c51578063f8b45b0514610c7c57610325565b8063dd62ed3e14610b6a578063e2f4560514610ba7578063e884f26014610bd257610325565b8063c8c8ebe4116100d1578063c8c8ebe414610aae578063d257b34f14610ad9578063d34628cc14610b16578063d85ba06314610b3f57610325565b8063c17b5b8c14610a31578063c18bc19514610a5a578063c876d0b914610a8357610325565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610977578063b62496f5146109a0578063bbc0c742146109dd578063c024666814610a0857610325565b8063a0d82dc5146108d2578063a457c2d7146108fd578063a9059cbb1461093a57610325565b80638da5cb5b146107d257806392136913146107fd57806395d89b41146108285780639a7a23d6146108535780639c3b4fdc1461087c5780639fccce32146108a757610325565b806349bd5a5e1161026a578063715018a6116102235780637bce5a04116101fd5780637bce5a041461073e5780638095d5641461076957806382aa7c68146107925780638a8c523c146107bb57610325565b8063715018a6146106d3578063751039fc146106ea5780637571336a1461071557610325565b806349bd5a5e146105af5780634a62bb65146105da5780634fbee193146106055780636a486a8e146106425780636c3bbfd71461066d57806370a082311461069657610325565b80631a8145bb116102d757806323b872dd116102b157806323b872dd146104cd578063313ce5671461050a57806339509351146105355780633bbac5791461057257610325565b80631a8145bb1461044e5780631f3fed8f14610479578063203e727e146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631816467f1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610ca7565b60405161034c9190613f15565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613fdf565b610d39565b604051610389919061403a565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190614055565b610d57565b6040516103c6919061403a565b60405180910390f35b3480156103db57600080fd5b506103e4610d77565b6040516103f191906140e1565b60405180910390f35b34801561040657600080fd5b5061040f610d9b565b60405161041c919061410b565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190614055565b610da5565b005b34801561045a57600080fd5b50610463610ee1565b604051610470919061410b565b60405180910390f35b34801561048557600080fd5b5061048e610ee7565b60405161049b919061410b565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614126565b610eed565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190614153565b610ffc565b604051610501919061403a565b60405180910390f35b34801561051657600080fd5b5061051f61111b565b60405161052c91906141c2565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190613fdf565b611124565b604051610569919061403a565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190614055565b6111d0565b6040516105a6919061403a565b60405180910390f35b3480156105bb57600080fd5b506105c46111f0565b6040516105d191906141ec565b60405180910390f35b3480156105e657600080fd5b506105ef611214565b6040516105fc919061403a565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190614055565b611227565b604051610639919061403a565b60405180910390f35b34801561064e57600080fd5b5061065761127d565b604051610664919061410b565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f919061434f565b611283565b005b3480156106a257600080fd5b506106bd60048036038101906106b89190614055565b611394565b6040516106ca919061410b565b60405180910390f35b3480156106df57600080fd5b506106e86113dc565b005b3480156106f657600080fd5b506106ff611464565b60405161070c919061403a565b60405180910390f35b34801561072157600080fd5b5061073c600480360381019061073791906143c4565b611504565b005b34801561074a57600080fd5b506107536115db565b604051610760919061410b565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190614404565b6115e1565b005b34801561079e57600080fd5b506107b960048036038101906107b49190614126565b6116e0565b005b3480156107c757600080fd5b506107d0611793565b005b3480156107de57600080fd5b506107e7611846565b6040516107f491906141ec565b60405180910390f35b34801561080957600080fd5b50610812611870565b60405161081f919061410b565b60405180910390f35b34801561083457600080fd5b5061083d611876565b60405161084a9190613f15565b60405180910390f35b34801561085f57600080fd5b5061087a600480360381019061087591906143c4565b611908565b005b34801561088857600080fd5b50610891611a21565b60405161089e919061410b565b60405180910390f35b3480156108b357600080fd5b506108bc611a27565b6040516108c9919061410b565b60405180910390f35b3480156108de57600080fd5b506108e7611a2d565b6040516108f4919061410b565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f9190613fdf565b611a33565b604051610931919061403a565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c9190613fdf565b611b1e565b60405161096e919061403a565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190614055565b611b3c565b005b3480156109ac57600080fd5b506109c760048036038101906109c29190614055565b611c78565b6040516109d4919061403a565b60405180910390f35b3480156109e957600080fd5b506109f2611c98565b6040516109ff919061403a565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a91906143c4565b611cab565b005b348015610a3d57600080fd5b50610a586004803603810190610a539190614404565b611d82565b005b348015610a6657600080fd5b50610a816004803603810190610a7c9190614126565b611e81565b005b348015610a8f57600080fd5b50610a98611f90565b604051610aa5919061403a565b60405180910390f35b348015610aba57600080fd5b50610ac3611fa3565b604051610ad0919061410b565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb9190614126565b611fa9565b604051610b0d919061403a565b60405180910390f35b348015610b2257600080fd5b50610b3d6004803603810190610b38919061434f565b6120fe565b005b348015610b4b57600080fd5b50610b546122f1565b604051610b61919061410b565b60405180910390f35b348015610b7657600080fd5b50610b916004803603810190610b8c9190614457565b6122f7565b604051610b9e919061410b565b60405180910390f35b348015610bb357600080fd5b50610bbc61237e565b604051610bc9919061410b565b60405180910390f35b348015610bde57600080fd5b50610be7612384565b604051610bf4919061403a565b60405180910390f35b348015610c0957600080fd5b50610c12612424565b604051610c1f919061410b565b60405180910390f35b348015610c3457600080fd5b50610c4f6004803603810190610c4a9190614055565b61242a565b005b348015610c5d57600080fd5b50610c66612522565b604051610c73919061410b565b60405180910390f35b348015610c8857600080fd5b50610c91612528565b604051610c9e919061410b565b60405180910390f35b606060038054610cb6906144c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce2906144c6565b8015610d2f5780601f10610d0457610100808354040283529160200191610d2f565b820191906000526020600020905b815481529060010190602001808311610d1257829003601f168201915b5050505050905090565b6000610d4d610d4661252e565b8484612536565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610dad61252e565b73ffffffffffffffffffffffffffffffffffffffff16610dcb611846565b73ffffffffffffffffffffffffffffffffffffffff1614610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1890614544565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60195481565b610ef561252e565b73ffffffffffffffffffffffffffffffffffffffff16610f13611846565b73ffffffffffffffffffffffffffffffffffffffff1614610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6090614544565b60405180910390fd5b670de0b6b3a76400006103e86001610f7f610d9b565b610f899190614593565b610f93919061461c565b610f9d919061461c565b811015610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd6906146bf565b60405180910390fd5b670de0b6b3a764000081610ff39190614593565b600b8190555050565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061104861252e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461110457828110156110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690614751565b60405180910390fd5b611103856110fb61252e565b858403612536565b5b61110f858585612701565b60019150509392505050565b60006012905090565b60006111c661113161252e565b84846001600061113f61252e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c19190614771565b612536565b6001905092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000005e90a2f25f3be0ad99b034be30eaa325d23b09c681565b600e60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b61128b61252e565b73ffffffffffffffffffffffffffffffffffffffff166112a9611846565b73ffffffffffffffffffffffffffffffffffffffff16146112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690614544565b60405180910390fd5b60005b815181101561139057600060066000848481518110611324576113236147c7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611388906147f6565b915050611302565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113e461252e565b73ffffffffffffffffffffffffffffffffffffffff16611402611846565b73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f90614544565b60405180910390fd5b6114626000613473565b565b600061146e61252e565b73ffffffffffffffffffffffffffffffffffffffff1661148c611846565b73ffffffffffffffffffffffffffffffffffffffff16146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990614544565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b61150c61252e565b73ffffffffffffffffffffffffffffffffffffffff1661152a611846565b73ffffffffffffffffffffffffffffffffffffffff1614611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790614544565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b6115e961252e565b73ffffffffffffffffffffffffffffffffffffffff16611607611846565b73ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490614544565b60405180910390fd5b8260128190555081601381905550806014819055506014546013546012546116859190614771565b61168f9190614771565b601181905550601460115411156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d29061488b565b60405180910390fd5b505050565b6116e861252e565b73ffffffffffffffffffffffffffffffffffffffff16611706611846565b73ffffffffffffffffffffffffffffffffffffffff161461175c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175390614544565b60405180910390fd5b6001600e60016101000a81548160ff02191690831515021790555061178a814261353990919063ffffffff16565b60088190555050565b61179b61252e565b73ffffffffffffffffffffffffffffffffffffffff166117b9611846565b73ffffffffffffffffffffffffffffffffffffffff161461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690614544565b60405180910390fd5b6001600e60016101000a81548160ff02191690831515021790555061183e60014261353990919063ffffffff16565b600881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60165481565b606060048054611885906144c6565b80601f01602080910402602001604051908101604052809291908181526020018280546118b1906144c6565b80156118fe5780601f106118d3576101008083540402835291602001916118fe565b820191906000526020600020905b8154815290600101906020018083116118e157829003601f168201915b5050505050905090565b61191061252e565b73ffffffffffffffffffffffffffffffffffffffff1661192e611846565b73ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90614544565b60405180910390fd5b7f0000000000000000000000005e90a2f25f3be0ad99b034be30eaa325d23b09c673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a9061491d565b60405180910390fd5b611a1d828261354f565b5050565b60145481565b601b5481565b60185481565b60008060016000611a4261252e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906149af565b60405180910390fd5b611b13611b0a61252e565b85858403612536565b600191505092915050565b6000611b32611b2b61252e565b8484612701565b6001905092915050565b611b4461252e565b73ffffffffffffffffffffffffffffffffffffffff16611b62611846565b73ffffffffffffffffffffffffffffffffffffffff1614611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90614544565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b611cb361252e565b73ffffffffffffffffffffffffffffffffffffffff16611cd1611846565b73ffffffffffffffffffffffffffffffffffffffff1614611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e90614544565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d8a61252e565b73ffffffffffffffffffffffffffffffffffffffff16611da8611846565b73ffffffffffffffffffffffffffffffffffffffff1614611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614544565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611e269190614771565b611e309190614771565b60158190555060196015541115611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390614a1b565b60405180910390fd5b505050565b611e8961252e565b73ffffffffffffffffffffffffffffffffffffffff16611ea7611846565b73ffffffffffffffffffffffffffffffffffffffff1614611efd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef490614544565b60405180910390fd5b670de0b6b3a76400006103e86005611f13610d9b565b611f1d9190614593565b611f27919061461c565b611f31919061461c565b811015611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a90614aad565b60405180910390fd5b670de0b6b3a764000081611f879190614593565b600d8190555050565b601060009054906101000a900460ff1681565b600b5481565b6000611fb361252e565b73ffffffffffffffffffffffffffffffffffffffff16611fd1611846565b73ffffffffffffffffffffffffffffffffffffffff1614612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201e90614544565b60405180910390fd5b620186a06001612035610d9b565b61203f9190614593565b612049919061461c565b82101561208b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208290614b3f565b60405180910390fd5b6103e86005612098610d9b565b6120a29190614593565b6120ac919061461c565b8211156120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590614bd1565b60405180910390fd5b81600c8190555060019050919050565b61210661252e565b73ffffffffffffffffffffffffffffffffffffffff16612124611846565b73ffffffffffffffffffffffffffffffffffffffff161461217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217190614544565b60405180910390fd5b60005b81518110156122ed577f0000000000000000000000005e90a2f25f3be0ad99b034be30eaa325d23b09c673ffffffffffffffffffffffffffffffffffffffff168282815181106121d0576121cf6147c7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415801561226257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16828281518110612241576122406147c7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156122da576001600660008484815181106122805761227f6147c7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b80806122e5906147f6565b91505061217d565b5050565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b600061238e61252e565b73ffffffffffffffffffffffffffffffffffffffff166123ac611846565b73ffffffffffffffffffffffffffffffffffffffff1614612402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f990614544565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60135481565b61243261252e565b73ffffffffffffffffffffffffffffffffffffffff16612450611846565b73ffffffffffffffffffffffffffffffffffffffff16146124a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249d90614544565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250d90614c63565b60405180910390fd5b61251f81613473565b50565b60175481565b600d5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259d90614cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90614d87565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126f4919061410b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276890614e19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d890614eab565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286590614f63565b60405180910390fd5b600081141561288857612883838360006135aa565b61346e565b6008544210156128eb576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600e60009054906101000a900460ff1615612fae57612908611846565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129765750612946611846565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129af5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129e9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a025750600760009054906101000a900460ff16155b15612fad57600e60019054906101000a900460ff16612afc57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612abc5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af290614fcf565b60405180910390fd5b5b601060009054906101000a900460ff1615612cc457612b19611846565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ba057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bf857507f0000000000000000000000005e90a2f25f3be0ad99b034be30eaa325d23b09c673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612cc35743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7590615087565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d675750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0e57600b54811115612db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da890615119565b60405180910390fd5b600d54612dbd83611394565b82612dc89190614771565b1115612e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0090615185565b60405180910390fd5b612fac565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612eb15750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f0057600b54811115612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef290615217565b60405180910390fd5b612fab565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612faa57600d54612f5d83611394565b82612f689190614771565b1115612fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa090615185565b60405180910390fd5b5b5b5b5b5b6000612fb930611394565b90506000600c548210159050808015612fdf5750600760009054906101000a900460ff16155b80156130355750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561308b5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130e15750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613125576001600760006101000a81548160ff02191690831515021790555061310961382b565b6000600760006101000a81548160ff0219169083151502179055505b6000600760009054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131db5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131e557600090505b6000811561345e57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561324857506000601554115b1561331557613275606461326760155488613b1290919063ffffffff16565b613b2890919063ffffffff16565b9050601554601754826132889190614593565b613292919061461c565b601a60008282546132a39190614771565b92505081905550601554601854826132bb9190614593565b6132c5919061461c565b601b60008282546132d69190614771565b92505081905550601554601654826132ee9190614593565b6132f8919061461c565b601960008282546133099190614771565b9250508190555061343a565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561337057506000601154115b156134395761339d606461338f60115488613b1290919063ffffffff16565b613b2890919063ffffffff16565b9050601154601354826133b09190614593565b6133ba919061461c565b601a60008282546133cb9190614771565b92505081905550601154601454826133e39190614593565b6133ed919061461c565b601b60008282546133fe9190614771565b92505081905550601154601254826134169190614593565b613420919061461c565b601960008282546134319190614771565b925050819055505b5b600081111561344f5761344e8730836135aa565b5b808561345b9190615237565b94505b6134698787876135aa565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836135479190614771565b905092915050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561361a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361190614e19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561368a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368190614eab565b60405180910390fd5b613695838383613b3e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561371b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613712906152dd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137ae9190614771565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613812919061410b565b60405180910390a3613825848484613b43565b50505050565b600061383630611394565b90506000601b54601954601a5461384d9190614771565b6138579190614771565b90506000808314806138695750600082145b1561387657505050613b10565b6014600c546138859190614593565b83111561389e576014600c5461389b9190614593565b92505b6000600283601a54866138b19190614593565b6138bb919061461c565b6138c5919061461c565b905060006138dc8286613b4890919063ffffffff16565b905060004790506138ec82613b5e565b60006139018247613b4890919063ffffffff16565b9050600061392c8761391e60195485613b1290919063ffffffff16565b613b2890919063ffffffff16565b9050600061395788613949601b5486613b1290919063ffffffff16565b613b2890919063ffffffff16565b905060008183856139689190615237565b6139729190615237565b90506000601a8190555060006019819055506000601b81905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139d29061532e565b60006040518083038185875af1925050503d8060008114613a0f576040519150601f19603f3d011682016040523d82523d6000602084013e613a14565b606091505b505080985050600087118015613a2a5750600081115b15613a7757613a398782613d9b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601a54604051613a6e93929190615343565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613abd9061532e565b60006040518083038185875af1925050503d8060008114613afa576040519150601f19603f3d011682016040523d82523d6000602084013e613aff565b606091505b505080985050505050505050505050505b565b60008183613b209190614593565b905092915050565b60008183613b36919061461c565b905092915050565b505050565b505050565b60008183613b569190615237565b905092915050565b6000600267ffffffffffffffff811115613b7b57613b7a61420c565b5b604051908082528060200260200182016040528015613ba95781602001602082028036833780820191505090505b5090503081600081518110613bc157613bc06147c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8a919061538f565b81600181518110613c9e57613c9d6147c7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d03307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612536565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d659594939291906154b5565b600060405180830381600087803b158015613d7f57600080fd5b505af1158015613d93573d6000803e3d6000fd5b505050505050565b613dc6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612536565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e10611846565b426040518863ffffffff1660e01b8152600401613e329695949392919061550f565b60606040518083038185885af1158015613e50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e759190615585565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613eb6578082015181840152602081019050613e9b565b83811115613ec5576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ee782613e7c565b613ef18185613e87565b9350613f01818560208601613e98565b613f0a81613ecb565b840191505092915050565b60006020820190508181036000830152613f2f8184613edc565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f7682613f4b565b9050919050565b613f8681613f6b565b8114613f9157600080fd5b50565b600081359050613fa381613f7d565b92915050565b6000819050919050565b613fbc81613fa9565b8114613fc757600080fd5b50565b600081359050613fd981613fb3565b92915050565b60008060408385031215613ff657613ff5613f41565b5b600061400485828601613f94565b925050602061401585828601613fca565b9150509250929050565b60008115159050919050565b6140348161401f565b82525050565b600060208201905061404f600083018461402b565b92915050565b60006020828403121561406b5761406a613f41565b5b600061407984828501613f94565b91505092915050565b6000819050919050565b60006140a76140a261409d84613f4b565b614082565b613f4b565b9050919050565b60006140b98261408c565b9050919050565b60006140cb826140ae565b9050919050565b6140db816140c0565b82525050565b60006020820190506140f660008301846140d2565b92915050565b61410581613fa9565b82525050565b600060208201905061412060008301846140fc565b92915050565b60006020828403121561413c5761413b613f41565b5b600061414a84828501613fca565b91505092915050565b60008060006060848603121561416c5761416b613f41565b5b600061417a86828701613f94565b935050602061418b86828701613f94565b925050604061419c86828701613fca565b9150509250925092565b600060ff82169050919050565b6141bc816141a6565b82525050565b60006020820190506141d760008301846141b3565b92915050565b6141e681613f6b565b82525050565b600060208201905061420160008301846141dd565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61424482613ecb565b810181811067ffffffffffffffff821117156142635761426261420c565b5b80604052505050565b6000614276613f37565b9050614282828261423b565b919050565b600067ffffffffffffffff8211156142a2576142a161420c565b5b602082029050602081019050919050565b600080fd5b60006142cb6142c684614287565b61426c565b905080838252602082019050602084028301858111156142ee576142ed6142b3565b5b835b8181101561431757806143038882613f94565b8452602084019350506020810190506142f0565b5050509392505050565b600082601f83011261433657614335614207565b5b81356143468482602086016142b8565b91505092915050565b60006020828403121561436557614364613f41565b5b600082013567ffffffffffffffff81111561438357614382613f46565b5b61438f84828501614321565b91505092915050565b6143a18161401f565b81146143ac57600080fd5b50565b6000813590506143be81614398565b92915050565b600080604083850312156143db576143da613f41565b5b60006143e985828601613f94565b92505060206143fa858286016143af565b9150509250929050565b60008060006060848603121561441d5761441c613f41565b5b600061442b86828701613fca565b935050602061443c86828701613fca565b925050604061444d86828701613fca565b9150509250925092565b6000806040838503121561446e5761446d613f41565b5b600061447c85828601613f94565b925050602061448d85828601613f94565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144de57607f821691505b602082108114156144f2576144f1614497565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061452e602083613e87565b9150614539826144f8565b602082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061459e82613fa9565b91506145a983613fa9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e2576145e1614564565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061462782613fa9565b915061463283613fa9565b925082614642576146416145ed565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006146a9602f83613e87565b91506146b48261464d565b604082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061473b602883613e87565b9150614746826146df565b604082019050919050565b6000602082019050818103600083015261476a8161472e565b9050919050565b600061477c82613fa9565b915061478783613fa9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147bc576147bb614564565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061480182613fa9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561483457614833614564565b5b600182019050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614875601d83613e87565b91506148808261483f565b602082019050919050565b600060208201905081810360008301526148a481614868565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614907603983613e87565b9150614912826148ab565b604082019050919050565b60006020820190508181036000830152614936816148fa565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614999602583613e87565b91506149a48261493d565b604082019050919050565b600060208201905081810360008301526149c88161498c565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614a05601d83613e87565b9150614a10826149cf565b602082019050919050565b60006020820190508181036000830152614a34816149f8565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614a97602483613e87565b9150614aa282614a3b565b604082019050919050565b60006020820190508181036000830152614ac681614a8a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b29603583613e87565b9150614b3482614acd565b604082019050919050565b60006020820190508181036000830152614b5881614b1c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614bbb603483613e87565b9150614bc682614b5f565b604082019050919050565b60006020820190508181036000830152614bea81614bae565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c4d602683613e87565b9150614c5882614bf1565b604082019050919050565b60006020820190508181036000830152614c7c81614c40565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cdf602483613e87565b9150614cea82614c83565b604082019050919050565b60006020820190508181036000830152614d0e81614cd2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d71602283613e87565b9150614d7c82614d15565b604082019050919050565b60006020820190508181036000830152614da081614d64565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e03602583613e87565b9150614e0e82614da7565b604082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e95602383613e87565b9150614ea082614e39565b604082019050919050565b60006020820190508181036000830152614ec481614e88565b9050919050565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120626f742f736e697065722c20796f752061726520756e61626c6520746f2060208201527f7472616e73666572206f7220737761702e000000000000000000000000000000604082015250565b6000614f4d605183613e87565b9150614f5882614ecb565b606082019050919050565b60006020820190508181036000830152614f7c81614f40565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614fb9601683613e87565b9150614fc482614f83565b602082019050919050565b60006020820190508181036000830152614fe881614fac565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615071604983613e87565b915061507c82614fef565b606082019050919050565b600060208201905081810360008301526150a081615064565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615103603583613e87565b915061510e826150a7565b604082019050919050565b60006020820190508181036000830152615132816150f6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061516f601383613e87565b915061517a82615139565b602082019050919050565b6000602082019050818103600083015261519e81615162565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615201603683613e87565b915061520c826151a5565b604082019050919050565b60006020820190508181036000830152615230816151f4565b9050919050565b600061524282613fa9565b915061524d83613fa9565b9250828210156152605761525f614564565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152c7602683613e87565b91506152d28261526b565b604082019050919050565b600060208201905081810360008301526152f6816152ba565b9050919050565b600081905092915050565b50565b60006153186000836152fd565b915061532382615308565b600082019050919050565b60006153398261530b565b9150819050919050565b600060608201905061535860008301866140fc565b61536560208301856140fc565b61537260408301846140fc565b949350505050565b60008151905061538981613f7d565b92915050565b6000602082840312156153a5576153a4613f41565b5b60006153b38482850161537a565b91505092915050565b6000819050919050565b60006153e16153dc6153d7846153bc565b614082565b613fa9565b9050919050565b6153f1816153c6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61542c81613f6b565b82525050565b600061543e8383615423565b60208301905092915050565b6000602082019050919050565b6000615462826153f7565b61546c8185615402565b935061547783615413565b8060005b838110156154a857815161548f8882615432565b975061549a8361544a565b92505060018101905061547b565b5085935050505092915050565b600060a0820190506154ca60008301886140fc565b6154d760208301876153e8565b81810360408301526154e98186615457565b90506154f860608301856141dd565b61550560808301846140fc565b9695505050505050565b600060c08201905061552460008301896141dd565b61553160208301886140fc565b61553e60408301876153e8565b61554b60608301866153e8565b61555860808301856141dd565b61556560a08301846140fc565b979650505050505050565b60008151905061557f81613fb3565b92915050565b60008060006060848603121561559e5761559d613f41565b5b60006155ac86828701615570565b93505060206155bd86828701615570565b92505060406155ce86828701615570565b915050925092509256fea2646970667358221220842c0fa857234e7f3710ea060f54df097a87325a65fa6b6b6e7f5262dfd8983b64736f6c634300080b0033

Deployed Bytecode Sourcemap

15624:15291:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6928:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7842:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16977:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15698:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7249:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23224:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16756:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16716;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20869:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8019:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7148:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8600:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15803:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15756;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16112:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23392:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16570:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23808:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7365:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14407:103;;;;;;;;;;;;;:::i;:::-;;20079:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21332:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16462:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21488:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22708:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19894:130;;;;;;;;;;;;;:::i;:::-;;14184:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16605:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7036:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22392:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16536:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16796:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16681:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8823:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7500:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23007:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17199:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16152:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22252:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21866:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21109:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16376:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15989:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20475:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23529:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16428:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7683:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16031:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20265:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16499:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14518:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16643:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16071:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6928:100;6982:13;7015:5;7008:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6928:100;:::o;7842:169::-;7925:4;7942:39;7951:12;:10;:12::i;:::-;7965:7;7974:6;7942:8;:39::i;:::-;7999:4;7992:11;;7842:169;;;;:::o;16977:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;15698:51::-;;;:::o;7249:108::-;7310:7;7337:12;;7330:19;;7249:108;:::o;23224:157::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23331:9:::1;;;;;;;;;;;23303:38;;23320:9;23303:38;;;;;;;;;;;;23364:9;23352;;:21;;;;;;;;;;;;;;;;;;23224:157:::0;:::o;16756:33::-;;;;:::o;16716:::-;;;;:::o;20869:232::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20990:4:::1;20982;20978:1;20962:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;20961:33;;;;:::i;:::-;20951:6;:43;;20943:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21089:4;21080:6;:13;;;;:::i;:::-;21057:20;:36;;;;20869:232:::0;:::o;8019:573::-;8159:4;8176:24;8203:11;:19;8215:6;8203:19;;;;;;;;;;;;;;;:33;8223:12;:10;:12::i;:::-;8203:33;;;;;;;;;;;;;;;;8176:60;;8271:17;8251:16;:37;8247:265;;8333:6;8313:16;:26;;8305:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8428:57;8437:6;8445:12;:10;:12::i;:::-;8478:6;8459:16;:25;8428:8;:57::i;:::-;8247:265;8524:36;8534:6;8542:9;8553:6;8524:9;:36::i;:::-;8580:4;8573:11;;;8019:573;;;;;:::o;7148:93::-;7206:5;7231:2;7224:9;;7148:93;:::o;8600:215::-;8688:4;8705:80;8714:12;:10;:12::i;:::-;8728:7;8774:10;8737:11;:25;8749:12;:10;:12::i;:::-;8737:25;;;;;;;;;;;;;;;:34;8763:7;8737:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8705:8;:80::i;:::-;8803:4;8796:11;;8600:215;;;;:::o;15803:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;15756:::-;;;:::o;16112:33::-;;;;;;;;;;;;;:::o;23392:125::-;23457:4;23481:19;:28;23501:7;23481:28;;;;;;;;;;;;;;;;;;;;;;;;;23474:35;;23392:125;;;:::o;16570:28::-;;;;:::o;23808:168::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23886:6:::1;23881:88;23902:4;:11;23898:1;:15;23881:88;;;23952:5;23935;:14;23941:4;23946:1;23941:7;;;;;;;;:::i;:::-;;;;;;;;23935:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;23915:3;;;;;:::i;:::-;;;;23881:88;;;;23808:168:::0;:::o;7365:127::-;7439:7;7466:9;:18;7476:7;7466:18;;;;;;;;;;;;;;;;7459:25;;7365:127;;;:::o;14407:103::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14472:30:::1;14499:1;14472:18;:30::i;:::-;14407:103::o:0;20079:121::-;20131:4;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20165:5:::1;20148:14;;:22;;;;;;;;;;;;;;;;;;20188:4;20181:11;;20079:121:::0;:::o;21332:144::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21464:4:::1;21422:31;:39;21454:6;21422:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21332:144:::0;;:::o;16462:30::-;;;;:::o;21488:369::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21622:13:::1;21604:15;:31;;;;21664:13;21646:15;:31;;;;21700:7;21688:9;:19;;;;21769:9;;21751:15;;21733;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;21718:12;:60;;;;21813:2;21797:12;;:18;;21789:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21488:369:::0;;;:::o;22708:149::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22793:4:::1;22777:13;;:20;;;;;;;;;;;;;;;;;;22822:27;22842:6;22822:15;:19;;:27;;;;:::i;:::-;22808:11;:41;;;;22708:149:::0;:::o;19894:130::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19965:4:::1;19949:13;;:20;;;;;;;;;;;;;;;;;;19994:22;20014:1;19994:15;:19;;:22;;;;:::i;:::-;19980:11;:36;;;;19894:130::o:0;14184:87::-;14230:7;14257:6;;;;;;;;;;;14250:13;;14184:87;:::o;16605:31::-;;;;:::o;7036:104::-;7092:13;7125:7;7118:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7036:104;:::o;22392:244::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22499:13:::1;22491:21;;:4;:21;;;;22483:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;22587:41;22616:4;22622:5;22587:28;:41::i;:::-;22392:244:::0;;:::o;16536:24::-;;;;:::o;16796:27::-;;;;:::o;16681:25::-;;;;:::o;8823:413::-;8916:4;8933:24;8960:11;:25;8972:12;:10;:12::i;:::-;8960:25;;;;;;;;;;;;;;;:34;8986:7;8960:34;;;;;;;;;;;;;;;;8933:61;;9033:15;9013:16;:35;;9005:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9126:67;9135:12;:10;:12::i;:::-;9149:7;9177:15;9158:16;:34;9126:8;:67::i;:::-;9224:4;9217:11;;;8823:413;;;;:::o;7500:175::-;7586:4;7603:42;7613:12;:10;:12::i;:::-;7627:9;7638:6;7603:9;:42::i;:::-;7663:4;7656:11;;7500:175;;;;:::o;23007:208::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23144:15:::1;;;;;;;;;;;23101:59;;23124:18;23101:59;;;;;;;;;;;;23189:18;23171:15;;:36;;;;;;;;;;;;;;;;;;23007:208:::0;:::o;17199:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;16152:33::-;;;;;;;;;;;;;:::o;22252:132::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22368:8:::1;22337:19;:28;22357:7;22337:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22252:132:::0;;:::o;21866:378::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22002:13:::1;21983:16;:32;;;;22045:13;22026:16;:32;;;;22082:7;22069:10;:20;;;;22154:10;;22135:16;;22116;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;22100:13;:64;;;;22200:2;22183:13;;:19;;22175:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21866:378:::0;;;:::o;21109:211::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21231:4:::1;21225;21221:1;21205:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;21204:31;;;;:::i;:::-;21194:6;:41;;21186:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;21308:4;21299:6;:13;;;;:::i;:::-;21287:9;:25;;;;21109:211:::0;:::o;16376:39::-;;;;;;;;;;;;;:::o;15989:35::-;;;;:::o;20475:382::-;20556:4;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20613:6:::1;20609:1;20593:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;20580:9;:39;;20572:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;20728:4;20724:1;20708:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;20695:9;:37;;20687:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;20820:9;20799:18;:30;;;;20846:4;20839:11;;20475:382:::0;;;:::o;23529:267::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23604:6:::1;23599:190;23620:4;:11;23616:1;:15;23599:190;;;23668:13;23657:24;;:4;23662:1;23657:7;;;;;;;;:::i;:::-;;;;;;;;:24;;;;:63;;;;;23704:15;23685:35;;:4;23690:1;23685:7;;;;;;;;:::i;:::-;;;;;;;;:35;;;;23657:63;23653:125;;;23758:4;23741:5;:14;23747:4;23752:1;23747:7;;;;;;;;:::i;:::-;;;;;;;;23741:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;23653:125;23633:3;;;;;:::i;:::-;;;;23599:190;;;;23529:267:::0;:::o;16428:27::-;;;;:::o;7683:151::-;7772:7;7799:11;:18;7811:5;7799:18;;;;;;;;;;;;;;;:27;7818:7;7799:27;;;;;;;;;;;;;;;;7792:34;;7683:151;;;;:::o;16031:33::-;;;;:::o;20265:135::-;20325:4;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20365:5:::1;20342:20;;:28;;;;;;;;;;;;;;;;;;20388:4;20381:11;;20265:135:::0;:::o;16499:30::-;;;;:::o;14518:201::-;14330:12;:10;:12::i;:::-;14319:23;;:7;:5;:7::i;:::-;:23;;;14311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14627:1:::1;14607:22;;:8;:22;;;;14599:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14683:28;14702:8;14683:18;:28::i;:::-;14518:201:::0;:::o;16643:31::-;;;;:::o;16071:24::-;;;;:::o;4022:98::-;4075:7;4102:10;4095:17;;4022:98;:::o;10991:380::-;11144:1;11127:19;;:5;:19;;;;11119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11225:1;11206:21;;:7;:21;;;;11198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11309:6;11279:11;:18;11291:5;11279:18;;;;;;;;;;;;;;;:27;11298:7;11279:27;;;;;;;;;;;;;;;:36;;;;11347:7;11331:32;;11340:5;11331:32;;;11356:6;11331:32;;;;;;:::i;:::-;;;;;;;;10991:380;;;:::o;23984:4226::-;24132:1;24116:18;;:4;:18;;;;24108:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24209:1;24195:16;;:2;:16;;;;24187:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24271:5;:11;24277:4;24271:11;;;;;;;;;;;;;;;;;;;;;;;;;24270:12;24262:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;24404:1;24394:6;:11;24390:93;;;24422:28;24438:4;24444:2;24448:1;24422:15;:28::i;:::-;24465:7;;24390:93;24525:11;;24507:15;:29;24503:51;;;24550:4;24538:5;:9;24544:2;24538:9;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;24503:51;24579:14;;;;;;;;;;;24575:1834;;;24640:7;:5;:7::i;:::-;24632:15;;:4;:15;;;;:49;;;;;24674:7;:5;:7::i;:::-;24668:13;;:2;:13;;;;24632:49;:86;;;;;24716:1;24702:16;;:2;:16;;;;24632:86;:128;;;;;24753:6;24739:21;;:2;:21;;;;24632:128;:159;;;;;24782:9;;;;;;;;;;;24781:10;24632:159;24610:1788;;;24831:13;;;;;;;;;;;24826:150;;24877:19;:25;24897:4;24877:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24906:19;:23;24926:2;24906:23;;;;;;;;;;;;;;;;;;;;;;;;;24877:52;24869:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24826:150;25134:20;;;;;;;;;;;25130:423;;;25188:7;:5;:7::i;:::-;25182:13;;:2;:13;;;;:47;;;;;25213:15;25199:30;;:2;:30;;;;25182:47;:79;;;;;25247:13;25233:28;;:2;:28;;;;25182:79;25178:356;;;25339:12;25297:28;:39;25326:9;25297:39;;;;;;;;;;;;;;;;:54;25289:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25498:12;25456:28;:39;25485:9;25456:39;;;;;;;;;;;;;;;:54;;;;25178:356;25130:423;25621:25;:31;25647:4;25621:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25657:31;:35;25689:2;25657:35;;;;;;;;;;;;;;;;;;;;;;;;;25656:36;25621:71;25617:766;;;25735:20;;25725:6;:30;;25717:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;25870:9;;25853:13;25863:2;25853:9;:13::i;:::-;25844:6;:22;;;;:::i;:::-;:35;;25836:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25617:766;;;25996:25;:29;26022:2;25996:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26030:31;:37;26062:4;26030:37;;;;;;;;;;;;;;;;;;;;;;;;;26029:38;25996:71;25992:391;;;26110:20;;26100:6;:30;;26092:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;25992:391;;;26237:31;:35;26269:2;26237:35;;;;;;;;;;;;;;;;;;;;;;;;;26232:151;;26330:9;;26313:13;26323:2;26313:9;:13::i;:::-;26304:6;:22;;;;:::i;:::-;:35;;26296:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26232:151;25992:391;25617:766;24610:1788;24575:1834;26423:28;26454:24;26472:4;26454:9;:24::i;:::-;26423:55;;26489:12;26528:18;;26504:20;:42;;26489:57;;26577:7;:34;;;;;26602:9;;;;;;;;;;;26601:10;26577:34;:83;;;;;26629:25;:31;26655:4;26629:31;;;;;;;;;;;;;;;;;;;;;;;;;26628:32;26577:83;:126;;;;;26678:19;:25;26698:4;26678:25;;;;;;;;;;;;;;;;;;;;;;;;;26677:26;26577:126;:167;;;;;26721:19;:23;26741:2;26721:23;;;;;;;;;;;;;;;;;;;;;;;;;26720:24;26577:167;26559:297;;;26783:4;26771:9;;:16;;;;;;;;;;;;;;;;;;26802:10;:8;:10::i;:::-;26839:5;26827:9;;:17;;;;;;;;;;;;;;;;;;26559:297;26868:12;26884:9;;;;;;;;;;;26883:10;26868:25;;26995:19;:25;27015:4;26995:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27024:19;:23;27044:2;27024:23;;;;;;;;;;;;;;;;;;;;;;;;;26995:52;26991:73;;;27059:5;27049:15;;26991:73;27095:12;27200:7;27196:961;;;27252:25;:29;27278:2;27252:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27301:1;27285:13;;:17;27252:50;27248:754;;;27329:34;27359:3;27329:25;27340:13;;27329:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27322:41;;27430:13;;27411:16;;27404:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27382:18;;:61;;;;;;;:::i;:::-;;;;;;;;27498:13;;27485:10;;27478:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;27462:12;;:49;;;;;;;:::i;:::-;;;;;;;;27578:13;;27559:16;;27552:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27530:18;;:61;;;;;;;:::i;:::-;;;;;;;;27248:754;;;27652:25;:31;27678:4;27652:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27702:1;27687:12;;:16;27652:51;27649:353;;;27731:33;27760:3;27731:24;27742:12;;27731:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27724:40;;27830:12;;27812:15;;27805:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27783:18;;:59;;;;;;;:::i;:::-;;;;;;;;27896:12;;27884:9;;27877:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;27861:12;;:47;;;;;;;:::i;:::-;;;;;;;;27974:12;;27956:15;;27949:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27927:18;;:59;;;;;;;:::i;:::-;;;;;;;;27649:353;27248:754;28029:1;28022:4;:8;28018:91;;;28051:42;28067:4;28081;28088;28051:15;:42::i;:::-;28018:91;28141:4;28131:14;;;;;:::i;:::-;;;27196:961;28169:33;28185:4;28191:2;28195:6;28169:15;:33::i;:::-;24097:4113;;;;23984:4226;;;;:::o;14727:191::-;14801:16;14820:6;;;;;;;;;;;14801:25;;14846:8;14837:6;;:17;;;;;;;;;;;;;;;;;;14901:8;14870:40;;14891:8;14870:40;;;;;;;;;;;;14790:128;14727:191;:::o;12781:98::-;12839:7;12870:1;12866;:5;;;;:::i;:::-;12859:12;;12781:98;;;;:::o;22865:130::-;22982:5;22948:25;:31;22974:4;22948:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22865:130;;:::o;9244:733::-;9402:1;9384:20;;:6;:20;;;;9376:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9486:1;9465:23;;:9;:23;;;;9457:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9541:47;9562:6;9570:9;9581:6;9541:20;:47::i;:::-;9601:21;9625:9;:17;9635:6;9625:17;;;;;;;;;;;;;;;;9601:41;;9678:6;9661:13;:23;;9653:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9799:6;9783:13;:22;9763:9;:17;9773:6;9763:17;;;;;;;;;;;;;;;:42;;;;9851:6;9827:9;:20;9837:9;9827:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9892:9;9875:35;;9884:6;9875:35;;;9903:6;9875:35;;;;;;:::i;:::-;;;;;;;;9923:46;9943:6;9951:9;9962:6;9923:19;:46::i;:::-;9365:612;9244:733;;;:::o;29342:1570::-;29381:23;29407:24;29425:4;29407:9;:24::i;:::-;29381:50;;29442:25;29512:12;;29491:18;;29470;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;29442:82;;29535:12;29583:1;29564:15;:20;:46;;;;29609:1;29588:17;:22;29564:46;29561:60;;;29613:7;;;;;29561:60;29676:2;29655:18;;:23;;;;:::i;:::-;29637:15;:41;29634:111;;;29731:2;29710:18;;:23;;;;:::i;:::-;29692:41;;29634:111;29807:23;29892:1;29872:17;29851:18;;29833:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29807:86;;29904:26;29933:36;29953:15;29933;:19;;:36;;;;:::i;:::-;29904:65;;29983:25;30011:21;29983:49;;30046:37;30064:18;30046:17;:37::i;:::-;30098:18;30119:44;30145:17;30119:21;:25;;:44;;;;:::i;:::-;30098:65;;30177:23;30203:57;30242:17;30203:34;30218:18;;30203:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;30177:83;;30271:17;30291:51;30324:17;30291:28;30306:12;;30291:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30271:71;;30353:23;30410:9;30392:15;30379:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;30353:66;;30457:1;30436:18;:22;;;;30490:1;30469:18;:22;;;;30517:1;30502:12;:16;;;;30553:9;;;;;;;;;;;30545:23;;30576:9;30545:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30532:58;;;;;30625:1;30607:15;:19;:42;;;;;30648:1;30630:15;:19;30607:42;30604:211;;;30665:47;30679:15;30696;30665:13;:47::i;:::-;30732:71;30747:18;30767:15;30784:18;;30732:71;;;;;;;;:::i;:::-;;;;;;;;30604:211;30849:15;;;;;;;;;;;30841:29;;30878:21;30841:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30828:76;;;;;29370:1542;;;;;;;;;;29342:1570;:::o;12993:98::-;13051:7;13082:1;13078;:5;;;;:::i;:::-;13071:12;;12993:98;;;;:::o;13099:::-;13157:7;13188:1;13184;:5;;;;:::i;:::-;13177:12;;13099:98;;;;:::o;11379:125::-;;;;:::o;11512:124::-;;;;:::o;12887:98::-;12945:7;12976:1;12972;:5;;;;:::i;:::-;12965:12;;12887:98;;;;:::o;28218:590::-;28345:21;28383:1;28369:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28345:40;;28414:4;28396;28401:1;28396:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28440:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28430:4;28435:1;28430:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28475:62;28492:4;28507:15;28525:11;28475:8;:62::i;:::-;28576:15;:66;;;28657:11;28683:1;28727:4;28754;28774:15;28576:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28274:534;28218:590;:::o;28820:514::-;28969:62;28986:4;29001:15;29019:11;28969:8;:62::i;:::-;29074:15;:31;;;29113:9;29146:4;29166:11;29192:1;29235;29278:7;:5;:7::i;:::-;29300:15;29074:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28820:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:117::-;7010:1;7007;7000:12;7024:180;7072:77;7069:1;7062:88;7169:4;7166:1;7159:15;7193:4;7190:1;7183:15;7210:281;7293:27;7315:4;7293:27;:::i;:::-;7285:6;7281:40;7423:6;7411:10;7408:22;7387:18;7375:10;7372:34;7369:62;7366:88;;;7434:18;;:::i;:::-;7366:88;7474:10;7470:2;7463:22;7253:238;7210:281;;:::o;7497:129::-;7531:6;7558:20;;:::i;:::-;7548:30;;7587:33;7615:4;7607:6;7587:33;:::i;:::-;7497:129;;;:::o;7632:311::-;7709:4;7799:18;7791:6;7788:30;7785:56;;;7821:18;;:::i;:::-;7785:56;7871:4;7863:6;7859:17;7851:25;;7931:4;7925;7921:15;7913:23;;7632:311;;;:::o;7949:117::-;8058:1;8055;8048:12;8089:710;8185:5;8210:81;8226:64;8283:6;8226:64;:::i;:::-;8210:81;:::i;:::-;8201:90;;8311:5;8340:6;8333:5;8326:21;8374:4;8367:5;8363:16;8356:23;;8427:4;8419:6;8415:17;8407:6;8403:30;8456:3;8448:6;8445:15;8442:122;;;8475:79;;:::i;:::-;8442:122;8590:6;8573:220;8607:6;8602:3;8599:15;8573:220;;;8682:3;8711:37;8744:3;8732:10;8711:37;:::i;:::-;8706:3;8699:50;8778:4;8773:3;8769:14;8762:21;;8649:144;8633:4;8628:3;8624:14;8617:21;;8573:220;;;8577:21;8191:608;;8089:710;;;;;:::o;8822:370::-;8893:5;8942:3;8935:4;8927:6;8923:17;8919:27;8909:122;;8950:79;;:::i;:::-;8909:122;9067:6;9054:20;9092:94;9182:3;9174:6;9167:4;9159:6;9155:17;9092:94;:::i;:::-;9083:103;;8899:293;8822:370;;;;:::o;9198:539::-;9282:6;9331:2;9319:9;9310:7;9306:23;9302:32;9299:119;;;9337:79;;:::i;:::-;9299:119;9485:1;9474:9;9470:17;9457:31;9515:18;9507:6;9504:30;9501:117;;;9537:79;;:::i;:::-;9501:117;9642:78;9712:7;9703:6;9692:9;9688:22;9642:78;:::i;:::-;9632:88;;9428:302;9198:539;;;;:::o;9743:116::-;9813:21;9828:5;9813:21;:::i;:::-;9806:5;9803:32;9793:60;;9849:1;9846;9839:12;9793:60;9743:116;:::o;9865:133::-;9908:5;9946:6;9933:20;9924:29;;9962:30;9986:5;9962:30;:::i;:::-;9865:133;;;;:::o;10004:468::-;10069:6;10077;10126:2;10114:9;10105:7;10101:23;10097:32;10094:119;;;10132:79;;:::i;:::-;10094:119;10252:1;10277:53;10322:7;10313:6;10302:9;10298:22;10277:53;:::i;:::-;10267:63;;10223:117;10379:2;10405:50;10447:7;10438:6;10427:9;10423:22;10405:50;:::i;:::-;10395:60;;10350:115;10004:468;;;;;:::o;10478:619::-;10555:6;10563;10571;10620:2;10608:9;10599:7;10595:23;10591:32;10588:119;;;10626:79;;:::i;:::-;10588:119;10746:1;10771:53;10816:7;10807:6;10796:9;10792:22;10771:53;:::i;:::-;10761:63;;10717:117;10873:2;10899:53;10944:7;10935:6;10924:9;10920:22;10899:53;:::i;:::-;10889:63;;10844:118;11001:2;11027:53;11072:7;11063:6;11052:9;11048:22;11027:53;:::i;:::-;11017:63;;10972:118;10478:619;;;;;:::o;11103:474::-;11171:6;11179;11228:2;11216:9;11207:7;11203:23;11199:32;11196:119;;;11234:79;;:::i;:::-;11196:119;11354:1;11379:53;11424:7;11415:6;11404:9;11400:22;11379:53;:::i;:::-;11369:63;;11325:117;11481:2;11507:53;11552:7;11543:6;11532:9;11528:22;11507:53;:::i;:::-;11497:63;;11452:118;11103:474;;;;;:::o;11583:180::-;11631:77;11628:1;11621:88;11728:4;11725:1;11718:15;11752:4;11749:1;11742:15;11769:320;11813:6;11850:1;11844:4;11840:12;11830:22;;11897:1;11891:4;11887:12;11918:18;11908:81;;11974:4;11966:6;11962:17;11952:27;;11908:81;12036:2;12028:6;12025:14;12005:18;12002:38;11999:84;;;12055:18;;:::i;:::-;11999:84;11820:269;11769:320;;;:::o;12095:182::-;12235:34;12231:1;12223:6;12219:14;12212:58;12095:182;:::o;12283:366::-;12425:3;12446:67;12510:2;12505:3;12446:67;:::i;:::-;12439:74;;12522:93;12611:3;12522:93;:::i;:::-;12640:2;12635:3;12631:12;12624:19;;12283:366;;;:::o;12655:419::-;12821:4;12859:2;12848:9;12844:18;12836:26;;12908:9;12902:4;12898:20;12894:1;12883:9;12879:17;12872:47;12936:131;13062:4;12936:131;:::i;:::-;12928:139;;12655:419;;;:::o;13080:180::-;13128:77;13125:1;13118:88;13225:4;13222:1;13215:15;13249:4;13246:1;13239:15;13266:348;13306:7;13329:20;13347:1;13329:20;:::i;:::-;13324:25;;13363:20;13381:1;13363:20;:::i;:::-;13358:25;;13551:1;13483:66;13479:74;13476:1;13473:81;13468:1;13461:9;13454:17;13450:105;13447:131;;;13558:18;;:::i;:::-;13447:131;13606:1;13603;13599:9;13588:20;;13266:348;;;;:::o;13620:180::-;13668:77;13665:1;13658:88;13765:4;13762:1;13755:15;13789:4;13786:1;13779:15;13806:185;13846:1;13863:20;13881:1;13863:20;:::i;:::-;13858:25;;13897:20;13915:1;13897:20;:::i;:::-;13892:25;;13936:1;13926:35;;13941:18;;:::i;:::-;13926:35;13983:1;13980;13976:9;13971:14;;13806:185;;;;:::o;13997:234::-;14137:34;14133:1;14125:6;14121:14;14114:58;14206:17;14201:2;14193:6;14189:15;14182:42;13997:234;:::o;14237:366::-;14379:3;14400:67;14464:2;14459:3;14400:67;:::i;:::-;14393:74;;14476:93;14565:3;14476:93;:::i;:::-;14594:2;14589:3;14585:12;14578:19;;14237:366;;;:::o;14609:419::-;14775:4;14813:2;14802:9;14798:18;14790:26;;14862:9;14856:4;14852:20;14848:1;14837:9;14833:17;14826:47;14890:131;15016:4;14890:131;:::i;:::-;14882:139;;14609:419;;;:::o;15034:227::-;15174:34;15170:1;15162:6;15158:14;15151:58;15243:10;15238:2;15230:6;15226:15;15219:35;15034:227;:::o;15267:366::-;15409:3;15430:67;15494:2;15489:3;15430:67;:::i;:::-;15423:74;;15506:93;15595:3;15506:93;:::i;:::-;15624:2;15619:3;15615:12;15608:19;;15267:366;;;:::o;15639:419::-;15805:4;15843:2;15832:9;15828:18;15820:26;;15892:9;15886:4;15882:20;15878:1;15867:9;15863:17;15856:47;15920:131;16046:4;15920:131;:::i;:::-;15912:139;;15639:419;;;:::o;16064:305::-;16104:3;16123:20;16141:1;16123:20;:::i;:::-;16118:25;;16157:20;16175:1;16157:20;:::i;:::-;16152:25;;16311:1;16243:66;16239:74;16236:1;16233:81;16230:107;;;16317:18;;:::i;:::-;16230:107;16361:1;16358;16354:9;16347:16;;16064:305;;;;:::o;16375:180::-;16423:77;16420:1;16413:88;16520:4;16517:1;16510:15;16544:4;16541:1;16534:15;16561:233;16600:3;16623:24;16641:5;16623:24;:::i;:::-;16614:33;;16669:66;16662:5;16659:77;16656:103;;;16739:18;;:::i;:::-;16656:103;16786:1;16779:5;16775:13;16768:20;;16561:233;;;:::o;16800:179::-;16940:31;16936:1;16928:6;16924:14;16917:55;16800:179;:::o;16985:366::-;17127:3;17148:67;17212:2;17207:3;17148:67;:::i;:::-;17141:74;;17224:93;17313:3;17224:93;:::i;:::-;17342:2;17337:3;17333:12;17326:19;;16985:366;;;:::o;17357:419::-;17523:4;17561:2;17550:9;17546:18;17538:26;;17610:9;17604:4;17600:20;17596:1;17585:9;17581:17;17574:47;17638:131;17764:4;17638:131;:::i;:::-;17630:139;;17357:419;;;:::o;17782:244::-;17922:34;17918:1;17910:6;17906:14;17899:58;17991:27;17986:2;17978:6;17974:15;17967:52;17782:244;:::o;18032:366::-;18174:3;18195:67;18259:2;18254:3;18195:67;:::i;:::-;18188:74;;18271:93;18360:3;18271:93;:::i;:::-;18389:2;18384:3;18380:12;18373:19;;18032:366;;;:::o;18404:419::-;18570:4;18608:2;18597:9;18593:18;18585:26;;18657:9;18651:4;18647:20;18643:1;18632:9;18628:17;18621:47;18685:131;18811:4;18685:131;:::i;:::-;18677:139;;18404:419;;;:::o;18829:224::-;18969:34;18965:1;18957:6;18953:14;18946:58;19038:7;19033:2;19025:6;19021:15;19014:32;18829:224;:::o;19059:366::-;19201:3;19222:67;19286:2;19281:3;19222:67;:::i;:::-;19215:74;;19298:93;19387:3;19298:93;:::i;:::-;19416:2;19411:3;19407:12;19400:19;;19059:366;;;:::o;19431:419::-;19597:4;19635:2;19624:9;19620:18;19612:26;;19684:9;19678:4;19674:20;19670:1;19659:9;19655:17;19648:47;19712:131;19838:4;19712:131;:::i;:::-;19704:139;;19431:419;;;:::o;19856:179::-;19996:31;19992:1;19984:6;19980:14;19973:55;19856:179;:::o;20041:366::-;20183:3;20204:67;20268:2;20263:3;20204:67;:::i;:::-;20197:74;;20280:93;20369:3;20280:93;:::i;:::-;20398:2;20393:3;20389:12;20382:19;;20041:366;;;:::o;20413:419::-;20579:4;20617:2;20606:9;20602:18;20594:26;;20666:9;20660:4;20656:20;20652:1;20641:9;20637:17;20630:47;20694:131;20820:4;20694:131;:::i;:::-;20686:139;;20413:419;;;:::o;20838:223::-;20978:34;20974:1;20966:6;20962:14;20955:58;21047:6;21042:2;21034:6;21030:15;21023:31;20838:223;:::o;21067:366::-;21209:3;21230:67;21294:2;21289:3;21230:67;:::i;:::-;21223:74;;21306:93;21395:3;21306:93;:::i;:::-;21424:2;21419:3;21415:12;21408:19;;21067:366;;;:::o;21439:419::-;21605:4;21643:2;21632:9;21628:18;21620:26;;21692:9;21686:4;21682:20;21678:1;21667:9;21663:17;21656:47;21720:131;21846:4;21720:131;:::i;:::-;21712:139;;21439:419;;;:::o;21864:240::-;22004:34;22000:1;21992:6;21988:14;21981:58;22073:23;22068:2;22060:6;22056:15;22049:48;21864:240;:::o;22110:366::-;22252:3;22273:67;22337:2;22332:3;22273:67;:::i;:::-;22266:74;;22349:93;22438:3;22349:93;:::i;:::-;22467:2;22462:3;22458:12;22451:19;;22110:366;;;:::o;22482:419::-;22648:4;22686:2;22675:9;22671:18;22663:26;;22735:9;22729:4;22725:20;22721:1;22710:9;22706:17;22699:47;22763:131;22889:4;22763:131;:::i;:::-;22755:139;;22482:419;;;:::o;22907:239::-;23047:34;23043:1;23035:6;23031:14;23024:58;23116:22;23111:2;23103:6;23099:15;23092:47;22907:239;:::o;23152:366::-;23294:3;23315:67;23379:2;23374:3;23315:67;:::i;:::-;23308:74;;23391:93;23480:3;23391:93;:::i;:::-;23509:2;23504:3;23500:12;23493:19;;23152:366;;;:::o;23524:419::-;23690:4;23728:2;23717:9;23713:18;23705:26;;23777:9;23771:4;23767:20;23763:1;23752:9;23748:17;23741:47;23805:131;23931:4;23805:131;:::i;:::-;23797:139;;23524:419;;;:::o;23949:225::-;24089:34;24085:1;24077:6;24073:14;24066:58;24158:8;24153:2;24145:6;24141:15;24134:33;23949:225;:::o;24180:366::-;24322:3;24343:67;24407:2;24402:3;24343:67;:::i;:::-;24336:74;;24419:93;24508:3;24419:93;:::i;:::-;24537:2;24532:3;24528:12;24521:19;;24180:366;;;:::o;24552:419::-;24718:4;24756:2;24745:9;24741:18;24733:26;;24805:9;24799:4;24795:20;24791:1;24780:9;24776:17;24769:47;24833:131;24959:4;24833:131;:::i;:::-;24825:139;;24552:419;;;:::o;24977:223::-;25117:34;25113:1;25105:6;25101:14;25094:58;25186:6;25181:2;25173:6;25169:15;25162:31;24977:223;:::o;25206:366::-;25348:3;25369:67;25433:2;25428:3;25369:67;:::i;:::-;25362:74;;25445:93;25534:3;25445:93;:::i;:::-;25563:2;25558:3;25554:12;25547:19;;25206:366;;;:::o;25578:419::-;25744:4;25782:2;25771:9;25767:18;25759:26;;25831:9;25825:4;25821:20;25817:1;25806:9;25802:17;25795:47;25859:131;25985:4;25859:131;:::i;:::-;25851:139;;25578:419;;;:::o;26003:221::-;26143:34;26139:1;26131:6;26127:14;26120:58;26212:4;26207:2;26199:6;26195:15;26188:29;26003:221;:::o;26230:366::-;26372:3;26393:67;26457:2;26452:3;26393:67;:::i;:::-;26386:74;;26469:93;26558:3;26469:93;:::i;:::-;26587:2;26582:3;26578:12;26571:19;;26230:366;;;:::o;26602:419::-;26768:4;26806:2;26795:9;26791:18;26783:26;;26855:9;26849:4;26845:20;26841:1;26830:9;26826:17;26819:47;26883:131;27009:4;26883:131;:::i;:::-;26875:139;;26602:419;;;:::o;27027:224::-;27167:34;27163:1;27155:6;27151:14;27144:58;27236:7;27231:2;27223:6;27219:15;27212:32;27027:224;:::o;27257:366::-;27399:3;27420:67;27484:2;27479:3;27420:67;:::i;:::-;27413:74;;27496:93;27585:3;27496:93;:::i;:::-;27614:2;27609:3;27605:12;27598:19;;27257:366;;;:::o;27629:419::-;27795:4;27833:2;27822:9;27818:18;27810:26;;27882:9;27876:4;27872:20;27868:1;27857:9;27853:17;27846:47;27910:131;28036:4;27910:131;:::i;:::-;27902:139;;27629:419;;;:::o;28054:222::-;28194:34;28190:1;28182:6;28178:14;28171:58;28263:5;28258:2;28250:6;28246:15;28239:30;28054:222;:::o;28282:366::-;28424:3;28445:67;28509:2;28504:3;28445:67;:::i;:::-;28438:74;;28521:93;28610:3;28521:93;:::i;:::-;28639:2;28634:3;28630:12;28623:19;;28282:366;;;:::o;28654:419::-;28820:4;28858:2;28847:9;28843:18;28835:26;;28907:9;28901:4;28897:20;28893:1;28882:9;28878:17;28871:47;28935:131;29061:4;28935:131;:::i;:::-;28927:139;;28654:419;;;:::o;29079:305::-;29219:34;29215:1;29207:6;29203:14;29196:58;29288:34;29283:2;29275:6;29271:15;29264:59;29357:19;29352:2;29344:6;29340:15;29333:44;29079:305;:::o;29390:366::-;29532:3;29553:67;29617:2;29612:3;29553:67;:::i;:::-;29546:74;;29629:93;29718:3;29629:93;:::i;:::-;29747:2;29742:3;29738:12;29731:19;;29390:366;;;:::o;29762:419::-;29928:4;29966:2;29955:9;29951:18;29943:26;;30015:9;30009:4;30005:20;30001:1;29990:9;29986:17;29979:47;30043:131;30169:4;30043:131;:::i;:::-;30035:139;;29762:419;;;:::o;30187:172::-;30327:24;30323:1;30315:6;30311:14;30304:48;30187:172;:::o;30365:366::-;30507:3;30528:67;30592:2;30587:3;30528:67;:::i;:::-;30521:74;;30604:93;30693:3;30604:93;:::i;:::-;30722:2;30717:3;30713:12;30706:19;;30365:366;;;:::o;30737:419::-;30903:4;30941:2;30930:9;30926:18;30918:26;;30990:9;30984:4;30980:20;30976:1;30965:9;30961:17;30954:47;31018:131;31144:4;31018:131;:::i;:::-;31010:139;;30737:419;;;:::o;31162:297::-;31302:34;31298:1;31290:6;31286:14;31279:58;31371:34;31366:2;31358:6;31354:15;31347:59;31440:11;31435:2;31427:6;31423:15;31416:36;31162:297;:::o;31465:366::-;31607:3;31628:67;31692:2;31687:3;31628:67;:::i;:::-;31621:74;;31704:93;31793:3;31704:93;:::i;:::-;31822:2;31817:3;31813:12;31806:19;;31465:366;;;:::o;31837:419::-;32003:4;32041:2;32030:9;32026:18;32018:26;;32090:9;32084:4;32080:20;32076:1;32065:9;32061:17;32054:47;32118:131;32244:4;32118:131;:::i;:::-;32110:139;;31837:419;;;:::o;32262:240::-;32402:34;32398:1;32390:6;32386:14;32379:58;32471:23;32466:2;32458:6;32454:15;32447:48;32262:240;:::o;32508:366::-;32650:3;32671:67;32735:2;32730:3;32671:67;:::i;:::-;32664:74;;32747:93;32836:3;32747:93;:::i;:::-;32865:2;32860:3;32856:12;32849:19;;32508:366;;;:::o;32880:419::-;33046:4;33084:2;33073:9;33069:18;33061:26;;33133:9;33127:4;33123:20;33119:1;33108:9;33104:17;33097:47;33161:131;33287:4;33161:131;:::i;:::-;33153:139;;32880:419;;;:::o;33305:169::-;33445:21;33441:1;33433:6;33429:14;33422:45;33305:169;:::o;33480:366::-;33622:3;33643:67;33707:2;33702:3;33643:67;:::i;:::-;33636:74;;33719:93;33808:3;33719:93;:::i;:::-;33837:2;33832:3;33828:12;33821:19;;33480:366;;;:::o;33852:419::-;34018:4;34056:2;34045:9;34041:18;34033:26;;34105:9;34099:4;34095:20;34091:1;34080:9;34076:17;34069:47;34133:131;34259:4;34133:131;:::i;:::-;34125:139;;33852:419;;;:::o;34277:241::-;34417:34;34413:1;34405:6;34401:14;34394:58;34486:24;34481:2;34473:6;34469:15;34462:49;34277:241;:::o;34524:366::-;34666:3;34687:67;34751:2;34746:3;34687:67;:::i;:::-;34680:74;;34763:93;34852:3;34763:93;:::i;:::-;34881:2;34876:3;34872:12;34865:19;;34524:366;;;:::o;34896:419::-;35062:4;35100:2;35089:9;35085:18;35077:26;;35149:9;35143:4;35139:20;35135:1;35124:9;35120:17;35113:47;35177:131;35303:4;35177:131;:::i;:::-;35169:139;;34896:419;;;:::o;35321:191::-;35361:4;35381:20;35399:1;35381:20;:::i;:::-;35376:25;;35415:20;35433:1;35415:20;:::i;:::-;35410:25;;35454:1;35451;35448:8;35445:34;;;35459:18;;:::i;:::-;35445:34;35504:1;35501;35497:9;35489:17;;35321:191;;;;:::o;35518:225::-;35658:34;35654:1;35646:6;35642:14;35635:58;35727:8;35722:2;35714:6;35710:15;35703:33;35518:225;:::o;35749:366::-;35891:3;35912:67;35976:2;35971:3;35912:67;:::i;:::-;35905:74;;35988:93;36077:3;35988:93;:::i;:::-;36106:2;36101:3;36097:12;36090:19;;35749:366;;;:::o;36121:419::-;36287:4;36325:2;36314:9;36310:18;36302:26;;36374:9;36368:4;36364:20;36360:1;36349:9;36345:17;36338:47;36402:131;36528:4;36402:131;:::i;:::-;36394:139;;36121:419;;;:::o;36546:147::-;36647:11;36684:3;36669:18;;36546:147;;;;:::o;36699:114::-;;:::o;36819:398::-;36978:3;36999:83;37080:1;37075:3;36999:83;:::i;:::-;36992:90;;37091:93;37180:3;37091:93;:::i;:::-;37209:1;37204:3;37200:11;37193:18;;36819:398;;;:::o;37223:379::-;37407:3;37429:147;37572:3;37429:147;:::i;:::-;37422:154;;37593:3;37586:10;;37223:379;;;:::o;37608:442::-;37757:4;37795:2;37784:9;37780:18;37772:26;;37808:71;37876:1;37865:9;37861:17;37852:6;37808:71;:::i;:::-;37889:72;37957:2;37946:9;37942:18;37933:6;37889:72;:::i;:::-;37971;38039:2;38028:9;38024:18;38015:6;37971:72;:::i;:::-;37608:442;;;;;;:::o;38056:143::-;38113:5;38144:6;38138:13;38129:22;;38160:33;38187:5;38160:33;:::i;:::-;38056:143;;;;:::o;38205:351::-;38275:6;38324:2;38312:9;38303:7;38299:23;38295:32;38292:119;;;38330:79;;:::i;:::-;38292:119;38450:1;38475:64;38531:7;38522:6;38511:9;38507:22;38475:64;:::i;:::-;38465:74;;38421:128;38205:351;;;;:::o;38562:85::-;38607:7;38636:5;38625:16;;38562:85;;;:::o;38653:158::-;38711:9;38744:61;38762:42;38771:32;38797:5;38771:32;:::i;:::-;38762:42;:::i;:::-;38744:61;:::i;:::-;38731:74;;38653:158;;;:::o;38817:147::-;38912:45;38951:5;38912:45;:::i;:::-;38907:3;38900:58;38817:147;;:::o;38970:114::-;39037:6;39071:5;39065:12;39055:22;;38970:114;;;:::o;39090:184::-;39189:11;39223:6;39218:3;39211:19;39263:4;39258:3;39254:14;39239:29;;39090:184;;;;:::o;39280:132::-;39347:4;39370:3;39362:11;;39400:4;39395:3;39391:14;39383:22;;39280:132;;;:::o;39418:108::-;39495:24;39513:5;39495:24;:::i;:::-;39490:3;39483:37;39418:108;;:::o;39532:179::-;39601:10;39622:46;39664:3;39656:6;39622:46;:::i;:::-;39700:4;39695:3;39691:14;39677:28;;39532:179;;;;:::o;39717:113::-;39787:4;39819;39814:3;39810:14;39802:22;;39717:113;;;:::o;39866:732::-;39985:3;40014:54;40062:5;40014:54;:::i;:::-;40084:86;40163:6;40158:3;40084:86;:::i;:::-;40077:93;;40194:56;40244:5;40194:56;:::i;:::-;40273:7;40304:1;40289:284;40314:6;40311:1;40308:13;40289:284;;;40390:6;40384:13;40417:63;40476:3;40461:13;40417:63;:::i;:::-;40410:70;;40503:60;40556:6;40503:60;:::i;:::-;40493:70;;40349:224;40336:1;40333;40329:9;40324:14;;40289:284;;;40293:14;40589:3;40582:10;;39990:608;;;39866:732;;;;:::o;40604:831::-;40867:4;40905:3;40894:9;40890:19;40882:27;;40919:71;40987:1;40976:9;40972:17;40963:6;40919:71;:::i;:::-;41000:80;41076:2;41065:9;41061:18;41052:6;41000:80;:::i;:::-;41127:9;41121:4;41117:20;41112:2;41101:9;41097:18;41090:48;41155:108;41258:4;41249:6;41155:108;:::i;:::-;41147:116;;41273:72;41341:2;41330:9;41326:18;41317:6;41273:72;:::i;:::-;41355:73;41423:3;41412:9;41408:19;41399:6;41355:73;:::i;:::-;40604:831;;;;;;;;:::o;41441:807::-;41690:4;41728:3;41717:9;41713:19;41705:27;;41742:71;41810:1;41799:9;41795:17;41786:6;41742:71;:::i;:::-;41823:72;41891:2;41880:9;41876:18;41867:6;41823:72;:::i;:::-;41905:80;41981:2;41970:9;41966:18;41957:6;41905:80;:::i;:::-;41995;42071:2;42060:9;42056:18;42047:6;41995:80;:::i;:::-;42085:73;42153:3;42142:9;42138:19;42129:6;42085:73;:::i;:::-;42168;42236:3;42225:9;42221:19;42212:6;42168:73;:::i;:::-;41441:807;;;;;;;;;:::o;42254:143::-;42311:5;42342:6;42336:13;42327:22;;42358:33;42385:5;42358:33;:::i;:::-;42254:143;;;;:::o;42403:663::-;42491:6;42499;42507;42556:2;42544:9;42535:7;42531:23;42527:32;42524:119;;;42562:79;;:::i;:::-;42524:119;42682:1;42707:64;42763:7;42754:6;42743:9;42739:22;42707:64;:::i;:::-;42697:74;;42653:128;42820:2;42846:64;42902:7;42893:6;42882:9;42878:22;42846:64;:::i;:::-;42836:74;;42791:129;42959:2;42985:64;43041:7;43032:6;43021:9;43017:22;42985:64;:::i;:::-;42975:74;;42930:129;42403:663;;;;;:::o

Swarm Source

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