ETH Price: $3,391.45 (+1.56%)

Token

ViceToken (VICEx)
 

Overview

Max Total Supply

1,000,000,000,000,000 VICEx

Holders

760

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
15.538685006 VICEx

Value
$0.00
0x89f275fe4dcec41966f939937e0474b3a621948f
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:
ViceToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-14
*/

/*

ViceToken is built upon the fundamentals of Friendly Whale Buybacks and increasing the investor's value
    
Main features are
    
1) 6% tax is collected and distributed to holders for HODLing
2) 9% buyback and marketing tax is collected and 3% of it is sent for marketing fund and othe 6% is used to buyback the tokens

#                                                               
#
#   ___      ___  ___   ________   _______                      
#  |\  \    /  /||\  \ |\   ____\ |\  ___ \                     
#  \ \  \  /  / /\ \  \\ \  \___| \ \   __/|                    
#   \ \  \/  / /  \ \  \\ \  \     \ \  \_|/__                  
#    \ \    / /    \ \  \\ \  \____ \ \  \_|\ \                 
#     \ \__/ /      \ \__\\ \_______\\ \_______\                
#      \|__|/        \|__| \|_______| \|_______|
#
#   _________   ________   ___  __     _______    ________      
#  |\___   ___\|\   __  \ |\  \|\  \  |\  ___ \  |\   ___  \    
#  \|___ \  \_|\ \  \|\  \\ \  \/  /|_\ \   __/| \ \  \\ \  \   
#       \ \  \  \ \  \\\  \\ \   ___  \\ \  \_|/__\ \  \\ \  \  
#        \ \  \  \ \  \\\  \\ \  \\ \  \\ \  \_|\ \\ \  \\ \  \ 
#         \ \__\  \ \_______\\ \__\\ \__\\ \_______\\ \__\\ \__\
#          \|__|   \|_______| \|__| \|__| \|_______| \|__| \|__|
#                                                               
#                                                               
# https://ViceToken.io                                                              

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.4;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


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);
    

}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }


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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract ViceToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0xe2AB214aFeEdC1f2ad156A031C706b6FD0036AD4); // Marketing Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "ViceToken";
    string private _symbol = "VICEx";
    uint8 private _decimals = 9;


    uint256 public _taxFee = 6;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 9;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public marketingDivisor = 3;
    
    uint256 public _maxTxAmount = 3000000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 200000 * 10**6 * 10**9; 
    uint256 private buyBackUpperLimit = 1 * 10**18;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public buyBackEnabled = true;

    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event BuyBackEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {

        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);    
            }
	        uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > uint256(1 * 10**18)) {
                
                if (balance > buyBackUpperLimit)
                    balance = buyBackUpperLimit;
                
                buyBackTokens(balance.div(100));
            }
        }
        
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Marketing address
        transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(marketingDivisor));
        
    }
    

    function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(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), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapETHForTokens(amount, path);
    }
    
    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 _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
	    _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
    	_tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    
    function setMarketingDivisor(uint256 divisor) external onlyOwner() {
        marketingDivisor = divisor;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }
    
     function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
        buyBackUpperLimit = buyBackLimit * 10**18;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function prepareForPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(false);
        _taxFee = 0;
        _liquidityFee = 0;
        _maxTxAmount = 1000000000 * 10**6 * 10**9;
    }
    
    function afterPreSale() external onlyOwner {
        setSwapAndLiquifyEnabled(true);
        _taxFee = 6;
        _liquidityFee = 9;
        _maxTxAmount = 3000000 * 10**6 * 10**9;
    }
    
    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"afterPreSale","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405273e2ab214afeedc1f2ad156a031c706b6fd0036ad4600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525069d3c21bcecceda1000000600a55600a54600019620000b191906200089e565b600019620000c09190620007ef565b600b556040518060400160405280600981526020017f56696365546f6b656e0000000000000000000000000000000000000000000000815250600d90805190602001906200011092919062000690565b506040518060400160405280600581526020017f5649434578000000000000000000000000000000000000000000000000000000815250600e90805190602001906200015e92919062000690565b506009600f60006101000a81548160ff021916908360ff16021790555060066010556010546011556009601255601254601355600360145568a2a15d09519be00000601555680ad78ebc5ac6200000601655670de0b6b3a76400006017556000601860016101000a81548160ff0219169083151502179055506001601860026101000a81548160ff021916908315150217905550348015620001ff57600080fd5b506000620002126200065f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b5460046000620002c76200065f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036557600080fd5b505afa1580156200037a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a0919062000757565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040357600080fd5b505afa15801562000418573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043e919062000757565b6040518363ffffffff1660e01b81526004016200045d929190620007a5565b602060405180830381600087803b1580156200047857600080fd5b505af11580156200048d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b3919062000757565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160076000620005366200066760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005ef6200065f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620006509190620007d2565b60405180910390a3506200097d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200069e9062000868565b90600052602060002090601f016020900481019282620006c257600085556200070e565b82601f10620006dd57805160ff19168380011785556200070e565b828001600101855582156200070e579182015b828111156200070d578251825591602001919060010190620006f0565b5b5090506200071d919062000721565b5090565b5b808211156200073c57600081600090555060010162000722565b5090565b600081519050620007518162000963565b92915050565b6000602082840312156200076a57600080fd5b60006200077a8482850162000740565b91505092915050565b6200078e816200082a565b82525050565b6200079f816200085e565b82525050565b6000604082019050620007bc600083018562000783565b620007cb602083018462000783565b9392505050565b6000602082019050620007e9600083018462000794565b92915050565b6000620007fc826200085e565b915062000809836200085e565b9250828210156200081f576200081e620008d6565b5b828203905092915050565b600062000837826200083e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200088157607f821691505b6020821081141562000898576200089762000934565b5b50919050565b6000620008ab826200085e565b9150620008b8836200085e565b925082620008cb57620008ca62000905565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200096e816200082a565b81146200097a57600080fd5b50565b60805160601c60a05160601c60c05160601c615fea620009e76000396000818161181f015261308f015260008181610df701528181613cc801528181613dde01528181613e05015281816140100152614197015260008181610efe01526141d70152615fea6000f3fe6080604052600436106102e85760003560e01c80636053a0e311610190578063a5ece941116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b3714610b37578063ec28438a14610b60578063f0f165af14610b89578063f2fde38b14610bb2576102ef565b8063d6b513cf14610aa6578063dd46706414610ad1578063dd62ed3e14610afa576102ef565b8063a5ece941146109aa578063a69df4b5146109d5578063a9059cbb146109ec578063b0cb81f114610a29578063bdc653ef14610a52578063c49b9a8014610a7d576102ef565b806388f8202011610149578063906e9dd011610123578063906e9dd0146108ee57806395d89b4114610917578063a073d37f14610942578063a457c2d71461096d576102ef565b806388f820201461085d5780638da5cb5b1461089a5780638ee88c53146108c5576102ef565b80636053a0e31461075f5780636bc87c3a1461078a57806370a08231146107b5578063715018a6146107f25780637d1db4a51461080957806382d2a4bb14610834576102ef565b80633685d4191161024f57806349bd5a5e1161020857806352390c02116101e257806352390c02146106a35780635342acb4146106cc578063557ed1ba14610709578063602bc62b14610734576102ef565b806349bd5a5e146106365780634a74bb02146106615780635134f6ab1461068c576102ef565b80633685d41914610516578063395093511461053f5780633b124fe71461057c5780633bd5d173146105a7578063437823ec146105d05780634549b039146105f9576102ef565b806318160ddd116102a157806318160ddd146103f257806323b872dd1461041d57806327c8f8351461045a57806329370cc6146104855780632d838119146104ae578063313ce567146104eb576102ef565b8063061c82d0146102f457806306fdde031461031d57806307efbfdc14610348578063095ea7b31461035f57806313114a9d1461039c5780631694505e146103c7576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b60048036038101906103169190615047565b610bdb565b005b34801561032957600080fd5b50610332610c7a565b60405161033f91906154bb565b60405180910390f35b34801561035457600080fd5b5061035d610d0c565b005b34801561036b57600080fd5b5061038660048036038101906103819190614fe2565b610dcd565b6040516103939190615439565b60405180910390f35b3480156103a857600080fd5b506103b1610deb565b6040516103be91906156dd565b60405180910390f35b3480156103d357600080fd5b506103dc610df5565b6040516103e99190615454565b60405180910390f35b3480156103fe57600080fd5b50610407610e19565b60405161041491906156dd565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190614f93565b610e23565b6040516104519190615439565b60405180910390f35b34801561046657600080fd5b5061046f610efc565b60405161047c9190615403565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a7919061501e565b610f20565b005b3480156104ba57600080fd5b506104d560048036038101906104d09190615047565b611009565b6040516104e291906156dd565b60405180910390f35b3480156104f757600080fd5b50610500611077565b60405161050d9190615782565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190614f05565b61108e565b005b34801561054b57600080fd5b5061056660048036038101906105619190614fe2565b611475565b6040516105739190615439565b60405180910390f35b34801561058857600080fd5b50610591611528565b60405161059e91906156dd565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190615047565b61152e565b005b3480156105dc57600080fd5b506105f760048036038101906105f29190614f05565b6116a9565b005b34801561060557600080fd5b50610620600480360381019061061b9190615070565b611799565b60405161062d91906156dd565b60405180910390f35b34801561064257600080fd5b5061064b61181d565b6040516106589190615403565b60405180910390f35b34801561066d57600080fd5b50610676611841565b6040516106839190615439565b60405180910390f35b34801561069857600080fd5b506106a1611854565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190614f05565b611916565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190614f05565b611bca565b6040516107009190615439565b60405180910390f35b34801561071557600080fd5b5061071e611c20565b60405161072b91906156dd565b60405180910390f35b34801561074057600080fd5b50610749611c28565b60405161075691906156dd565b60405180910390f35b34801561076b57600080fd5b50610774611c32565b6040516107819190615439565b60405180910390f35b34801561079657600080fd5b5061079f611c45565b6040516107ac91906156dd565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614f05565b611c4b565b6040516107e991906156dd565b60405180910390f35b3480156107fe57600080fd5b50610807611d36565b005b34801561081557600080fd5b5061081e611e89565b60405161082b91906156dd565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190615047565b611e8f565b005b34801561086957600080fd5b50610884600480360381019061087f9190614f05565b611f41565b6040516108919190615439565b60405180910390f35b3480156108a657600080fd5b506108af611f97565b6040516108bc9190615403565b60405180910390f35b3480156108d157600080fd5b506108ec60048036038101906108e79190615047565b611fc0565b005b3480156108fa57600080fd5b5061091560048036038101906109109190614f05565b61205f565b005b34801561092357600080fd5b5061092c612138565b60405161093991906154bb565b60405180910390f35b34801561094e57600080fd5b506109576121ca565b60405161096491906156dd565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190614fe2565b6121d4565b6040516109a19190615439565b60405180910390f35b3480156109b657600080fd5b506109bf6122a1565b6040516109cc919061541e565b60405180910390f35b3480156109e157600080fd5b506109ea6122c7565b005b3480156109f857600080fd5b50610a136004803603810190610a0e9190614fe2565b61249b565b604051610a209190615439565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190615047565b6124b9565b005b348015610a5e57600080fd5b50610a67612558565b604051610a7491906156dd565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f919061501e565b612562565b005b348015610ab257600080fd5b50610abb61264b565b604051610ac891906156dd565b60405180910390f35b348015610add57600080fd5b50610af86004803603810190610af39190615047565b612651565b005b348015610b0657600080fd5b50610b216004803603810190610b1c9190614f57565b612818565b604051610b2e91906156dd565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b599190614f05565b61289f565b005b348015610b6c57600080fd5b50610b876004803603810190610b829190615047565b61298f565b005b348015610b9557600080fd5b50610bb06004803603810190610bab9190615047565b612a2e565b005b348015610bbe57600080fd5b50610bd96004803603810190610bd49190614f05565b612acd565b005b610be3612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c67906155fd565b60405180910390fd5b8060108190555050565b6060600d8054610c89906159d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb5906159d7565b8015610d025780601f10610cd757610100808354040283529160200191610d02565b820191906000526020600020905b815481529060010190602001808311610ce557829003601f168201915b5050505050905090565b610d14612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d98906155fd565b60405180910390fd5b610dab6001612562565b6006601081905550600960128190555068a2a15d09519be00000601581905550565b6000610de1610dda612c8f565b8484612c97565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b6000610e30848484612e62565b610ef184610e3c612c8f565b610eec85604051806060016040528060288152602001615f6860289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ea2612c8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132189092919063ffffffff16565b612c97565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610f28612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac906155fd565b60405180910390fd5b80601860026101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610ffe9190615439565b60405180910390a150565b6000600b54821115611050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611047906154fd565b60405180910390fd5b600061105a61327c565b905061106f81846132a790919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b611096612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906155fd565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a69061557d565b60405180910390fd5b60005b600980549050811015611471578173ffffffffffffffffffffffffffffffffffffffff1660098281548110611210577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561145e576009600160098054905061126b91906158d3565b815481106112a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110611307577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480611424577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611471565b808061146990615a09565b9150506111b2565b5050565b600061151e611482612c8f565b846115198560066000611493612c8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b612c97565b6001905092915050565b60105481565b6000611538612c8f565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be9061569d565b60405180910390fd5b60006115d28361334f565b5050505050905061162b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061168381600b546133ab90919063ffffffff16565b600b8190555061169e83600c546132f190919063ffffffff16565b600c81905550505050565b6116b1612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611735906155fd565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d79061559d565b60405180910390fd5b816118005760006117f08461334f565b5050505050905080915050611817565b600061180b8461334f565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601860019054906101000a900460ff1681565b61185c612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e0906155fd565b60405180910390fd5b6118f36000612562565b6000601081905550600060128190555069d3c21bcecceda1000000601581905550565b61191e612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a2906155fd565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f9061557d565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b0c57611ac8600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611009565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b601860029054906101000a900460ff1681565b60125481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ce657600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d31565b611d2e600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611009565b90505b919050565b611d3e612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc2906155fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b611e97612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b906155fd565b60405180910390fd5b670de0b6b3a764000081611f389190615879565b60178190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611fc8612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204c906155fd565b60405180910390fd5b8060128190555050565b612067612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb906155fd565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e8054612147906159d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612173906159d7565b80156121c05780601f10612195576101008083540402835291602001916121c0565b820191906000526020600020905b8154815290600101906020018083116121a357829003601f168201915b5050505050905090565b6000601654905090565b60006122976121e1612c8f565b8461229285604051806060016040528060258152602001615f90602591396006600061220b612c8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132189092919063ffffffff16565b612c97565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e906156bd565b60405180910390fd5b600254421161239b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123929061567d565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006124af6124a8612c8f565b8484612e62565b6001905092915050565b6124c1612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461254e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612545906155fd565b60405180910390fd5b8060148190555050565b6000601754905090565b61256a612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ee906155fd565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516126409190615439565b60405180910390a150565b60145481565b612659612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd906155fd565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261279491906157f2565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6128a7612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b906155fd565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612997612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1b906155fd565b60405180910390fd5b8060158190555050565b612a36612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aba906155fd565b60405180910390fd5b8060168190555050565b612ad5612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b59906155fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc99061551d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfe9061565d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6e9061553d565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e5591906156dd565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec99061563d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f39906154dd565b60405180910390fd5b60008111612f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7c9061561d565b60405180910390fd5b612f8d611f97565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ffb5750612fcb611f97565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561304657601554811115613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303c906155bd565b60405180910390fd5b5b600061305130611c4b565b905060006016548210159050601860009054906101000a900460ff161580156130865750601860019054906101000a900460ff165b80156130dd57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156131535780156130f75760165491506130f6826133f5565b5b6000479050601860029054906101000a900460ff16801561311f5750670de0b6b3a764000081115b15613151576017548111156131345760175490505b61315061314b6064836132a790919063ffffffff16565b6134a9565b5b505b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131fa5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561320457600090505b613210868686846134f5565b505050505050565b6000838311158290613260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325791906154bb565b60405180910390fd5b506000838561326f91906158d3565b9050809150509392505050565b600080600061328961374c565b915091506132a081836132a790919063ffffffff16565b9250505090565b60006132e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a97565b905092915050565b600080828461330091906157f2565b905083811015613345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333c9061555d565b60405180910390fd5b8091505092915050565b60008060008060008060008060006133668a613afa565b92509250925060008060006133848d868661337f61327c565b613b54565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006133ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613218565b905092915050565b6001601860006101000a81548160ff021916908315150217905550600047905061341e82613bdd565b600061343382476133ab90919063ffffffff16565b9050613489600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613484601454613476601254866132a790919063ffffffff16565b613ed490919063ffffffff16565b613f4f565b50506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff02191690831515021790555060008111156134d7576134d681613f9a565b5b6000601860006101000a81548160ff02191690831515021790555050565b8061350357613502614299565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135a65750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135bb576135b68484846142dc565b613738565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561365e5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136735761366e84848461453c565b613737565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137155750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561372a5761372584848461479c565b613736565b613735848484614a91565b5b5b5b8061374657613745614c5c565b5b50505050565b6000806000600b5490506000600a54905060005b600980549050811015613a5a578260046000600984815481106137ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806138c05750816005600060098481548110613858577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156138d757600b54600a5494509450505050613a93565b61398d6004600060098481548110613918577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846133ab90919063ffffffff16565b9250613a4560056000600984815481106139d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836133ab90919063ffffffff16565b91508080613a5290615a09565b915050613760565b50613a72600a54600b546132a790919063ffffffff16565b821015613a8a57600b54600a54935093505050613a93565b81819350935050505b9091565b60008083118290613ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad591906154bb565b60405180910390fd5b5060008385613aed9190615848565b9050809150509392505050565b600080600080613b0985614c70565b90506000613b1686614ca1565b90506000613b3f82613b31858a6133ab90919063ffffffff16565b6133ab90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613b6d8589613ed490919063ffffffff16565b90506000613b848689613ed490919063ffffffff16565b90506000613b9b8789613ed490919063ffffffff16565b90506000613bc482613bb685876133ab90919063ffffffff16565b6133ab90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613c20577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613c4e5781602001602082028036833780820191505090505b5090503081600081518110613c8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d2c57600080fd5b505afa158015613d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d649190614f2e565b81600181518110613d9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e03307f000000000000000000000000000000000000000000000000000000000000000084612c97565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e65959493929190615728565b600060405180830381600087803b158015613e7f57600080fd5b505af1158015613e93573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ec89291906156f8565b60405180910390a15050565b600080831415613ee75760009050613f49565b60008284613ef59190615879565b9050828482613f049190615848565b14613f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f3b906155dd565b60405180910390fd5b809150505b92915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613f95573d6000803e3d6000fd5b505050565b6000600267ffffffffffffffff811115613fdd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561400b5781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561407457600080fd5b505afa158015614088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ac9190614f2e565b816000815181106140e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061415b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000000061420b61012c426132f190919063ffffffff16565b6040518663ffffffff1660e01b815260040161422a949392919061546f565b6000604051808303818588803b15801561424357600080fd5b505af1158015614257573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624828260405161428d9291906156f8565b60405180910390a15050565b60006010541480156142ad57506000601254145b156142b7576142da565b601054601181905550601254601381905550600060108190555060006012819055505b565b6000806000806000806142ee8761334f565b95509550955095509550955061434c87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143e186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061447685600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144c281614cd2565b6144cc8483614e77565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161452991906156dd565b60405180910390a3505050505050505050565b60008060008060008061454e8761334f565b9550955095509550955095506145ac86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061464183600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146d685600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061472281614cd2565b61472c8483614e77565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161478991906156dd565b60405180910390a3505050505050505050565b6000806000806000806147ae8761334f565b95509550955095509550955061480c87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148a186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061493683600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149cb85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1781614cd2565b614a218483614e77565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614a7e91906156dd565b60405180910390a3505050505050505050565b600080600080600080614aa38761334f565b955095509550955095509550614b0186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9685600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614be281614cd2565b614bec8483614e77565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614c4991906156dd565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000614c9a6064614c8c60105485613ed490919063ffffffff16565b6132a790919063ffffffff16565b9050919050565b6000614ccb6064614cbd60125485613ed490919063ffffffff16565b6132a790919063ffffffff16565b9050919050565b6000614cdc61327c565b90506000614cf38284613ed490919063ffffffff16565b9050614d4781600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e7257614e2e83600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614e8c82600b546133ab90919063ffffffff16565b600b81905550614ea781600c546132f190919063ffffffff16565b600c819055505050565b600081359050614ec081615f22565b92915050565b600081519050614ed581615f22565b92915050565b600081359050614eea81615f39565b92915050565b600081359050614eff81615f50565b92915050565b600060208284031215614f1757600080fd5b6000614f2584828501614eb1565b91505092915050565b600060208284031215614f4057600080fd5b6000614f4e84828501614ec6565b91505092915050565b60008060408385031215614f6a57600080fd5b6000614f7885828601614eb1565b9250506020614f8985828601614eb1565b9150509250929050565b600080600060608486031215614fa857600080fd5b6000614fb686828701614eb1565b9350506020614fc786828701614eb1565b9250506040614fd886828701614ef0565b9150509250925092565b60008060408385031215614ff557600080fd5b600061500385828601614eb1565b925050602061501485828601614ef0565b9150509250929050565b60006020828403121561503057600080fd5b600061503e84828501614edb565b91505092915050565b60006020828403121561505957600080fd5b600061506784828501614ef0565b91505092915050565b6000806040838503121561508357600080fd5b600061509185828601614ef0565b92505060206150a285828601614edb565b9150509250929050565b60006150b883836150d3565b60208301905092915050565b6150cd81615919565b82525050565b6150dc81615907565b82525050565b6150eb81615907565b82525050565b60006150fc826157ad565b61510681856157d0565b93506151118361579d565b8060005b8381101561514257815161512988826150ac565b9750615134836157c3565b925050600181019050615115565b5085935050505092915050565b6151588161592b565b82525050565b6151678161596e565b82525050565b61517681615992565b82525050565b6000615187826157b8565b61519181856157e1565b93506151a18185602086016159a4565b6151aa81615adf565b840191505092915050565b60006151c26023836157e1565b91506151cd82615af0565b604082019050919050565b60006151e5602a836157e1565b91506151f082615b3f565b604082019050919050565b60006152086026836157e1565b915061521382615b8e565b604082019050919050565b600061522b6022836157e1565b915061523682615bdd565b604082019050919050565b600061524e601b836157e1565b915061525982615c2c565b602082019050919050565b6000615271601b836157e1565b915061527c82615c55565b602082019050919050565b6000615294601f836157e1565b915061529f82615c7e565b602082019050919050565b60006152b76028836157e1565b91506152c282615ca7565b604082019050919050565b60006152da6021836157e1565b91506152e582615cf6565b604082019050919050565b60006152fd6020836157e1565b915061530882615d45565b602082019050919050565b60006153206029836157e1565b915061532b82615d6e565b604082019050919050565b60006153436025836157e1565b915061534e82615dbd565b604082019050919050565b60006153666024836157e1565b915061537182615e0c565b604082019050919050565b6000615389601f836157e1565b915061539482615e5b565b602082019050919050565b60006153ac602c836157e1565b91506153b782615e84565b604082019050919050565b60006153cf6023836157e1565b91506153da82615ed3565b604082019050919050565b6153ee81615957565b82525050565b6153fd81615961565b82525050565b600060208201905061541860008301846150e2565b92915050565b600060208201905061543360008301846150c4565b92915050565b600060208201905061544e600083018461514f565b92915050565b6000602082019050615469600083018461515e565b92915050565b6000608082019050615484600083018761516d565b818103602083015261549681866150f1565b90506154a560408301856150e2565b6154b260608301846153e5565b95945050505050565b600060208201905081810360008301526154d5818461517c565b905092915050565b600060208201905081810360008301526154f6816151b5565b9050919050565b60006020820190508181036000830152615516816151d8565b9050919050565b60006020820190508181036000830152615536816151fb565b9050919050565b600060208201905081810360008301526155568161521e565b9050919050565b6000602082019050818103600083015261557681615241565b9050919050565b6000602082019050818103600083015261559681615264565b9050919050565b600060208201905081810360008301526155b681615287565b9050919050565b600060208201905081810360008301526155d6816152aa565b9050919050565b600060208201905081810360008301526155f6816152cd565b9050919050565b60006020820190508181036000830152615616816152f0565b9050919050565b6000602082019050818103600083015261563681615313565b9050919050565b6000602082019050818103600083015261565681615336565b9050919050565b6000602082019050818103600083015261567681615359565b9050919050565b600060208201905081810360008301526156968161537c565b9050919050565b600060208201905081810360008301526156b68161539f565b9050919050565b600060208201905081810360008301526156d6816153c2565b9050919050565b60006020820190506156f260008301846153e5565b92915050565b600060408201905061570d60008301856153e5565b818103602083015261571f81846150f1565b90509392505050565b600060a08201905061573d60008301886153e5565b61574a602083018761516d565b818103604083015261575c81866150f1565b905061576b60608301856150e2565b61577860808301846153e5565b9695505050505050565b600060208201905061579760008301846153f4565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006157fd82615957565b915061580883615957565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561583d5761583c615a52565b5b828201905092915050565b600061585382615957565b915061585e83615957565b92508261586e5761586d615a81565b5b828204905092915050565b600061588482615957565b915061588f83615957565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158c8576158c7615a52565b5b828202905092915050565b60006158de82615957565b91506158e983615957565b9250828210156158fc576158fb615a52565b5b828203905092915050565b600061591282615937565b9050919050565b600061592482615937565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061597982615980565b9050919050565b600061598b82615937565b9050919050565b600061599d82615957565b9050919050565b60005b838110156159c25780820151818401526020810190506159a7565b838111156159d1576000848401525b50505050565b600060028204905060018216806159ef57607f821691505b60208210811415615a0357615a02615ab0565b5b50919050565b6000615a1482615957565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a4757615a46615a52565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615f2b81615907565b8114615f3657600080fd5b50565b615f428161592b565b8114615f4d57600080fd5b50565b615f5981615957565b8114615f6457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a625eebc0b3ddb8e5cc6d47b970873ba46113219f2b2c1f62445f09db8360de764736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80636053a0e311610190578063a5ece941116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b3714610b37578063ec28438a14610b60578063f0f165af14610b89578063f2fde38b14610bb2576102ef565b8063d6b513cf14610aa6578063dd46706414610ad1578063dd62ed3e14610afa576102ef565b8063a5ece941146109aa578063a69df4b5146109d5578063a9059cbb146109ec578063b0cb81f114610a29578063bdc653ef14610a52578063c49b9a8014610a7d576102ef565b806388f8202011610149578063906e9dd011610123578063906e9dd0146108ee57806395d89b4114610917578063a073d37f14610942578063a457c2d71461096d576102ef565b806388f820201461085d5780638da5cb5b1461089a5780638ee88c53146108c5576102ef565b80636053a0e31461075f5780636bc87c3a1461078a57806370a08231146107b5578063715018a6146107f25780637d1db4a51461080957806382d2a4bb14610834576102ef565b80633685d4191161024f57806349bd5a5e1161020857806352390c02116101e257806352390c02146106a35780635342acb4146106cc578063557ed1ba14610709578063602bc62b14610734576102ef565b806349bd5a5e146106365780634a74bb02146106615780635134f6ab1461068c576102ef565b80633685d41914610516578063395093511461053f5780633b124fe71461057c5780633bd5d173146105a7578063437823ec146105d05780634549b039146105f9576102ef565b806318160ddd116102a157806318160ddd146103f257806323b872dd1461041d57806327c8f8351461045a57806329370cc6146104855780632d838119146104ae578063313ce567146104eb576102ef565b8063061c82d0146102f457806306fdde031461031d57806307efbfdc14610348578063095ea7b31461035f57806313114a9d1461039c5780631694505e146103c7576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b60048036038101906103169190615047565b610bdb565b005b34801561032957600080fd5b50610332610c7a565b60405161033f91906154bb565b60405180910390f35b34801561035457600080fd5b5061035d610d0c565b005b34801561036b57600080fd5b5061038660048036038101906103819190614fe2565b610dcd565b6040516103939190615439565b60405180910390f35b3480156103a857600080fd5b506103b1610deb565b6040516103be91906156dd565b60405180910390f35b3480156103d357600080fd5b506103dc610df5565b6040516103e99190615454565b60405180910390f35b3480156103fe57600080fd5b50610407610e19565b60405161041491906156dd565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190614f93565b610e23565b6040516104519190615439565b60405180910390f35b34801561046657600080fd5b5061046f610efc565b60405161047c9190615403565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a7919061501e565b610f20565b005b3480156104ba57600080fd5b506104d560048036038101906104d09190615047565b611009565b6040516104e291906156dd565b60405180910390f35b3480156104f757600080fd5b50610500611077565b60405161050d9190615782565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190614f05565b61108e565b005b34801561054b57600080fd5b5061056660048036038101906105619190614fe2565b611475565b6040516105739190615439565b60405180910390f35b34801561058857600080fd5b50610591611528565b60405161059e91906156dd565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190615047565b61152e565b005b3480156105dc57600080fd5b506105f760048036038101906105f29190614f05565b6116a9565b005b34801561060557600080fd5b50610620600480360381019061061b9190615070565b611799565b60405161062d91906156dd565b60405180910390f35b34801561064257600080fd5b5061064b61181d565b6040516106589190615403565b60405180910390f35b34801561066d57600080fd5b50610676611841565b6040516106839190615439565b60405180910390f35b34801561069857600080fd5b506106a1611854565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190614f05565b611916565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190614f05565b611bca565b6040516107009190615439565b60405180910390f35b34801561071557600080fd5b5061071e611c20565b60405161072b91906156dd565b60405180910390f35b34801561074057600080fd5b50610749611c28565b60405161075691906156dd565b60405180910390f35b34801561076b57600080fd5b50610774611c32565b6040516107819190615439565b60405180910390f35b34801561079657600080fd5b5061079f611c45565b6040516107ac91906156dd565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614f05565b611c4b565b6040516107e991906156dd565b60405180910390f35b3480156107fe57600080fd5b50610807611d36565b005b34801561081557600080fd5b5061081e611e89565b60405161082b91906156dd565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190615047565b611e8f565b005b34801561086957600080fd5b50610884600480360381019061087f9190614f05565b611f41565b6040516108919190615439565b60405180910390f35b3480156108a657600080fd5b506108af611f97565b6040516108bc9190615403565b60405180910390f35b3480156108d157600080fd5b506108ec60048036038101906108e79190615047565b611fc0565b005b3480156108fa57600080fd5b5061091560048036038101906109109190614f05565b61205f565b005b34801561092357600080fd5b5061092c612138565b60405161093991906154bb565b60405180910390f35b34801561094e57600080fd5b506109576121ca565b60405161096491906156dd565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190614fe2565b6121d4565b6040516109a19190615439565b60405180910390f35b3480156109b657600080fd5b506109bf6122a1565b6040516109cc919061541e565b60405180910390f35b3480156109e157600080fd5b506109ea6122c7565b005b3480156109f857600080fd5b50610a136004803603810190610a0e9190614fe2565b61249b565b604051610a209190615439565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190615047565b6124b9565b005b348015610a5e57600080fd5b50610a67612558565b604051610a7491906156dd565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f919061501e565b612562565b005b348015610ab257600080fd5b50610abb61264b565b604051610ac891906156dd565b60405180910390f35b348015610add57600080fd5b50610af86004803603810190610af39190615047565b612651565b005b348015610b0657600080fd5b50610b216004803603810190610b1c9190614f57565b612818565b604051610b2e91906156dd565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b599190614f05565b61289f565b005b348015610b6c57600080fd5b50610b876004803603810190610b829190615047565b61298f565b005b348015610b9557600080fd5b50610bb06004803603810190610bab9190615047565b612a2e565b005b348015610bbe57600080fd5b50610bd96004803603810190610bd49190614f05565b612acd565b005b610be3612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c67906155fd565b60405180910390fd5b8060108190555050565b6060600d8054610c89906159d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb5906159d7565b8015610d025780601f10610cd757610100808354040283529160200191610d02565b820191906000526020600020905b815481529060010190602001808311610ce557829003601f168201915b5050505050905090565b610d14612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d98906155fd565b60405180910390fd5b610dab6001612562565b6006601081905550600960128190555068a2a15d09519be00000601581905550565b6000610de1610dda612c8f565b8484612c97565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600a54905090565b6000610e30848484612e62565b610ef184610e3c612c8f565b610eec85604051806060016040528060288152602001615f6860289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ea2612c8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132189092919063ffffffff16565b612c97565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b610f28612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac906155fd565b60405180910390fd5b80601860026101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610ffe9190615439565b60405180910390a150565b6000600b54821115611050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611047906154fd565b60405180910390fd5b600061105a61327c565b905061106f81846132a790919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b611096612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a906155fd565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a69061557d565b60405180910390fd5b60005b600980549050811015611471578173ffffffffffffffffffffffffffffffffffffffff1660098281548110611210577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561145e576009600160098054905061126b91906158d3565b815481106112a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110611307577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009805480611424577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611471565b808061146990615a09565b9150506111b2565b5050565b600061151e611482612c8f565b846115198560066000611493612c8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b612c97565b6001905092915050565b60105481565b6000611538612c8f565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be9061569d565b60405180910390fd5b60006115d28361334f565b5050505050905061162b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061168381600b546133ab90919063ffffffff16565b600b8190555061169e83600c546132f190919063ffffffff16565b600c81905550505050565b6116b1612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611735906155fd565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d79061559d565b60405180910390fd5b816118005760006117f08461334f565b5050505050905080915050611817565b600061180b8461334f565b50505050915050809150505b92915050565b7f000000000000000000000000c7e3eca6b26714ce1616ed1c7cb02bf6a6cc18c281565b601860019054906101000a900460ff1681565b61185c612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e0906155fd565b60405180910390fd5b6118f36000612562565b6000601081905550600060128190555069d3c21bcecceda1000000601581905550565b61191e612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a2906155fd565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2f9061557d565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b0c57611ac8600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611009565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b601860029054906101000a900460ff1681565b60125481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ce657600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611d31565b611d2e600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611009565b90505b919050565b611d3e612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc2906155fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b611e97612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b906155fd565b60405180910390fd5b670de0b6b3a764000081611f389190615879565b60178190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611fc8612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204c906155fd565b60405180910390fd5b8060128190555050565b612067612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb906155fd565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e8054612147906159d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612173906159d7565b80156121c05780601f10612195576101008083540402835291602001916121c0565b820191906000526020600020905b8154815290600101906020018083116121a357829003601f168201915b5050505050905090565b6000601654905090565b60006122976121e1612c8f565b8461229285604051806060016040528060258152602001615f90602591396006600061220b612c8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132189092919063ffffffff16565b612c97565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e906156bd565b60405180910390fd5b600254421161239b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123929061567d565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006124af6124a8612c8f565b8484612e62565b6001905092915050565b6124c1612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461254e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612545906155fd565b60405180910390fd5b8060148190555050565b6000601754905090565b61256a612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ee906155fd565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516126409190615439565b60405180910390a150565b60145481565b612659612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd906155fd565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261279491906157f2565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6128a7612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b906155fd565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612997612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1b906155fd565b60405180910390fd5b8060158190555050565b612a36612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aba906155fd565b60405180910390fd5b8060168190555050565b612ad5612c8f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b59906155fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc99061551d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfe9061565d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6e9061553d565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e5591906156dd565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec99061563d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f39906154dd565b60405180910390fd5b60008111612f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7c9061561d565b60405180910390fd5b612f8d611f97565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ffb5750612fcb611f97565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561304657601554811115613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303c906155bd565b60405180910390fd5b5b600061305130611c4b565b905060006016548210159050601860009054906101000a900460ff161580156130865750601860019054906101000a900460ff165b80156130dd57507f000000000000000000000000c7e3eca6b26714ce1616ed1c7cb02bf6a6cc18c273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156131535780156130f75760165491506130f6826133f5565b5b6000479050601860029054906101000a900460ff16801561311f5750670de0b6b3a764000081115b15613151576017548111156131345760175490505b61315061314b6064836132a790919063ffffffff16565b6134a9565b5b505b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131fa5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561320457600090505b613210868686846134f5565b505050505050565b6000838311158290613260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325791906154bb565b60405180910390fd5b506000838561326f91906158d3565b9050809150509392505050565b600080600061328961374c565b915091506132a081836132a790919063ffffffff16565b9250505090565b60006132e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a97565b905092915050565b600080828461330091906157f2565b905083811015613345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333c9061555d565b60405180910390fd5b8091505092915050565b60008060008060008060008060006133668a613afa565b92509250925060008060006133848d868661337f61327c565b613b54565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006133ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613218565b905092915050565b6001601860006101000a81548160ff021916908315150217905550600047905061341e82613bdd565b600061343382476133ab90919063ffffffff16565b9050613489600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613484601454613476601254866132a790919063ffffffff16565b613ed490919063ffffffff16565b613f4f565b50506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff02191690831515021790555060008111156134d7576134d681613f9a565b5b6000601860006101000a81548160ff02191690831515021790555050565b8061350357613502614299565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135a65750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135bb576135b68484846142dc565b613738565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561365e5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136735761366e84848461453c565b613737565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137155750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561372a5761372584848461479c565b613736565b613735848484614a91565b5b5b5b8061374657613745614c5c565b5b50505050565b6000806000600b5490506000600a54905060005b600980549050811015613a5a578260046000600984815481106137ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806138c05750816005600060098481548110613858577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156138d757600b54600a5494509450505050613a93565b61398d6004600060098481548110613918577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846133ab90919063ffffffff16565b9250613a4560056000600984815481106139d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836133ab90919063ffffffff16565b91508080613a5290615a09565b915050613760565b50613a72600a54600b546132a790919063ffffffff16565b821015613a8a57600b54600a54935093505050613a93565b81819350935050505b9091565b60008083118290613ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad591906154bb565b60405180910390fd5b5060008385613aed9190615848565b9050809150509392505050565b600080600080613b0985614c70565b90506000613b1686614ca1565b90506000613b3f82613b31858a6133ab90919063ffffffff16565b6133ab90919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613b6d8589613ed490919063ffffffff16565b90506000613b848689613ed490919063ffffffff16565b90506000613b9b8789613ed490919063ffffffff16565b90506000613bc482613bb685876133ab90919063ffffffff16565b6133ab90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613c20577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613c4e5781602001602082028036833780820191505090505b5090503081600081518110613c8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613d2c57600080fd5b505afa158015613d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d649190614f2e565b81600181518110613d9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e03307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612c97565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e65959493929190615728565b600060405180830381600087803b158015613e7f57600080fd5b505af1158015613e93573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ec89291906156f8565b60405180910390a15050565b600080831415613ee75760009050613f49565b60008284613ef59190615879565b9050828482613f049190615848565b14613f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f3b906155dd565b60405180910390fd5b809150505b92915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613f95573d6000803e3d6000fd5b505050565b6000600267ffffffffffffffff811115613fdd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561400b5781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561407457600080fd5b505afa158015614088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ac9190614f2e565b816000815181106140e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061415b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead61420b61012c426132f190919063ffffffff16565b6040518663ffffffff1660e01b815260040161422a949392919061546f565b6000604051808303818588803b15801561424357600080fd5b505af1158015614257573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624828260405161428d9291906156f8565b60405180910390a15050565b60006010541480156142ad57506000601254145b156142b7576142da565b601054601181905550601254601381905550600060108190555060006012819055505b565b6000806000806000806142ee8761334f565b95509550955095509550955061434c87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143e186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061447685600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144c281614cd2565b6144cc8483614e77565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161452991906156dd565b60405180910390a3505050505050505050565b60008060008060008061454e8761334f565b9550955095509550955095506145ac86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061464183600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146d685600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061472281614cd2565b61472c8483614e77565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161478991906156dd565b60405180910390a3505050505050505050565b6000806000806000806147ae8761334f565b95509550955095509550955061480c87600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148a186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061493683600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149cb85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1781614cd2565b614a218483614e77565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614a7e91906156dd565b60405180910390a3505050505050505050565b600080600080600080614aa38761334f565b955095509550955095509550614b0186600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ab90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9685600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614be281614cd2565b614bec8483614e77565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614c4991906156dd565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000614c9a6064614c8c60105485613ed490919063ffffffff16565b6132a790919063ffffffff16565b9050919050565b6000614ccb6064614cbd60125485613ed490919063ffffffff16565b6132a790919063ffffffff16565b9050919050565b6000614cdc61327c565b90506000614cf38284613ed490919063ffffffff16565b9050614d4781600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614e7257614e2e83600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f190919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614e8c82600b546133ab90919063ffffffff16565b600b81905550614ea781600c546132f190919063ffffffff16565b600c819055505050565b600081359050614ec081615f22565b92915050565b600081519050614ed581615f22565b92915050565b600081359050614eea81615f39565b92915050565b600081359050614eff81615f50565b92915050565b600060208284031215614f1757600080fd5b6000614f2584828501614eb1565b91505092915050565b600060208284031215614f4057600080fd5b6000614f4e84828501614ec6565b91505092915050565b60008060408385031215614f6a57600080fd5b6000614f7885828601614eb1565b9250506020614f8985828601614eb1565b9150509250929050565b600080600060608486031215614fa857600080fd5b6000614fb686828701614eb1565b9350506020614fc786828701614eb1565b9250506040614fd886828701614ef0565b9150509250925092565b60008060408385031215614ff557600080fd5b600061500385828601614eb1565b925050602061501485828601614ef0565b9150509250929050565b60006020828403121561503057600080fd5b600061503e84828501614edb565b91505092915050565b60006020828403121561505957600080fd5b600061506784828501614ef0565b91505092915050565b6000806040838503121561508357600080fd5b600061509185828601614ef0565b92505060206150a285828601614edb565b9150509250929050565b60006150b883836150d3565b60208301905092915050565b6150cd81615919565b82525050565b6150dc81615907565b82525050565b6150eb81615907565b82525050565b60006150fc826157ad565b61510681856157d0565b93506151118361579d565b8060005b8381101561514257815161512988826150ac565b9750615134836157c3565b925050600181019050615115565b5085935050505092915050565b6151588161592b565b82525050565b6151678161596e565b82525050565b61517681615992565b82525050565b6000615187826157b8565b61519181856157e1565b93506151a18185602086016159a4565b6151aa81615adf565b840191505092915050565b60006151c26023836157e1565b91506151cd82615af0565b604082019050919050565b60006151e5602a836157e1565b91506151f082615b3f565b604082019050919050565b60006152086026836157e1565b915061521382615b8e565b604082019050919050565b600061522b6022836157e1565b915061523682615bdd565b604082019050919050565b600061524e601b836157e1565b915061525982615c2c565b602082019050919050565b6000615271601b836157e1565b915061527c82615c55565b602082019050919050565b6000615294601f836157e1565b915061529f82615c7e565b602082019050919050565b60006152b76028836157e1565b91506152c282615ca7565b604082019050919050565b60006152da6021836157e1565b91506152e582615cf6565b604082019050919050565b60006152fd6020836157e1565b915061530882615d45565b602082019050919050565b60006153206029836157e1565b915061532b82615d6e565b604082019050919050565b60006153436025836157e1565b915061534e82615dbd565b604082019050919050565b60006153666024836157e1565b915061537182615e0c565b604082019050919050565b6000615389601f836157e1565b915061539482615e5b565b602082019050919050565b60006153ac602c836157e1565b91506153b782615e84565b604082019050919050565b60006153cf6023836157e1565b91506153da82615ed3565b604082019050919050565b6153ee81615957565b82525050565b6153fd81615961565b82525050565b600060208201905061541860008301846150e2565b92915050565b600060208201905061543360008301846150c4565b92915050565b600060208201905061544e600083018461514f565b92915050565b6000602082019050615469600083018461515e565b92915050565b6000608082019050615484600083018761516d565b818103602083015261549681866150f1565b90506154a560408301856150e2565b6154b260608301846153e5565b95945050505050565b600060208201905081810360008301526154d5818461517c565b905092915050565b600060208201905081810360008301526154f6816151b5565b9050919050565b60006020820190508181036000830152615516816151d8565b9050919050565b60006020820190508181036000830152615536816151fb565b9050919050565b600060208201905081810360008301526155568161521e565b9050919050565b6000602082019050818103600083015261557681615241565b9050919050565b6000602082019050818103600083015261559681615264565b9050919050565b600060208201905081810360008301526155b681615287565b9050919050565b600060208201905081810360008301526155d6816152aa565b9050919050565b600060208201905081810360008301526155f6816152cd565b9050919050565b60006020820190508181036000830152615616816152f0565b9050919050565b6000602082019050818103600083015261563681615313565b9050919050565b6000602082019050818103600083015261565681615336565b9050919050565b6000602082019050818103600083015261567681615359565b9050919050565b600060208201905081810360008301526156968161537c565b9050919050565b600060208201905081810360008301526156b68161539f565b9050919050565b600060208201905081810360008301526156d6816153c2565b9050919050565b60006020820190506156f260008301846153e5565b92915050565b600060408201905061570d60008301856153e5565b818103602083015261571f81846150f1565b90509392505050565b600060a08201905061573d60008301886153e5565b61574a602083018761516d565b818103604083015261575c81866150f1565b905061576b60608301856150e2565b61577860808301846153e5565b9695505050505050565b600060208201905061579760008301846153f4565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006157fd82615957565b915061580883615957565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561583d5761583c615a52565b5b828201905092915050565b600061585382615957565b915061585e83615957565b92508261586e5761586d615a81565b5b828204905092915050565b600061588482615957565b915061588f83615957565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158c8576158c7615a52565b5b828202905092915050565b60006158de82615957565b91506158e983615957565b9250828210156158fc576158fb615a52565b5b828203905092915050565b600061591282615937565b9050919050565b600061592482615937565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061597982615980565b9050919050565b600061598b82615937565b9050919050565b600061599d82615957565b9050919050565b60005b838110156159c25780820151818401526020810190506159a7565b838111156159d1576000848401525b50505050565b600060028204905060018216806159ef57607f821691505b60208210811415615a0357615a02615ab0565b5b50919050565b6000615a1482615957565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a4757615a46615a52565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615f2b81615907565b8114615f3657600080fd5b50565b615f428161592b565b8114615f4d57600080fd5b50565b615f5981615957565b8114615f6457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a625eebc0b3ddb8e5cc6d47b970873ba46113219f2b2c1f62445f09db8360de764736f6c63430008040033

Deployed Bytecode Sourcemap

16700:19960:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34717:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19508:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36230:191;;;;;;;;;;;;;:::i;:::-;;20420:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21541:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18110:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19785:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20589:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16946:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35856:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22725:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19694:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23329:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20910:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17683:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21892:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34472:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22281:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18168:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18247:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36018:200;;;;;;;;;;;;;:::i;:::-;;22986:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34337:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8090:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7988;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18295:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17770:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19888:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7580:148;;;;;;;;;;;;;:::i;:::-;;17923:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35383:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21413:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7355:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34827:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35524:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19599:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21640:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21136:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16825:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8426:305;;;;;;;;;;;;;:::i;:::-;;20094:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35084:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21772:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35673:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17875:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8188:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20269:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34595:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34961:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35204:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7736:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34717:98;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34801:6:::1;34791:7;:16;;;;34717:98:::0;:::o;19508:83::-;19545:13;19578:5;19571:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19508:83;:::o;36230:191::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36284:30:::1;36309:4;36284:24;:30::i;:::-;36335:1;36325:7;:11;;;;36363:1;36347:13;:17;;;;36390:23;36375:12;:38;;;;36230:191::o:0;20420:161::-;20495:4;20512:39;20521:12;:10;:12::i;:::-;20535:7;20544:6;20512:8;:39::i;:::-;20569:4;20562:11;;20420:161;;;;:::o;21541:87::-;21583:7;21610:10;;21603:17;;21541:87;:::o;18110:51::-;;;:::o;19785:95::-;19838:7;19865;;19858:14;;19785:95;:::o;20589:313::-;20687:4;20704:36;20714:6;20722:9;20733:6;20704:9;:36::i;:::-;20751:121;20760:6;20768:12;:10;:12::i;:::-;20782:89;20820:6;20782:89;;;;;;;;;;;;;;;;;:11;:19;20794:6;20782:19;;;;;;;;;;;;;;;:33;20802:12;:10;:12::i;:::-;20782:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20751:8;:121::i;:::-;20890:4;20883:11;;20589:313;;;;;:::o;16946:81::-;;;:::o;35856:150::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35943:8:::1;35926:14;;:25;;;;;;;;;;;;;;;;;;35967:31;35989:8;35967:31;;;;;;:::i;:::-;;;;;;;;35856:150:::0;:::o;22725:253::-;22791:7;22830;;22819;:18;;22811:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22895:19;22918:10;:8;:10::i;:::-;22895:33;;22946:24;22958:11;22946:7;:11;;:24;;;;:::i;:::-;22939:31;;;22725:253;;;:::o;19694:83::-;19735:5;19760:9;;;;;;;;;;;19753:16;;19694:83;:::o;23329:479::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23411:11:::1;:20;23423:7;23411:20;;;;;;;;;;;;;;;;;;;;;;;;;23403:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23479:9;23474:327;23498:9;:16;;;;23494:1;:20;23474:327;;;23556:7;23540:23;;:9;23550:1;23540:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;23536:254;;;23599:9;23628:1;23609:9;:16;;;;:20;;;;:::i;:::-;23599:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23584:9;23594:1;23584:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23668:1;23649:7;:16;23657:7;23649:16;;;;;;;;;;;;;;;:20;;;;23711:5;23688:11;:20;23700:7;23688:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23735:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23769:5;;23536:254;23516:3;;;;;:::i;:::-;;;;23474:327;;;;23329:479:::0;:::o;20910:218::-;20998:4;21015:83;21024:12;:10;:12::i;:::-;21038:7;21047:50;21086:10;21047:11;:25;21059:12;:10;:12::i;:::-;21047:25;;;;;;;;;;;;;;;:34;21073:7;21047:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21015:8;:83::i;:::-;21116:4;21109:11;;20910:218;;;;:::o;17683:26::-;;;;:::o;21892:377::-;21944:14;21961:12;:10;:12::i;:::-;21944:29;;21993:11;:19;22005:6;21993:19;;;;;;;;;;;;;;;;;;;;;;;;;21992:20;21984:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22073:15;22097:19;22108:7;22097:10;:19::i;:::-;22072:44;;;;;;;22145:28;22165:7;22145;:15;22153:6;22145:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22127:7;:15;22135:6;22127:15;;;;;;;;;;;;;;;:46;;;;22194:20;22206:7;22194;;:11;;:20;;;;:::i;:::-;22184:7;:30;;;;22238:23;22253:7;22238:10;;:14;;:23;;;;:::i;:::-;22225:10;:36;;;;21892:377;;;:::o;34472:111::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34571:4:::1;34541:18;:27;34560:7;34541:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34472:111:::0;:::o;22281:436::-;22371:7;22410;;22399;:18;;22391:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22469:17;22464:246;;22504:15;22528:19;22539:7;22528:10;:19::i;:::-;22503:44;;;;;;;22569:7;22562:14;;;;;22464:246;22611:23;22642:19;22653:7;22642:10;:19::i;:::-;22609:52;;;;;;;22683:15;22676:22;;;22281:436;;;;;:::o;18168:38::-;;;:::o;18247:41::-;;;;;;;;;;;;;:::o;36018:200::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36077:31:::1;36102:5;36077:24;:31::i;:::-;36129:1;36119:7;:11;;;;36157:1;36141:13;:17;;;;36184:26;36169:12;:41;;;;36018:200::o:0;22986:335::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23071:11:::1;:20;23083:7;23071:20;;;;;;;;;;;;;;;;;;;;;;;;;23070:21;23062:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23156:1;23137:7;:16;23145:7;23137:16;;;;;;;;;;;;;;;;:20;23134:108;;;23193:37;23213:7;:16;23221:7;23213:16;;;;;;;;;;;;;;;;23193:19;:37::i;:::-;23174:7;:16;23182:7;23174:16;;;;;;;;;;;;;;;:56;;;;23134:108;23275:4;23252:11;:20;23264:7;23252:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23290:9;23305:7;23290:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22986:335:::0;:::o;34337:123::-;34401:4;34425:18;:27;34444:7;34425:27;;;;;;;;;;;;;;;;;;;;;;;;;34418:34;;34337:123;;;:::o;8090:90::-;8130:7;8157:15;8150:22;;8090:90;:::o;7988:::-;8034:7;8061:9;;8054:16;;7988:90;:::o;18295:33::-;;;;;;;;;;;;;:::o;17770:32::-;;;;:::o;19888:198::-;19954:7;19978:11;:20;19990:7;19978:20;;;;;;;;;;;;;;;;;;;;;;;;;19974:49;;;20007:7;:16;20015:7;20007:16;;;;;;;;;;;;;;;;20000:23;;;;19974:49;20041:37;20061:7;:16;20069:7;20061:16;;;;;;;;;;;;;;;;20041:19;:37::i;:::-;20034:44;;19888:198;;;;:::o;7580:148::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7687:1:::1;7650:40;;7671:6;::::0;::::1;;;;;;;;7650:40;;;;;;;;;;;;7718:1;7701:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7580:148::o:0;17923:53::-;;;;:::o;35383:133::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35502:6:::1;35487:12;:21;;;;:::i;:::-;35467:17;:41;;;;35383:133:::0;:::o;21413:120::-;21481:4;21505:11;:20;21517:7;21505:20;;;;;;;;;;;;;;;;;;;;;;;;;21498:27;;21413:120;;;:::o;7355:79::-;7393:7;7420:6;;;;;;;;;;;7413:13;;7355:79;:::o;34827:122::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34929:12:::1;34913:13;:28;;;;34827:122:::0;:::o;35524:141::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35639:17:::1;35612:16;;:45;;;;;;;;;;;;;;;;;;35524:141:::0;:::o;19599:87::-;19638:13;19671:7;19664:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19599:87;:::o;21640:120::-;21702:7;21729:23;;21722:30;;21640:120;:::o;21136:269::-;21229:4;21246:129;21255:12;:10;:12::i;:::-;21269:7;21278:96;21317:15;21278:96;;;;;;;;;;;;;;;;;:11;:25;21290:12;:10;:12::i;:::-;21278:25;;;;;;;;;;;;;;;:34;21304:7;21278:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21246:8;:129::i;:::-;21393:4;21386:11;;21136:269;;;;:::o;16825:93::-;;;;;;;;;;;;;:::o;8426:305::-;8496:10;8478:28;;:14;;;;;;;;;;;:28;;;8470:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;8583:9;;8565:15;:27;8557:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;8674:14;;;;;;;;;;;8645:44;;8666:6;;;;;;;;;;8645:44;;;;;;;;;;;;8709:14;;;;;;;;;;;8700:6;;:23;;;;;;;;;;;;;;;;;;8426:305::o;20094:167::-;20172:4;20189:42;20199:12;:10;:12::i;:::-;20213:9;20224:6;20189:9;:42::i;:::-;20249:4;20242:11;;20094:167;;;;:::o;35084:112::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35181:7:::1;35162:16;:26;;;;35084:112:::0;:::o;21772:108::-;21828:7;21855:17;;21848:24;;21772:108;:::o;35673:171::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35774:8:::1;35750:21;;:32;;;;;;;;;;;;;;;;;;35798:38;35827:8;35798:38;;;;;;:::i;:::-;;;;;;;;35673:171:::0;:::o;17875:35::-;;;;:::o;8188:226::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8269:6:::1;::::0;::::1;;;;;;;;8252:14;;:23;;;;;;;;;;;;;;;;;;8303:1;8286:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;8346:4;8328:15;:22;;;;:::i;:::-;8316:9;:34;;;;8403:1;8366:40;;8387:6;::::0;::::1;;;;;;;;8366:40;;;;;;;;;;;;8188:226:::0;:::o;20269:143::-;20350:7;20377:11;:18;20389:5;20377:18;;;;;;;;;;;;;;;:27;20396:7;20377:27;;;;;;;;;;;;;;;;20370:34;;20269:143;;;;:::o;34595:110::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34692:5:::1;34662:18;:27;34681:7;34662:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34595:110:::0;:::o;34961:111::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35053:11:::1;35038:12;:26;;;;34961:111:::0;:::o;35204:166::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35338:24:::1;35312:23;:50;;;;35204:166:::0;:::o;7736:244::-;7499:12;:10;:12::i;:::-;7489:22;;:6;;;;;;;;;;:22;;;7481:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7845:1:::1;7825:22;;:8;:22;;;;7817:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7935:8;7906:38;;7927:6;::::0;::::1;;;;;;;;7906:38;;;;;;;;;;;;7964:8;7955:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7736:244:::0;:::o;1643:115::-;1696:15;1739:10;1724:26;;1643:115;:::o;23816:337::-;23926:1;23909:19;;:5;:19;;;;23901:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24007:1;23988:21;;:7;:21;;;;23980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24091:6;24061:11;:18;24073:5;24061:18;;;;;;;;;;;;;;;:27;24080:7;24061:27;;;;;;;;;;;;;;;:36;;;;24129:7;24113:32;;24122:5;24113:32;;;24138:6;24113:32;;;;;;:::i;:::-;;;;;;;;23816:337;;;:::o;24161:1547::-;24299:1;24283:18;;:4;:18;;;;24275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24376:1;24362:16;;:2;:16;;;;24354:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24446:1;24437:6;:10;24429:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24515:7;:5;:7::i;:::-;24507:15;;:4;:15;;;;:32;;;;;24532:7;:5;:7::i;:::-;24526:13;;:2;:13;;;;24507:32;24504:139;;;24574:12;;24564:6;:22;;24556:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24504:139;24655:28;24686:24;24704:4;24686:9;:24::i;:::-;24655:55;;24721:28;24776:23;;24752:20;:47;;24721:78;;24825:16;;;;;;;;;;;24824:17;:42;;;;;24845:21;;;;;;;;;;;24824:42;:65;;;;;24876:13;24870:19;;:2;:19;;;24824:65;24820:582;;;24910:23;24906:165;;;24977:23;;24954:46;;25019:32;25030:20;25019:10;:32::i;:::-;24906:165;25082:15;25100:21;25082:39;;25140:14;;;;;;;;;;;:47;;;;;25176:10;25158:7;:29;25140:47;25136:255;;;25240:17;;25230:7;:27;25226:81;;;25290:17;;25280:27;;25226:81;25344:31;25358:16;25370:3;25358:7;:11;;:16;;;;:::i;:::-;25344:13;:31::i;:::-;25136:255;24820:582;;25422:12;25437:4;25422:19;;25549:18;:24;25568:4;25549:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;25577:18;:22;25596:2;25577:22;;;;;;;;;;;;;;;;;;;;;;;;;25549:50;25546:96;;;25625:5;25615:15;;25546:96;25662:38;25677:4;25682:2;25685:6;25692:7;25662:14;:38::i;:::-;24161:1547;;;;;;:::o;3054:192::-;3140:7;3173:1;3168;:6;;3176:12;3160:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3200:9;3216:1;3212;:5;;;;:::i;:::-;3200:17;;3237:1;3230:8;;;3054:192;;;;;:::o;32487:163::-;32528:7;32549:15;32566;32585:19;:17;:19::i;:::-;32548:56;;;;32622:20;32634:7;32622;:11;;:20;;;;:::i;:::-;32615:27;;;;32487:163;:::o;3514:132::-;3572:7;3599:39;3603:1;3606;3599:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3592:46;;3514:132;;;;:::o;2721:181::-;2779:7;2799:9;2815:1;2811;:5;;;;:::i;:::-;2799:17;;2840:1;2835;:6;;2827:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2893:1;2886:8;;;2721:181;;;;:::o;31285:419::-;31344:7;31353;31362;31371;31380;31389;31410:23;31435:12;31449:18;31471:20;31483:7;31471:11;:20::i;:::-;31409:82;;;;;;31503:15;31520:23;31545:12;31561:50;31573:7;31582:4;31588:10;31600;:8;:10::i;:::-;31561:11;:50::i;:::-;31502:109;;;;;;31630:7;31639:15;31656:4;31662:15;31679:4;31685:10;31622:74;;;;;;;;;;;;;;;;;;31285:419;;;;;;;:::o;2910:136::-;2968:7;2995:43;2999:1;3002;2995:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2988:50;;2910:136;;;;:::o;25716:433::-;18882:4;18863:16;;:23;;;;;;;;;;;;;;;;;;25806:22:::1;25831:21;25806:46;;25863:38;25880:20;25863:16;:38::i;:::-;25912:26;25941:41;25967:14;25941:21;:25;;:41;;;;:::i;:::-;25912:70;;26032:99;26053:16;;;;;;;;;;;26071:59;26113:16;;26071:37;26094:13;;26071:18;:22;;:37;;;;:::i;:::-;:41;;:59;;;;:::i;:::-;26032:20;:99::i;:::-;18897:1;;18928:5:::0;18909:16;;:24;;;;;;;;;;;;;;;;;;25716:433;:::o;26163:135::-;18882:4;18863:16;;:23;;;;;;;;;;;;;;;;;;26243:1:::1;26234:6;:10;26230:61;;;26258:24;26275:6;26258:16;:24::i;:::-;26230:61;18928:5:::0;18909:16;;:24;;;;;;;;;;;;;;;;;;26163:135;:::o;28099:704::-;28210:7;28206:40;;28232:14;:12;:14::i;:::-;28206:40;28271:11;:19;28283:6;28271:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;28295:11;:22;28307:9;28295:22;;;;;;;;;;;;;;;;;;;;;;;;;28294:23;28271:46;28267:467;;;28334:48;28356:6;28364:9;28375:6;28334:21;:48::i;:::-;28267:467;;;28405:11;:19;28417:6;28405:19;;;;;;;;;;;;;;;;;;;;;;;;;28404:20;:46;;;;;28428:11;:22;28440:9;28428:22;;;;;;;;;;;;;;;;;;;;;;;;;28404:46;28400:334;;;28467:46;28487:6;28495:9;28506:6;28467:19;:46::i;:::-;28400:334;;;28535:11;:19;28547:6;28535:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;28558:11;:22;28570:9;28558:22;;;;;;;;;;;;;;;;;;;;;;;;;28535:45;28531:203;;;28597:48;28619:6;28627:9;28638:6;28597:21;:48::i;:::-;28531:203;;;28678:44;28696:6;28704:9;28715:6;28678:17;:44::i;:::-;28531:203;28400:334;28267:467;28758:7;28754:41;;28780:15;:13;:15::i;:::-;28754:41;28099:704;;;;:::o;32658:561::-;32708:7;32717;32737:15;32755:7;;32737:25;;32773:15;32791:7;;32773:25;;32820:9;32815:289;32839:9;:16;;;;32835:1;:20;32815:289;;;32905:7;32881;:21;32889:9;32899:1;32889:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32881:21;;;;;;;;;;;;;;;;:31;:66;;;;32940:7;32916;:21;32924:9;32934:1;32924:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32916:21;;;;;;;;;;;;;;;;:31;32881:66;32877:97;;;32957:7;;32966;;32949:25;;;;;;;;;32877:97;32999:34;33011:7;:21;33019:9;33029:1;33019:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33011:21;;;;;;;;;;;;;;;;32999:7;:11;;:34;;;;:::i;:::-;32989:44;;33058:34;33070:7;:21;33078:9;33088:1;33078:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33070:21;;;;;;;;;;;;;;;;33058:7;:11;;:34;;;;:::i;:::-;33048:44;;32857:3;;;;;:::i;:::-;;;;32815:289;;;;33128:20;33140:7;;33128;;:11;;:20;;;;:::i;:::-;33118:7;:30;33114:61;;;33158:7;;33167;;33150:25;;;;;;;;33114:61;33194:7;33203;33186:25;;;;;;32658:561;;;:::o;3654:278::-;3740:7;3772:1;3768;:5;3775:12;3760:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3799:9;3815:1;3811;:5;;;;:::i;:::-;3799:17;;3923:1;3916:8;;;3654:278;;;;;:::o;31712:330::-;31772:7;31781;31790;31810:12;31825:24;31841:7;31825:15;:24::i;:::-;31810:39;;31860:18;31881:30;31903:7;31881:21;:30::i;:::-;31860:51;;31922:23;31948:33;31970:10;31948:17;31960:4;31948:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;31922:59;;32000:15;32017:4;32023:10;31992:42;;;;;;;;;31712:330;;;;;:::o;32050:429::-;32165:7;32174;32183;32203:15;32221:24;32233:11;32221:7;:11;;:24;;;;:::i;:::-;32203:42;;32256:12;32271:21;32280:11;32271:4;:8;;:21;;;;:::i;:::-;32256:36;;32303:18;32324:27;32339:11;32324:10;:14;;:27;;;;:::i;:::-;32303:48;;32362:23;32388:33;32410:10;32388:17;32400:4;32388:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;32362:59;;32440:7;32449:15;32466:4;32432:39;;;;;;;;;;32050:429;;;;;;;;:::o;26310:666::-;26436:21;26474:1;26460:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26436:40;;26505:4;26487;26492:1;26487:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26531:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26521:4;26526:1;26521:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;26566:62;26583:4;26598:15;26616:11;26566:8;:62::i;:::-;26667:15;:66;;;26748:11;26774:1;26818:4;26845;26881:15;26667:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26933:35;26950:11;26963:4;26933:35;;;;;;;:::i;:::-;;;;;;;;26310:666;;:::o;3254:250::-;3312:7;3341:1;3336;:6;3332:47;;;3366:1;3359:8;;;;3332:47;3391:9;3407:1;3403;:5;;;;:::i;:::-;3391:17;;3436:1;3431;3427;:5;;;;:::i;:::-;:10;3419:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3495:1;3488:8;;;3254:250;;;;;:::o;36433:126::-;36525:9;:18;;:26;36544:6;36525:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36433:126;;:::o;26988:578::-;27109:21;27147:1;27133:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27109:40;;27170:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27160:4;27165:1;27160:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;27221:4;27203;27208:1;27203:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27263:15;:66;;;27337:6;27359:1;27406:4;27425:11;27467:24;27487:3;27467:15;:19;;:24;;;;:::i;:::-;27263:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27528:30;27545:6;27553:4;27528:30;;;;;;;:::i;:::-;;;;;;;;26988:578;;:::o;33942:250::-;33999:1;33988:7;;:12;:34;;;;;34021:1;34004:13;;:18;33988:34;33985:46;;;34024:7;;33985:46;34069:7;;34051:15;:25;;;;34111:13;;34087:21;:37;;;;34155:1;34145:7;:11;;;;34183:1;34167:13;:17;;;;33942:250;:::o;29912:563::-;30015:15;30032:23;30057:12;30071:23;30096:12;30110:18;30132:19;30143:7;30132:10;:19::i;:::-;30014:137;;;;;;;;;;;;30177:28;30197:7;30177;:15;30185:6;30177:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30159:7;:15;30167:6;30159:15;;;;;;;;;;;;;;;:46;;;;30234:28;30254:7;30234;:15;30242:6;30234:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30216:7;:15;30224:6;30216:15;;;;;;;;;;;;;;;:46;;;;30294:39;30317:15;30294:7;:18;30302:9;30294:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30273:7;:18;30281:9;30273:18;;;;;;;;;;;;;;;:60;;;;30347:26;30362:10;30347:14;:26::i;:::-;30384:23;30396:4;30402;30384:11;:23::i;:::-;30440:9;30423:44;;30432:6;30423:44;;;30451:15;30423:44;;;;;;:::i;:::-;;;;;;;;29912:563;;;;;;;;;:::o;29321:583::-;29422:15;29439:23;29464:12;29478:23;29503:12;29517:18;29539:19;29550:7;29539:10;:19::i;:::-;29421:137;;;;;;;;;;;;29584:28;29604:7;29584;:15;29592:6;29584:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29566:7;:15;29574:6;29566:15;;;;;;;;;;;;;;;:46;;;;29644:39;29667:15;29644:7;:18;29652:9;29644:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29623:7;:18;29631:9;29623:18;;;;;;;;;;;;;;;:60;;;;29715:39;29738:15;29715:7;:18;29723:9;29715:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29694:7;:18;29702:9;29694:18;;;;;;;;;;;;;;;:60;;;;29776:26;29791:10;29776:14;:26::i;:::-;29813:23;29825:4;29831;29813:11;:23::i;:::-;29869:9;29852:44;;29861:6;29852:44;;;29880:15;29852:44;;;;;;:::i;:::-;;;;;;;;29321:583;;;;;;;;;:::o;30483:639::-;30586:15;30603:23;30628:12;30642:23;30667:12;30681:18;30703:19;30714:7;30703:10;:19::i;:::-;30585:137;;;;;;;;;;;;30748:28;30768:7;30748;:15;30756:6;30748:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30730:7;:15;30738:6;30730:15;;;;;;;;;;;;;;;:46;;;;30805:28;30825:7;30805;:15;30813:6;30805:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30787:7;:15;30795:6;30787:15;;;;;;;;;;;;;;;:46;;;;30865:39;30888:15;30865:7;:18;30873:9;30865:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30844:7;:18;30852:9;30844:18;;;;;;;;;;;;;;;:60;;;;30936:39;30959:15;30936:7;:18;30944:9;30936:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30915:7;:18;30923:9;30915:18;;;;;;;;;;;;;;;:60;;;;30994:26;31009:10;30994:14;:26::i;:::-;31031:23;31043:4;31049;31031:11;:23::i;:::-;31087:9;31070:44;;31079:6;31070:44;;;31098:15;31070:44;;;;;;:::i;:::-;;;;;;;;30483:639;;;;;;;;;:::o;28811:502::-;28910:15;28927:23;28952:12;28966:23;28991:12;29005:18;29027:19;29038:7;29027:10;:19::i;:::-;28909:137;;;;;;;;;;;;29075:28;29095:7;29075;:15;29083:6;29075:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29057:7;:15;29065:6;29057:15;;;;;;;;;;;;;;;:46;;;;29135:39;29158:15;29135:7;:18;29143:9;29135:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29114:7;:18;29122:9;29114:18;;;;;;;;;;;;;;;:60;;;;29185:26;29200:10;29185:14;:26::i;:::-;29222:23;29234:4;29240;29222:11;:23::i;:::-;29278:9;29261:44;;29270:6;29261:44;;;29289:15;29261:44;;;;;;:::i;:::-;;;;;;;;28811:502;;;;;;;;;:::o;34204:125::-;34258:15;;34248:7;:25;;;;34300:21;;34284:13;:37;;;;34204:125::o;33598:154::-;33662:7;33689:55;33728:5;33689:20;33701:7;;33689;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;33682:62;;33598:154;;;:::o;33764:166::-;33834:7;33861:61;33906:5;33861:26;33873:13;;33861:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;33854:68;;33764:166;;;:::o;33231:355::-;33294:19;33317:10;:8;:10::i;:::-;33294:33;;33338:18;33359:27;33374:11;33359:10;:14;;:27;;;;:::i;:::-;33338:48;;33422:38;33449:10;33422:7;:22;33438:4;33422:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;33397:7;:22;33413:4;33397:22;;;;;;;;;;;;;;;:63;;;;33474:11;:26;33494:4;33474:26;;;;;;;;;;;;;;;;;;;;;;;;;33471:107;;;33540:38;33567:10;33540:7;:22;33556:4;33540:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;33515:7;:22;33531:4;33515:22;;;;;;;;;;;;;;;:63;;;;33471:107;33231:355;;;:::o;31130:147::-;31208:17;31220:4;31208:7;;:11;;:17;;;;:::i;:::-;31198:7;:27;;;;31249:20;31264:4;31249:10;;:14;;:20;;;;:::i;:::-;31236:10;:33;;;;31130:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:284::-;923:6;972:2;960:9;951:7;947:23;943:32;940:2;;;988:1;985;978:12;940:2;1031:1;1056:64;1112:7;1103:6;1092:9;1088:22;1056:64;:::i;:::-;1046:74;;1002:128;930:207;;;;:::o;1143:407::-;1211:6;1219;1268:2;1256:9;1247:7;1243:23;1239:32;1236:2;;;1284:1;1281;1274:12;1236:2;1327:1;1352:53;1397:7;1388:6;1377:9;1373:22;1352:53;:::i;:::-;1342:63;;1298:117;1454:2;1480:53;1525:7;1516:6;1505:9;1501:22;1480:53;:::i;:::-;1470:63;;1425:118;1226:324;;;;;:::o;1556:552::-;1633:6;1641;1649;1698:2;1686:9;1677:7;1673:23;1669:32;1666:2;;;1714:1;1711;1704:12;1666:2;1757:1;1782:53;1827:7;1818:6;1807:9;1803:22;1782:53;:::i;:::-;1772:63;;1728:117;1884:2;1910:53;1955:7;1946:6;1935:9;1931:22;1910:53;:::i;:::-;1900:63;;1855:118;2012:2;2038:53;2083:7;2074:6;2063:9;2059:22;2038:53;:::i;:::-;2028:63;;1983:118;1656:452;;;;;:::o;2114:407::-;2182:6;2190;2239:2;2227:9;2218:7;2214:23;2210:32;2207:2;;;2255:1;2252;2245:12;2207:2;2298:1;2323:53;2368:7;2359:6;2348:9;2344:22;2323:53;:::i;:::-;2313:63;;2269:117;2425:2;2451:53;2496:7;2487:6;2476:9;2472:22;2451:53;:::i;:::-;2441:63;;2396:118;2197:324;;;;;:::o;2527:256::-;2583:6;2632:2;2620:9;2611:7;2607:23;2603:32;2600:2;;;2648:1;2645;2638:12;2600:2;2691:1;2716:50;2758:7;2749:6;2738:9;2734:22;2716:50;:::i;:::-;2706:60;;2662:114;2590:193;;;;:::o;2789:262::-;2848:6;2897:2;2885:9;2876:7;2872:23;2868:32;2865:2;;;2913:1;2910;2903:12;2865:2;2956:1;2981:53;3026:7;3017:6;3006:9;3002:22;2981:53;:::i;:::-;2971:63;;2927:117;2855:196;;;;:::o;3057:401::-;3122:6;3130;3179:2;3167:9;3158:7;3154:23;3150:32;3147:2;;;3195:1;3192;3185:12;3147:2;3238:1;3263:53;3308:7;3299:6;3288:9;3284:22;3263:53;:::i;:::-;3253:63;;3209:117;3365:2;3391:50;3433:7;3424:6;3413:9;3409:22;3391:50;:::i;:::-;3381:60;;3336:115;3137:321;;;;;:::o;3464:179::-;3533:10;3554:46;3596:3;3588:6;3554:46;:::i;:::-;3632:4;3627:3;3623:14;3609:28;;3544:99;;;;:::o;3649:142::-;3752:32;3778:5;3752:32;:::i;:::-;3747:3;3740:45;3730:61;;:::o;3797:108::-;3874:24;3892:5;3874:24;:::i;:::-;3869:3;3862:37;3852:53;;:::o;3911:118::-;3998:24;4016:5;3998:24;:::i;:::-;3993:3;3986:37;3976:53;;:::o;4065:732::-;4184:3;4213:54;4261:5;4213:54;:::i;:::-;4283:86;4362:6;4357:3;4283:86;:::i;:::-;4276:93;;4393:56;4443:5;4393:56;:::i;:::-;4472:7;4503:1;4488:284;4513:6;4510:1;4507:13;4488:284;;;4589:6;4583:13;4616:63;4675:3;4660:13;4616:63;:::i;:::-;4609:70;;4702:60;4755:6;4702:60;:::i;:::-;4692:70;;4548:224;4535:1;4532;4528:9;4523:14;;4488:284;;;4492:14;4788:3;4781:10;;4189:608;;;;;;;:::o;4803:109::-;4884:21;4899:5;4884:21;:::i;:::-;4879:3;4872:34;4862:50;;:::o;4918:185::-;5032:64;5090:5;5032:64;:::i;:::-;5027:3;5020:77;5010:93;;:::o;5109:147::-;5204:45;5243:5;5204:45;:::i;:::-;5199:3;5192:58;5182:74;;:::o;5262:364::-;5350:3;5378:39;5411:5;5378:39;:::i;:::-;5433:71;5497:6;5492:3;5433:71;:::i;:::-;5426:78;;5513:52;5558:6;5553:3;5546:4;5539:5;5535:16;5513:52;:::i;:::-;5590:29;5612:6;5590:29;:::i;:::-;5585:3;5581:39;5574:46;;5354:272;;;;;:::o;5632:366::-;5774:3;5795:67;5859:2;5854:3;5795:67;:::i;:::-;5788:74;;5871:93;5960:3;5871:93;:::i;:::-;5989:2;5984:3;5980:12;5973:19;;5778:220;;;:::o;6004:366::-;6146:3;6167:67;6231:2;6226:3;6167:67;:::i;:::-;6160:74;;6243:93;6332:3;6243:93;:::i;:::-;6361:2;6356:3;6352:12;6345:19;;6150:220;;;:::o;6376:366::-;6518:3;6539:67;6603:2;6598:3;6539:67;:::i;:::-;6532:74;;6615:93;6704:3;6615:93;:::i;:::-;6733:2;6728:3;6724:12;6717:19;;6522:220;;;:::o;6748:366::-;6890:3;6911:67;6975:2;6970:3;6911:67;:::i;:::-;6904:74;;6987:93;7076:3;6987:93;:::i;:::-;7105:2;7100:3;7096:12;7089:19;;6894:220;;;:::o;7120:366::-;7262:3;7283:67;7347:2;7342:3;7283:67;:::i;:::-;7276:74;;7359:93;7448:3;7359:93;:::i;:::-;7477:2;7472:3;7468:12;7461:19;;7266:220;;;:::o;7492:366::-;7634:3;7655:67;7719:2;7714:3;7655:67;:::i;:::-;7648:74;;7731:93;7820:3;7731:93;:::i;:::-;7849:2;7844:3;7840:12;7833:19;;7638:220;;;:::o;7864:366::-;8006:3;8027:67;8091:2;8086:3;8027:67;:::i;:::-;8020:74;;8103:93;8192:3;8103:93;:::i;:::-;8221:2;8216:3;8212:12;8205:19;;8010:220;;;:::o;8236:366::-;8378:3;8399:67;8463:2;8458:3;8399:67;:::i;:::-;8392:74;;8475:93;8564:3;8475:93;:::i;:::-;8593:2;8588:3;8584:12;8577:19;;8382:220;;;:::o;8608:366::-;8750:3;8771:67;8835:2;8830:3;8771:67;:::i;:::-;8764:74;;8847:93;8936:3;8847:93;:::i;:::-;8965:2;8960:3;8956:12;8949:19;;8754:220;;;:::o;8980:366::-;9122:3;9143:67;9207:2;9202:3;9143:67;:::i;:::-;9136:74;;9219:93;9308:3;9219:93;:::i;:::-;9337:2;9332:3;9328:12;9321:19;;9126:220;;;:::o;9352:366::-;9494:3;9515:67;9579:2;9574:3;9515:67;:::i;:::-;9508:74;;9591:93;9680:3;9591:93;:::i;:::-;9709:2;9704:3;9700:12;9693:19;;9498:220;;;:::o;9724:366::-;9866:3;9887:67;9951:2;9946:3;9887:67;:::i;:::-;9880:74;;9963:93;10052:3;9963:93;:::i;:::-;10081:2;10076:3;10072:12;10065:19;;9870:220;;;:::o;10096:366::-;10238:3;10259:67;10323:2;10318:3;10259:67;:::i;:::-;10252:74;;10335:93;10424:3;10335:93;:::i;:::-;10453:2;10448:3;10444:12;10437:19;;10242:220;;;:::o;10468:366::-;10610:3;10631:67;10695:2;10690:3;10631:67;:::i;:::-;10624:74;;10707:93;10796:3;10707:93;:::i;:::-;10825:2;10820:3;10816:12;10809:19;;10614:220;;;:::o;10840:366::-;10982:3;11003:67;11067:2;11062:3;11003:67;:::i;:::-;10996:74;;11079:93;11168:3;11079:93;:::i;:::-;11197:2;11192:3;11188:12;11181:19;;10986:220;;;:::o;11212:366::-;11354:3;11375:67;11439:2;11434:3;11375:67;:::i;:::-;11368:74;;11451:93;11540:3;11451:93;:::i;:::-;11569:2;11564:3;11560:12;11553:19;;11358:220;;;:::o;11584:118::-;11671:24;11689:5;11671:24;:::i;:::-;11666:3;11659:37;11649:53;;:::o;11708:112::-;11791:22;11807:5;11791:22;:::i;:::-;11786:3;11779:35;11769:51;;:::o;11826:222::-;11919:4;11957:2;11946:9;11942:18;11934:26;;11970:71;12038:1;12027:9;12023:17;12014:6;11970:71;:::i;:::-;11924:124;;;;:::o;12054:254::-;12163:4;12201:2;12190:9;12186:18;12178:26;;12214:87;12298:1;12287:9;12283:17;12274:6;12214:87;:::i;:::-;12168:140;;;;:::o;12314:210::-;12401:4;12439:2;12428:9;12424:18;12416:26;;12452:65;12514:1;12503:9;12499:17;12490:6;12452:65;:::i;:::-;12406:118;;;;:::o;12530:276::-;12650:4;12688:2;12677:9;12673:18;12665:26;;12701:98;12796:1;12785:9;12781:17;12772:6;12701:98;:::i;:::-;12655:151;;;;:::o;12812:720::-;13047:4;13085:3;13074:9;13070:19;13062:27;;13099:79;13175:1;13164:9;13160:17;13151:6;13099:79;:::i;:::-;13225:9;13219:4;13215:20;13210:2;13199:9;13195:18;13188:48;13253:108;13356:4;13347:6;13253:108;:::i;:::-;13245:116;;13371:72;13439:2;13428:9;13424:18;13415:6;13371:72;:::i;:::-;13453;13521:2;13510:9;13506:18;13497:6;13453:72;:::i;:::-;13052:480;;;;;;;:::o;13538:313::-;13651:4;13689:2;13678:9;13674:18;13666:26;;13738:9;13732:4;13728:20;13724:1;13713:9;13709:17;13702:47;13766:78;13839:4;13830:6;13766:78;:::i;:::-;13758:86;;13656:195;;;;:::o;13857:419::-;14023:4;14061:2;14050:9;14046:18;14038:26;;14110:9;14104:4;14100:20;14096:1;14085:9;14081:17;14074:47;14138:131;14264:4;14138:131;:::i;:::-;14130:139;;14028:248;;;:::o;14282:419::-;14448:4;14486:2;14475:9;14471:18;14463:26;;14535:9;14529:4;14525:20;14521:1;14510:9;14506:17;14499:47;14563:131;14689:4;14563:131;:::i;:::-;14555:139;;14453:248;;;:::o;14707:419::-;14873:4;14911:2;14900:9;14896:18;14888:26;;14960:9;14954:4;14950:20;14946:1;14935:9;14931:17;14924:47;14988:131;15114:4;14988:131;:::i;:::-;14980:139;;14878:248;;;:::o;15132:419::-;15298:4;15336:2;15325:9;15321:18;15313:26;;15385:9;15379:4;15375:20;15371:1;15360:9;15356:17;15349:47;15413:131;15539:4;15413:131;:::i;:::-;15405:139;;15303:248;;;:::o;15557:419::-;15723:4;15761:2;15750:9;15746:18;15738:26;;15810:9;15804:4;15800:20;15796:1;15785:9;15781:17;15774:47;15838:131;15964:4;15838:131;:::i;:::-;15830:139;;15728:248;;;:::o;15982:419::-;16148:4;16186:2;16175:9;16171:18;16163:26;;16235:9;16229:4;16225:20;16221:1;16210:9;16206:17;16199:47;16263:131;16389:4;16263:131;:::i;:::-;16255:139;;16153:248;;;:::o;16407:419::-;16573:4;16611:2;16600:9;16596:18;16588:26;;16660:9;16654:4;16650:20;16646:1;16635:9;16631:17;16624:47;16688:131;16814:4;16688:131;:::i;:::-;16680:139;;16578:248;;;:::o;16832:419::-;16998:4;17036:2;17025:9;17021:18;17013:26;;17085:9;17079:4;17075:20;17071:1;17060:9;17056:17;17049:47;17113:131;17239:4;17113:131;:::i;:::-;17105:139;;17003:248;;;:::o;17257:419::-;17423:4;17461:2;17450:9;17446:18;17438:26;;17510:9;17504:4;17500:20;17496:1;17485:9;17481:17;17474:47;17538:131;17664:4;17538:131;:::i;:::-;17530:139;;17428:248;;;:::o;17682:419::-;17848:4;17886:2;17875:9;17871:18;17863:26;;17935:9;17929:4;17925:20;17921:1;17910:9;17906:17;17899:47;17963:131;18089:4;17963:131;:::i;:::-;17955:139;;17853:248;;;:::o;18107:419::-;18273:4;18311:2;18300:9;18296:18;18288:26;;18360:9;18354:4;18350:20;18346:1;18335:9;18331:17;18324:47;18388:131;18514:4;18388:131;:::i;:::-;18380:139;;18278:248;;;:::o;18532:419::-;18698:4;18736:2;18725:9;18721:18;18713:26;;18785:9;18779:4;18775:20;18771:1;18760:9;18756:17;18749:47;18813:131;18939:4;18813:131;:::i;:::-;18805:139;;18703:248;;;:::o;18957:419::-;19123:4;19161:2;19150:9;19146:18;19138:26;;19210:9;19204:4;19200:20;19196:1;19185:9;19181:17;19174:47;19238:131;19364:4;19238:131;:::i;:::-;19230:139;;19128:248;;;:::o;19382:419::-;19548:4;19586:2;19575:9;19571:18;19563:26;;19635:9;19629:4;19625:20;19621:1;19610:9;19606:17;19599:47;19663:131;19789:4;19663:131;:::i;:::-;19655:139;;19553:248;;;:::o;19807:419::-;19973:4;20011:2;20000:9;19996:18;19988:26;;20060:9;20054:4;20050:20;20046:1;20035:9;20031:17;20024:47;20088:131;20214:4;20088:131;:::i;:::-;20080:139;;19978:248;;;:::o;20232:419::-;20398:4;20436:2;20425:9;20421:18;20413:26;;20485:9;20479:4;20475:20;20471:1;20460:9;20456:17;20449:47;20513:131;20639:4;20513:131;:::i;:::-;20505:139;;20403:248;;;:::o;20657:222::-;20750:4;20788:2;20777:9;20773:18;20765:26;;20801:71;20869:1;20858:9;20854:17;20845:6;20801:71;:::i;:::-;20755:124;;;;:::o;20885:483::-;21056:4;21094:2;21083:9;21079:18;21071:26;;21107:71;21175:1;21164:9;21160:17;21151:6;21107:71;:::i;:::-;21225:9;21219:4;21215:20;21210:2;21199:9;21195:18;21188:48;21253:108;21356:4;21347:6;21253:108;:::i;:::-;21245:116;;21061:307;;;;;:::o;21374:831::-;21637:4;21675:3;21664:9;21660:19;21652:27;;21689:71;21757:1;21746:9;21742:17;21733:6;21689:71;:::i;:::-;21770:80;21846:2;21835:9;21831:18;21822:6;21770:80;:::i;:::-;21897:9;21891:4;21887:20;21882:2;21871:9;21867:18;21860:48;21925:108;22028:4;22019:6;21925:108;:::i;:::-;21917:116;;22043:72;22111:2;22100:9;22096:18;22087:6;22043:72;:::i;:::-;22125:73;22193:3;22182:9;22178:19;22169:6;22125:73;:::i;:::-;21642:563;;;;;;;;:::o;22211:214::-;22300:4;22338:2;22327:9;22323:18;22315:26;;22351:67;22415:1;22404:9;22400:17;22391:6;22351:67;:::i;:::-;22305:120;;;;:::o;22431:132::-;22498:4;22521:3;22513:11;;22551:4;22546:3;22542:14;22534:22;;22503:60;;;:::o;22569:114::-;22636:6;22670:5;22664:12;22654:22;;22643:40;;;:::o;22689:99::-;22741:6;22775:5;22769:12;22759:22;;22748:40;;;:::o;22794:113::-;22864:4;22896;22891:3;22887:14;22879:22;;22869:38;;;:::o;22913:184::-;23012:11;23046:6;23041:3;23034:19;23086:4;23081:3;23077:14;23062:29;;23024:73;;;;:::o;23103:169::-;23187:11;23221:6;23216:3;23209:19;23261:4;23256:3;23252:14;23237:29;;23199:73;;;;:::o;23278:305::-;23318:3;23337:20;23355:1;23337:20;:::i;:::-;23332:25;;23371:20;23389:1;23371:20;:::i;:::-;23366:25;;23525:1;23457:66;23453:74;23450:1;23447:81;23444:2;;;23531:18;;:::i;:::-;23444:2;23575:1;23572;23568:9;23561:16;;23322:261;;;;:::o;23589:185::-;23629:1;23646:20;23664:1;23646:20;:::i;:::-;23641:25;;23680:20;23698:1;23680:20;:::i;:::-;23675:25;;23719:1;23709:2;;23724:18;;:::i;:::-;23709:2;23766:1;23763;23759:9;23754:14;;23631:143;;;;:::o;23780:348::-;23820:7;23843:20;23861:1;23843:20;:::i;:::-;23838:25;;23877:20;23895:1;23877:20;:::i;:::-;23872:25;;24065:1;23997:66;23993:74;23990:1;23987:81;23982:1;23975:9;23968:17;23964:105;23961:2;;;24072:18;;:::i;:::-;23961:2;24120:1;24117;24113:9;24102:20;;23828:300;;;;:::o;24134:191::-;24174:4;24194:20;24212:1;24194:20;:::i;:::-;24189:25;;24228:20;24246:1;24228:20;:::i;:::-;24223:25;;24267:1;24264;24261:8;24258:2;;;24272:18;;:::i;:::-;24258:2;24317:1;24314;24310:9;24302:17;;24179:146;;;;:::o;24331:96::-;24368:7;24397:24;24415:5;24397:24;:::i;:::-;24386:35;;24376:51;;;:::o;24433:104::-;24478:7;24507:24;24525:5;24507:24;:::i;:::-;24496:35;;24486:51;;;:::o;24543:90::-;24577:7;24620:5;24613:13;24606:21;24595:32;;24585:48;;;:::o;24639:126::-;24676:7;24716:42;24709:5;24705:54;24694:65;;24684:81;;;:::o;24771:77::-;24808:7;24837:5;24826:16;;24816:32;;;:::o;24854:86::-;24889:7;24929:4;24922:5;24918:16;24907:27;;24897:43;;;:::o;24946:180::-;25023:9;25056:64;25114:5;25056:64;:::i;:::-;25043:77;;25033:93;;;:::o;25132:140::-;25209:9;25242:24;25260:5;25242:24;:::i;:::-;25229:37;;25219:53;;;:::o;25278:121::-;25336:9;25369:24;25387:5;25369:24;:::i;:::-;25356:37;;25346:53;;;:::o;25405:307::-;25473:1;25483:113;25497:6;25494:1;25491:13;25483:113;;;25582:1;25577:3;25573:11;25567:18;25563:1;25558:3;25554:11;25547:39;25519:2;25516:1;25512:10;25507:15;;25483:113;;;25614:6;25611:1;25608:13;25605:2;;;25694:1;25685:6;25680:3;25676:16;25669:27;25605:2;25454:258;;;;:::o;25718:320::-;25762:6;25799:1;25793:4;25789:12;25779:22;;25846:1;25840:4;25836:12;25867:18;25857:2;;25923:4;25915:6;25911:17;25901:27;;25857:2;25985;25977:6;25974:14;25954:18;25951:38;25948:2;;;26004:18;;:::i;:::-;25948:2;25769:269;;;;:::o;26044:233::-;26083:3;26106:24;26124:5;26106:24;:::i;:::-;26097:33;;26152:66;26145:5;26142:77;26139:2;;;26222:18;;:::i;:::-;26139:2;26269:1;26262:5;26258:13;26251:20;;26087:190;;;:::o;26283:180::-;26331:77;26328:1;26321:88;26428:4;26425:1;26418:15;26452:4;26449:1;26442:15;26469:180;26517:77;26514:1;26507:88;26614:4;26611:1;26604:15;26638:4;26635:1;26628:15;26655:180;26703:77;26700:1;26693:88;26800:4;26797:1;26790:15;26824:4;26821:1;26814:15;26841:102;26882:6;26933:2;26929:7;26924:2;26917:5;26913:14;26909:28;26899:38;;26889:54;;;:::o;26949:222::-;27089:34;27085:1;27077:6;27073:14;27066:58;27158:5;27153:2;27145:6;27141:15;27134:30;27055:116;:::o;27177:229::-;27317:34;27313:1;27305:6;27301:14;27294:58;27386:12;27381:2;27373:6;27369:15;27362:37;27283:123;:::o;27412:225::-;27552:34;27548:1;27540:6;27536:14;27529:58;27621:8;27616:2;27608:6;27604:15;27597:33;27518:119;:::o;27643:221::-;27783:34;27779:1;27771:6;27767:14;27760:58;27852:4;27847:2;27839:6;27835:15;27828:29;27749:115;:::o;27870:177::-;28010:29;28006:1;27998:6;27994:14;27987:53;27976:71;:::o;28053:177::-;28193:29;28189:1;28181:6;28177:14;28170:53;28159:71;:::o;28236:181::-;28376:33;28372:1;28364:6;28360:14;28353:57;28342:75;:::o;28423:227::-;28563:34;28559:1;28551:6;28547:14;28540:58;28632:10;28627:2;28619:6;28615:15;28608:35;28529:121;:::o;28656:220::-;28796:34;28792:1;28784:6;28780:14;28773:58;28865:3;28860:2;28852:6;28848:15;28841:28;28762:114;:::o;28882:182::-;29022:34;29018:1;29010:6;29006:14;28999:58;28988:76;:::o;29070:228::-;29210:34;29206:1;29198:6;29194:14;29187:58;29279:11;29274:2;29266:6;29262:15;29255:36;29176:122;:::o;29304:224::-;29444:34;29440:1;29432:6;29428:14;29421:58;29513:7;29508:2;29500:6;29496:15;29489:32;29410:118;:::o;29534:223::-;29674:34;29670:1;29662:6;29658:14;29651:58;29743:6;29738:2;29730:6;29726:15;29719:31;29640:117;:::o;29763:181::-;29903:33;29899:1;29891:6;29887:14;29880:57;29869:75;:::o;29950:231::-;30090:34;30086:1;30078:6;30074:14;30067:58;30159:14;30154:2;30146:6;30142:15;30135:39;30056:125;:::o;30187:222::-;30327:34;30323:1;30315:6;30311:14;30304:58;30396:5;30391:2;30383:6;30379:15;30372:30;30293:116;:::o;30415:122::-;30488:24;30506:5;30488:24;:::i;:::-;30481:5;30478:35;30468:2;;30527:1;30524;30517:12;30468:2;30458:79;:::o;30543:116::-;30613:21;30628:5;30613:21;:::i;:::-;30606:5;30603:32;30593:2;;30649:1;30646;30639:12;30593:2;30583:76;:::o;30665:122::-;30738:24;30756:5;30738:24;:::i;:::-;30731:5;30728:35;30718:2;;30777:1;30774;30767:12;30718:2;30708:79;:::o

Swarm Source

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