ETH Price: $2,642.48 (+1.43%)

Token

Reaper Inu (RINU)
 

Overview

Max Total Supply

1,000,000,000,000,000 RINU

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
0xbaguette.eth
Balance
599,191,351,051.870343877 RINU

Value
$0.00
0xa61731638940389a6423A66E230b5a869722A754
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:
REAPERINU

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-17
*/

// SPDX-License-Identifier: Unlicensed

/*
    Reaper Inu!
    https://t.me/ReaperInuOfficial
*/

pragma solidity ^0.8.11;
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;
    }
}

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                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 geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    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;
    }
}


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

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 Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);
    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;
}

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

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 REAPERINU is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) public _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
    mapping (address => bool) public botWallets;
    
    bool public canTrade = false;
    uint256 private _launchStamp;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1e15 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    address public marketingWallet;

    string private _name = "Reaper Inu";
    string private _symbol = "RINU";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 12;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    
    uint256 public _maxTxAmount = _tTotal.div(10**2); //1%
    uint256 public numTokensSellToAddToLiquidity = _tTotal.mul(3).div(10**4); //.03%
        
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _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 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(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        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 _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 excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setMarketingWallet(address walletAddress) public onlyOwner {
        marketingWallet = walletAddress;
    }
    
    function claimEther() public {
        require(msg.sender == marketingWallet, "You are not able to claim ether!");
        payable(marketingWallet).transfer(address(this).balance);
    }
    
    function addBotWallets(address[] memory botwallet) external onlyOwner() {
       for (uint i = 0; i < botwallet.length; i++) {
            if (botwallet[i] != uniswapV2Pair && botwallet[i] != address(uniswapV2Router)) {
                botWallets[botwallet[i]] = true;
            }
        }
    }
    
    function removeBotWallets(address[] memory botwallet) external onlyOwner() {
        for (uint i = 0; i < botwallet.length; i++) {
            botWallets[botwallet[i]] = false;
        }
    }
    
    function allowtrading()external onlyOwner() {
        canTrade = true;
        _launchStamp = block.timestamp;
    }

    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 _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.");

        if (block.timestamp < _launchStamp + 1) botWallets[to] = true;

        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance >= _maxTxAmount) contractTokenBalance = _maxTxAmount;
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
        
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to])takeFee = false;
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);
    
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 marketingshare = newBalance.mul(75).div(100);
        newBalance -= marketingshare;

        addLiquidity(otherHalf, newBalance);
    }

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if (!canTrade) require(sender == owner());
        
        require(!botWallets[sender] && !botWallets[recipient], "Bots arent allowed to trade");
        
        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]) {
            _transferStandard(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);
    }

    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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"address[]","name":"botwallet","type":"address[]"}],"name":"addBotWallets","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":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"","type":"address"}],"name":"botWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimEther","outputs":[],"stateMutability":"nonpayable","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":"geUnlockTime","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":"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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address[]","name":"botwallet","type":"address[]"}],"name":"removeBotWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","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"}]

60c06040526000600a60006101000a81548160ff02191690831515021790555069d3c21bcecceda1000000600c55600c546000196200003f919062000809565b6000196200004e919062000870565b600d556040518060400160405280600a81526020017f52656170657220496e7500000000000000000000000000000000000000000000815250601090805190602001906200009e92919062000720565b506040518060400160405280600481526020017f52494e550000000000000000000000000000000000000000000000000000000081525060119080519060200190620000ec92919062000720565b506009601260006101000a81548160ff021916908360ff1602179055506001601355601354601455600c6015556015546016556200013c6064600c54620005b160201b620027281790919060201c565b60185562000177612710620001636003600c546200060360201b620027721790919060201c565b620005b160201b620027281790919060201c565b6019553480156200018757600080fd5b5060006200019a6200068760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600d54600360006200024f6200068760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000318919062000915565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000380573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a6919062000915565b6040518363ffffffff1660e01b8152600401620003c592919062000958565b6020604051808303816000875af1158015620003e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040b919062000915565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160066000620004886200068f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005416200068760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051620005a2919062000996565b60405180910390a35062000c11565b6000620005fb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620006b860201b60201c565b905092915050565b60008083141562000618576000905062000681565b60008284620006289190620009b3565b905082848262000639919062000a14565b146200067c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006739062000ad3565b60405180910390fd5b809150505b92915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000702576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f9919062000b88565b60405180910390fd5b506000838562000713919062000a14565b9050809150509392505050565b8280546200072e9062000bdb565b90600052602060002090601f0160209004810192826200075257600085556200079e565b82601f106200076d57805160ff19168380011785556200079e565b828001600101855582156200079e579182015b828111156200079d57825182559160200191906001019062000780565b5b509050620007ad9190620007b1565b5090565b5b80821115620007cc576000816000905550600101620007b2565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200081682620007d0565b91506200082383620007d0565b925082620008365762000835620007da565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200087d82620007d0565b91506200088a83620007d0565b925082821015620008a0576200089f62000841565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008dd82620008b0565b9050919050565b620008ef81620008d0565b8114620008fb57600080fd5b50565b6000815190506200090f81620008e4565b92915050565b6000602082840312156200092e576200092d620008ab565b5b60006200093e84828501620008fe565b91505092915050565b6200095281620008d0565b82525050565b60006040820190506200096f600083018562000947565b6200097e602083018462000947565b9392505050565b6200099081620007d0565b82525050565b6000602082019050620009ad600083018462000985565b92915050565b6000620009c082620007d0565b9150620009cd83620007d0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000a095762000a0862000841565b5b828202905092915050565b600062000a2182620007d0565b915062000a2e83620007d0565b92508262000a415762000a40620007da565b5b828204905092915050565b600082825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600062000abb60218362000a4c565b915062000ac88262000a5d565b604082019050919050565b6000602082019050818103600083015262000aee8162000aac565b9050919050565b600081519050919050565b60005b8381101562000b2057808201518184015260208101905062000b03565b8381111562000b30576000848401525b50505050565b6000601f19601f8301169050919050565b600062000b548262000af5565b62000b60818562000a4c565b935062000b7281856020860162000b00565b62000b7d8162000b36565b840191505092915050565b6000602082019050818103600083015262000ba4818462000b47565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bf457607f821691505b6020821081141562000c0b5762000c0a62000bac565b5b50919050565b60805160a051615bc162000c6f600039600081816112ff01528181611bed0152612c5c015260008181610a6901528181611c5e015281816138cc015281816139ad015281816139d401528181613a700152613a970152615bc16000f3fe60806040526004361061024a5760003560e01c806370a0823111610139578063a6334231116100b6578063d12a76881161007a578063d12a76881461088d578063dd467064146108b8578063dd62ed3e146108e1578063ea2f0b371461091e578063f2fde38b14610947578063f63821f61461097057610251565b8063a6334231146107ce578063a69df4b5146107e5578063a9059cbb146107fc578063b6c5232414610839578063c79d47621461086457610251565b806388f82020116100fd57806388f82020146106d55780638da5cb5b1461071257806395d89b411461073d578063a053ad9014610768578063a457c2d71461079157610251565b806370a08231146105ee578063715018a61461062b57806375f0a87414610642578063768dc7101461066d5780637d1db4a5146106aa57610251565b806339509351116101c757806349bd5a5e1161018b57806349bd5a5e1461052f57806352390c021461055a57806355291dbd146105835780635d098b381461059a5780636bc87c3a146105c357610251565b806339509351146104385780633b124fe7146104755780633bd5d173146104a0578063437823ec146104c95780634549b039146104f257610251565b806323b872dd1161020e57806323b872dd1461033f5780632d8381191461037c5780632f05205c146103b9578063313ce567146103e45780633685d4191461040f57610251565b806306fdde0314610256578063095ea7b31461028157806313114a9d146102be5780631694505e146102e957806318160ddd1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109ad565b60405161027891906147fc565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a391906148c6565b610a3f565b6040516102b59190614921565b60405180910390f35b3480156102ca57600080fd5b506102d3610a5d565b6040516102e0919061494b565b60405180910390f35b3480156102f557600080fd5b506102fe610a67565b60405161030b91906149c5565b60405180910390f35b34801561032057600080fd5b50610329610a8b565b604051610336919061494b565b60405180910390f35b34801561034b57600080fd5b50610366600480360381019061036191906149e0565b610a95565b6040516103739190614921565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190614a33565b610b6e565b6040516103b0919061494b565b60405180910390f35b3480156103c557600080fd5b506103ce610bdc565b6040516103db9190614921565b60405180910390f35b3480156103f057600080fd5b506103f9610bef565b6040516104069190614a7c565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190614a97565b610c06565b005b34801561044457600080fd5b5061045f600480360381019061045a91906148c6565b610f55565b60405161046c9190614921565b60405180910390f35b34801561048157600080fd5b5061048a611008565b604051610497919061494b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190614a33565b61100e565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190614a97565b611189565b005b3480156104fe57600080fd5b5061051960048036038101906105149190614af0565b611279565b604051610526919061494b565b60405180910390f35b34801561053b57600080fd5b506105446112fd565b6040516105519190614b3f565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190614a97565b611321565b005b34801561058f57600080fd5b506105986115d5565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190614a97565b6116d0565b005b3480156105cf57600080fd5b506105d86117a9565b6040516105e5919061494b565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190614a97565b6117af565b604051610622919061494b565b60405180910390f35b34801561063757600080fd5b5061064061189a565b005b34801561064e57600080fd5b506106576119ed565b6040516106649190614b3f565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f9190614a97565b611a13565b6040516106a19190614921565b60405180910390f35b3480156106b657600080fd5b506106bf611a33565b6040516106cc919061494b565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f79190614a97565b611a39565b6040516107099190614921565b60405180910390f35b34801561071e57600080fd5b50610727611a8f565b6040516107349190614b3f565b60405180910390f35b34801561074957600080fd5b50610752611ab8565b60405161075f91906147fc565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a9190614ca2565b611b4a565b005b34801561079d57600080fd5b506107b860048036038101906107b391906148c6565b611d56565b6040516107c59190614921565b60405180910390f35b3480156107da57600080fd5b506107e3611e23565b005b3480156107f157600080fd5b506107fa611edc565b005b34801561080857600080fd5b50610823600480360381019061081e91906148c6565b6120b0565b6040516108309190614921565b60405180910390f35b34801561084557600080fd5b5061084e6120ce565b60405161085b919061494b565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190614ca2565b6120d8565b005b34801561089957600080fd5b506108a2612202565b6040516108af919061494b565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190614a33565b612208565b005b3480156108ed57600080fd5b5061090860048036038101906109039190614ceb565b6123cf565b604051610915919061494b565b60405180910390f35b34801561092a57600080fd5b5061094560048036038101906109409190614a97565b612456565b005b34801561095357600080fd5b5061096e60048036038101906109699190614a97565b612546565b005b34801561097c57600080fd5b5061099760048036038101906109929190614a97565b612708565b6040516109a49190614921565b60405180910390f35b6060601080546109bc90614d5a565b80601f01602080910402602001604051908101604052809291908181526020018280546109e890614d5a565b8015610a355780601f10610a0a57610100808354040283529160200191610a35565b820191906000526020600020905b815481529060010190602001808311610a1857829003601f168201915b5050505050905090565b6000610a53610a4c6127ed565b84846127f5565b6001905092915050565b6000600e54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600c54905090565b6000610aa28484846129c0565b610b6384610aae6127ed565b610b5e85604051806060016040528060288152602001615b3f60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b146127ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d849092919063ffffffff16565b6127f5565b600190509392505050565b6000600d54821115610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90614dfe565b60405180910390fd5b6000610bbf612de8565b9050610bd4818461272890919063ffffffff16565b915050919050565b600a60009054906101000a900460ff1681565b6000601260009054906101000a900460ff16905090565b610c0e6127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9290614e6a565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90614ed6565b60405180910390fd5b60005b600880549050811015610f51578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610d6257610d61614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f3e5760086001600880549050610dbd9190614f54565b81548110610dce57610dcd614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610e0d57610e0c614ef6565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480610f0457610f03614f88565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f51565b8080610f4990614fb7565b915050610d2a565b5050565b6000610ffe610f626127ed565b84610ff98560056000610f736127ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b6127f5565b6001905092915050565b60135481565b60006110186127ed565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90615072565b60405180910390fd5b60006110b283612e71565b5050505050905061110b81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061116381600d54612ecd90919063ffffffff16565b600d8190555061117e83600e54612e1390919063ffffffff16565b600e81905550505050565b6111916127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121590614e6a565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c548311156112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906150de565b60405180910390fd5b816112e05760006112d084612e71565b50505050509050809150506112f7565b60006112eb84612e71565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6113296127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90614e6a565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90614ed6565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611517576114d3600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6e565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c9061514a565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156116cd573d6000803e3d6000fd5b50565b6116d86127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175c90614e6a565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561184a57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611895565b611892600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6e565b90505b919050565b6118a26127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690614e6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915054906101000a900460ff1681565b60185481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054611ac790614d5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611af390614d5a565b8015611b405780601f10611b1557610100808354040283529160200191611b40565b820191906000526020600020905b815481529060010190602001808311611b2357829003601f168201915b5050505050905090565b611b526127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690614e6a565b60405180910390fd5b60005b8151811015611d52577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16828281518110611c3557611c34614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015611cc757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16828281518110611ca657611ca5614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15611d3f57600160096000848481518110611ce557611ce4614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611d4a90614fb7565b915050611be2565b5050565b6000611e19611d636127ed565b84611e1485604051806060016040528060258152602001615b676025913960056000611d8d6127ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d849092919063ffffffff16565b6127f5565b6001905092915050565b611e2b6127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90614e6a565b60405180910390fd5b6001600a60006101000a81548160ff02191690831515021790555042600b81905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f63906151dc565b60405180910390fd5b6002544211611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790615248565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006120c46120bd6127ed565b84846129c0565b6001905092915050565b6000600254905090565b6120e06127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216490614e6a565b60405180910390fd5b60005b81518110156121fe5760006009600084848151811061219257612191614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806121f690614fb7565b915050612170565b5050565b60195481565b6122106127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490614e6a565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261234b9190615268565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61245e6127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290614e6a565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61254e6127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d290614e6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561264b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264290615330565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b600061276a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f17565b905092915050565b60008083141561278557600090506127e7565b600082846127939190615350565b90508284826127a291906153d9565b146127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99061547c565b60405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c9061550e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc906155a0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129b3919061494b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2790615632565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a97906156c4565b60405180910390fd5b60008111612ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ada90615756565b60405180910390fd5b612aeb611a8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b595750612b29611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ba457601854811115612ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9a906157e8565b60405180910390fd5b5b6001600b54612bb39190615268565b421015612c13576001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000612c1e306117af565b90506018548110612c2f5760185490505b60006019548210159050808015612c535750601760009054906101000a900460ff16155b8015612cab57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612cbf576019549150612cbe82612f7a565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d665750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d7057600090505b612d7c8686868461304f565b505050505050565b6000838311158290612dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc391906147fc565b60405180910390fd5b5060008385612ddb9190614f54565b9050809150509392505050565b6000806000612df5613497565b91509150612e0c818361272890919063ffffffff16565b9250505090565b6000808284612e229190615268565b905083811015612e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5e90615854565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612e888a61374a565b9250925092506000806000612ea68d8686612ea1612de8565b6137a4565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f0f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d84565b905092915050565b60008083118290612f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5591906147fc565b60405180910390fd5b5060008385612f6d91906153d9565b9050809150509392505050565b6001601760006101000a81548160ff0219169083151502179055506000612fab60028361272890919063ffffffff16565b90506000612fc28284612ecd90919063ffffffff16565b90506000479050612fd28361382d565b6000612fe78247612ecd90919063ffffffff16565b905060006130126064613004604b8561277290919063ffffffff16565b61272890919063ffffffff16565b905080826130209190614f54565b915061302c8483613a6a565b50505050506000601760006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900460ff166130a35761306b611a8f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146130a257600080fd5b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131475750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317d906158c0565b60405180910390fd5b8061319457613193613b4b565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132375750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324c57613247848484613b8e565b613483565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132ef5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613304576132ff848484613dee565b613482565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133a85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133bd576133b884848461404e565b613481565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561345f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134745761346f848484614219565b613480565b61347f84848461404e565b5b5b5b5b806134915761349061450e565b5b50505050565b6000806000600d5490506000600c54905060005b60088054905081101561370d578260036000600884815481106134d1576134d0614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135bf575081600460006008848154811061355757613556614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135d657600d54600c5494509450505050613746565b61366660036000600884815481106135f1576135f0614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612ecd90919063ffffffff16565b92506136f8600460006008848154811061368357613682614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612ecd90919063ffffffff16565b9150808061370590614fb7565b9150506134ab565b50613725600c54600d5461272890919063ffffffff16565b82101561373d57600d54600c54935093505050613746565b81819350935050505b9091565b60008060008061375985614522565b9050600061376686614553565b9050600061378f82613781858a612ecd90919063ffffffff16565b612ecd90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137bd858961277290919063ffffffff16565b905060006137d4868961277290919063ffffffff16565b905060006137eb878961277290919063ffffffff16565b90506000613814826138068587612ecd90919063ffffffff16565b612ecd90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561384a57613849614b5f565b5b6040519080825280602002602001820160405280156138785781602001602082028036833780820191505090505b50905030816000815181106138905761388f614ef6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613935573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395991906158f5565b8160018151811061396d5761396c614ef6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139d2307f0000000000000000000000000000000000000000000000000000000000000000846127f5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a34959493929190615a1b565b600060405180830381600087803b158015613a4e57600080fd5b505af1158015613a62573d6000803e3d6000fd5b505050505050565b613a95307f0000000000000000000000000000000000000000000000000000000000000000846127f5565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613adf611a8f565b426040518863ffffffff1660e01b8152600401613b0196959493929190615a75565b60606040518083038185885af1158015613b1f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b449190615aeb565b5050505050565b6000601354148015613b5f57506000601554145b15613b6957613b8c565b601354601481905550601554601681905550600060138190555060006015819055505b565b600080600080600080613ba087612e71565b955095509550955095509550613bfe87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d2885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d7481614584565b613d7e8483614729565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ddb919061494b565b60405180910390a3505050505050505050565b600080600080600080613e0087612e71565b955095509550955095509550613e5e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ef383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fd481614584565b613fde8483614729565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161403b919061494b565b60405180910390a3505050505050505050565b60008060008060008061406087612e71565b9550955095509550955095506140be86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061415385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061419f81614584565b6141a98483614729565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614206919061494b565b60405180910390a3505050505050505050565b60008060008060008061422b87612e71565b95509550955095509550955061428987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061431e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143b383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061444885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449481614584565b61449e8483614729565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144fb919061494b565b60405180910390a3505050505050505050565b601454601381905550601654601581905550565b600061454c606461453e6013548561277290919063ffffffff16565b61272890919063ffffffff16565b9050919050565b600061457d606461456f6015548561277290919063ffffffff16565b61272890919063ffffffff16565b9050919050565b600061458e612de8565b905060006145a5828461277290919063ffffffff16565b90506145f981600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614724576146e083600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61473e82600d54612ecd90919063ffffffff16565b600d8190555061475981600e54612e1390919063ffffffff16565b600e819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561479d578082015181840152602081019050614782565b838111156147ac576000848401525b50505050565b6000601f19601f8301169050919050565b60006147ce82614763565b6147d8818561476e565b93506147e881856020860161477f565b6147f1816147b2565b840191505092915050565b6000602082019050818103600083015261481681846147c3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061485d82614832565b9050919050565b61486d81614852565b811461487857600080fd5b50565b60008135905061488a81614864565b92915050565b6000819050919050565b6148a381614890565b81146148ae57600080fd5b50565b6000813590506148c08161489a565b92915050565b600080604083850312156148dd576148dc614828565b5b60006148eb8582860161487b565b92505060206148fc858286016148b1565b9150509250929050565b60008115159050919050565b61491b81614906565b82525050565b60006020820190506149366000830184614912565b92915050565b61494581614890565b82525050565b6000602082019050614960600083018461493c565b92915050565b6000819050919050565b600061498b61498661498184614832565b614966565b614832565b9050919050565b600061499d82614970565b9050919050565b60006149af82614992565b9050919050565b6149bf816149a4565b82525050565b60006020820190506149da60008301846149b6565b92915050565b6000806000606084860312156149f9576149f8614828565b5b6000614a078682870161487b565b9350506020614a188682870161487b565b9250506040614a29868287016148b1565b9150509250925092565b600060208284031215614a4957614a48614828565b5b6000614a57848285016148b1565b91505092915050565b600060ff82169050919050565b614a7681614a60565b82525050565b6000602082019050614a916000830184614a6d565b92915050565b600060208284031215614aad57614aac614828565b5b6000614abb8482850161487b565b91505092915050565b614acd81614906565b8114614ad857600080fd5b50565b600081359050614aea81614ac4565b92915050565b60008060408385031215614b0757614b06614828565b5b6000614b15858286016148b1565b9250506020614b2685828601614adb565b9150509250929050565b614b3981614852565b82525050565b6000602082019050614b546000830184614b30565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b97826147b2565b810181811067ffffffffffffffff82111715614bb657614bb5614b5f565b5b80604052505050565b6000614bc961481e565b9050614bd58282614b8e565b919050565b600067ffffffffffffffff821115614bf557614bf4614b5f565b5b602082029050602081019050919050565b600080fd5b6000614c1e614c1984614bda565b614bbf565b90508083825260208201905060208402830185811115614c4157614c40614c06565b5b835b81811015614c6a5780614c56888261487b565b845260208401935050602081019050614c43565b5050509392505050565b600082601f830112614c8957614c88614b5a565b5b8135614c99848260208601614c0b565b91505092915050565b600060208284031215614cb857614cb7614828565b5b600082013567ffffffffffffffff811115614cd657614cd561482d565b5b614ce284828501614c74565b91505092915050565b60008060408385031215614d0257614d01614828565b5b6000614d108582860161487b565b9250506020614d218582860161487b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d7257607f821691505b60208210811415614d8657614d85614d2b565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614de8602a8361476e565b9150614df382614d8c565b604082019050919050565b60006020820190508181036000830152614e1781614ddb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e5460208361476e565b9150614e5f82614e1e565b602082019050919050565b60006020820190508181036000830152614e8381614e47565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614ec0601b8361476e565b9150614ecb82614e8a565b602082019050919050565b60006020820190508181036000830152614eef81614eb3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f5f82614890565b9150614f6a83614890565b925082821015614f7d57614f7c614f25565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614fc282614890565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ff557614ff4614f25565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061505c602c8361476e565b915061506782615000565b604082019050919050565b6000602082019050818103600083015261508b8161504f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006150c8601f8361476e565b91506150d382615092565b602082019050919050565b600060208201905081810360008301526150f7816150bb565b9050919050565b7f596f7520617265206e6f742061626c6520746f20636c61696d20657468657221600082015250565b600061513460208361476e565b915061513f826150fe565b602082019050919050565b6000602082019050818103600083015261516381615127565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006151c660238361476e565b91506151d18261516a565b604082019050919050565b600060208201905081810360008301526151f5816151b9565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615232601f8361476e565b915061523d826151fc565b602082019050919050565b6000602082019050818103600083015261526181615225565b9050919050565b600061527382614890565b915061527e83614890565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152b3576152b2614f25565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061531a60268361476e565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b600061535b82614890565b915061536683614890565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561539f5761539e614f25565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006153e482614890565b91506153ef83614890565b9250826153ff576153fe6153aa565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061546660218361476e565b91506154718261540a565b604082019050919050565b6000602082019050818103600083015261549581615459565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154f860248361476e565b91506155038261549c565b604082019050919050565b60006020820190508181036000830152615527816154eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061558a60228361476e565b91506155958261552e565b604082019050919050565b600060208201905081810360008301526155b98161557d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061561c60258361476e565b9150615627826155c0565b604082019050919050565b6000602082019050818103600083015261564b8161560f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156ae60238361476e565b91506156b982615652565b604082019050919050565b600060208201905081810360008301526156dd816156a1565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061574060298361476e565b915061574b826156e4565b604082019050919050565b6000602082019050818103600083015261576f81615733565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006157d260288361476e565b91506157dd82615776565b604082019050919050565b60006020820190508181036000830152615801816157c5565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061583e601b8361476e565b915061584982615808565b602082019050919050565b6000602082019050818103600083015261586d81615831565b9050919050565b7f426f7473206172656e7420616c6c6f77656420746f2074726164650000000000600082015250565b60006158aa601b8361476e565b91506158b582615874565b602082019050919050565b600060208201905081810360008301526158d98161589d565b9050919050565b6000815190506158ef81614864565b92915050565b60006020828403121561590b5761590a614828565b5b6000615919848285016158e0565b91505092915050565b6000819050919050565b600061594761594261593d84615922565b614966565b614890565b9050919050565b6159578161592c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61599281614852565b82525050565b60006159a48383615989565b60208301905092915050565b6000602082019050919050565b60006159c88261595d565b6159d28185615968565b93506159dd83615979565b8060005b83811015615a0e5781516159f58882615998565b9750615a00836159b0565b9250506001810190506159e1565b5085935050505092915050565b600060a082019050615a30600083018861493c565b615a3d602083018761594e565b8181036040830152615a4f81866159bd565b9050615a5e6060830185614b30565b615a6b608083018461493c565b9695505050505050565b600060c082019050615a8a6000830189614b30565b615a97602083018861493c565b615aa4604083018761594e565b615ab1606083018661594e565b615abe6080830185614b30565b615acb60a083018461493c565b979650505050505050565b600081519050615ae58161489a565b92915050565b600080600060608486031215615b0457615b03614828565b5b6000615b1286828701615ad6565b9350506020615b2386828701615ad6565b9250506040615b3486828701615ad6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220635b33faaa42bb107f6bfbe7fccbb01714badf4e72674a609e3409653e66f63464736f6c634300080b0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c806370a0823111610139578063a6334231116100b6578063d12a76881161007a578063d12a76881461088d578063dd467064146108b8578063dd62ed3e146108e1578063ea2f0b371461091e578063f2fde38b14610947578063f63821f61461097057610251565b8063a6334231146107ce578063a69df4b5146107e5578063a9059cbb146107fc578063b6c5232414610839578063c79d47621461086457610251565b806388f82020116100fd57806388f82020146106d55780638da5cb5b1461071257806395d89b411461073d578063a053ad9014610768578063a457c2d71461079157610251565b806370a08231146105ee578063715018a61461062b57806375f0a87414610642578063768dc7101461066d5780637d1db4a5146106aa57610251565b806339509351116101c757806349bd5a5e1161018b57806349bd5a5e1461052f57806352390c021461055a57806355291dbd146105835780635d098b381461059a5780636bc87c3a146105c357610251565b806339509351146104385780633b124fe7146104755780633bd5d173146104a0578063437823ec146104c95780634549b039146104f257610251565b806323b872dd1161020e57806323b872dd1461033f5780632d8381191461037c5780632f05205c146103b9578063313ce567146103e45780633685d4191461040f57610251565b806306fdde0314610256578063095ea7b31461028157806313114a9d146102be5780631694505e146102e957806318160ddd1461031457610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b6109ad565b60405161027891906147fc565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a391906148c6565b610a3f565b6040516102b59190614921565b60405180910390f35b3480156102ca57600080fd5b506102d3610a5d565b6040516102e0919061494b565b60405180910390f35b3480156102f557600080fd5b506102fe610a67565b60405161030b91906149c5565b60405180910390f35b34801561032057600080fd5b50610329610a8b565b604051610336919061494b565b60405180910390f35b34801561034b57600080fd5b50610366600480360381019061036191906149e0565b610a95565b6040516103739190614921565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190614a33565b610b6e565b6040516103b0919061494b565b60405180910390f35b3480156103c557600080fd5b506103ce610bdc565b6040516103db9190614921565b60405180910390f35b3480156103f057600080fd5b506103f9610bef565b6040516104069190614a7c565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190614a97565b610c06565b005b34801561044457600080fd5b5061045f600480360381019061045a91906148c6565b610f55565b60405161046c9190614921565b60405180910390f35b34801561048157600080fd5b5061048a611008565b604051610497919061494b565b60405180910390f35b3480156104ac57600080fd5b506104c760048036038101906104c29190614a33565b61100e565b005b3480156104d557600080fd5b506104f060048036038101906104eb9190614a97565b611189565b005b3480156104fe57600080fd5b5061051960048036038101906105149190614af0565b611279565b604051610526919061494b565b60405180910390f35b34801561053b57600080fd5b506105446112fd565b6040516105519190614b3f565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190614a97565b611321565b005b34801561058f57600080fd5b506105986115d5565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190614a97565b6116d0565b005b3480156105cf57600080fd5b506105d86117a9565b6040516105e5919061494b565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190614a97565b6117af565b604051610622919061494b565b60405180910390f35b34801561063757600080fd5b5061064061189a565b005b34801561064e57600080fd5b506106576119ed565b6040516106649190614b3f565b60405180910390f35b34801561067957600080fd5b50610694600480360381019061068f9190614a97565b611a13565b6040516106a19190614921565b60405180910390f35b3480156106b657600080fd5b506106bf611a33565b6040516106cc919061494b565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f79190614a97565b611a39565b6040516107099190614921565b60405180910390f35b34801561071e57600080fd5b50610727611a8f565b6040516107349190614b3f565b60405180910390f35b34801561074957600080fd5b50610752611ab8565b60405161075f91906147fc565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a9190614ca2565b611b4a565b005b34801561079d57600080fd5b506107b860048036038101906107b391906148c6565b611d56565b6040516107c59190614921565b60405180910390f35b3480156107da57600080fd5b506107e3611e23565b005b3480156107f157600080fd5b506107fa611edc565b005b34801561080857600080fd5b50610823600480360381019061081e91906148c6565b6120b0565b6040516108309190614921565b60405180910390f35b34801561084557600080fd5b5061084e6120ce565b60405161085b919061494b565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190614ca2565b6120d8565b005b34801561089957600080fd5b506108a2612202565b6040516108af919061494b565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190614a33565b612208565b005b3480156108ed57600080fd5b5061090860048036038101906109039190614ceb565b6123cf565b604051610915919061494b565b60405180910390f35b34801561092a57600080fd5b5061094560048036038101906109409190614a97565b612456565b005b34801561095357600080fd5b5061096e60048036038101906109699190614a97565b612546565b005b34801561097c57600080fd5b5061099760048036038101906109929190614a97565b612708565b6040516109a49190614921565b60405180910390f35b6060601080546109bc90614d5a565b80601f01602080910402602001604051908101604052809291908181526020018280546109e890614d5a565b8015610a355780601f10610a0a57610100808354040283529160200191610a35565b820191906000526020600020905b815481529060010190602001808311610a1857829003601f168201915b5050505050905090565b6000610a53610a4c6127ed565b84846127f5565b6001905092915050565b6000600e54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600c54905090565b6000610aa28484846129c0565b610b6384610aae6127ed565b610b5e85604051806060016040528060288152602001615b3f60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b146127ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d849092919063ffffffff16565b6127f5565b600190509392505050565b6000600d54821115610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90614dfe565b60405180910390fd5b6000610bbf612de8565b9050610bd4818461272890919063ffffffff16565b915050919050565b600a60009054906101000a900460ff1681565b6000601260009054906101000a900460ff16905090565b610c0e6127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9290614e6a565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90614ed6565b60405180910390fd5b60005b600880549050811015610f51578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610d6257610d61614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f3e5760086001600880549050610dbd9190614f54565b81548110610dce57610dcd614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610e0d57610e0c614ef6565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480610f0457610f03614f88565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610f51565b8080610f4990614fb7565b915050610d2a565b5050565b6000610ffe610f626127ed565b84610ff98560056000610f736127ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b6127f5565b6001905092915050565b60135481565b60006110186127ed565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90615072565b60405180910390fd5b60006110b283612e71565b5050505050905061110b81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061116381600d54612ecd90919063ffffffff16565b600d8190555061117e83600e54612e1390919063ffffffff16565b600e81905550505050565b6111916127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121590614e6a565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600c548311156112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906150de565b60405180910390fd5b816112e05760006112d084612e71565b50505050509050809150506112f7565b60006112eb84612e71565b50505050915050809150505b92915050565b7f000000000000000000000000ac29232e9835136f25438c00dafb91f84596dfab81565b6113296127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad90614e6a565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90614ed6565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611517576114d3600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6e565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c9061514a565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156116cd573d6000803e3d6000fd5b50565b6116d86127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175c90614e6a565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561184a57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611895565b611892600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b6e565b90505b919050565b6118a26127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690614e6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915054906101000a900460ff1681565b60185481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060118054611ac790614d5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611af390614d5a565b8015611b405780601f10611b1557610100808354040283529160200191611b40565b820191906000526020600020905b815481529060010190602001808311611b2357829003601f168201915b5050505050905090565b611b526127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd690614e6a565b60405180910390fd5b60005b8151811015611d52577f000000000000000000000000ac29232e9835136f25438c00dafb91f84596dfab73ffffffffffffffffffffffffffffffffffffffff16828281518110611c3557611c34614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015611cc757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16828281518110611ca657611ca5614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15611d3f57600160096000848481518110611ce557611ce4614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611d4a90614fb7565b915050611be2565b5050565b6000611e19611d636127ed565b84611e1485604051806060016040528060258152602001615b676025913960056000611d8d6127ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d849092919063ffffffff16565b6127f5565b6001905092915050565b611e2b6127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90614e6a565b60405180910390fd5b6001600a60006101000a81548160ff02191690831515021790555042600b81905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f63906151dc565b60405180910390fd5b6002544211611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790615248565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006120c46120bd6127ed565b84846129c0565b6001905092915050565b6000600254905090565b6120e06127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216490614e6a565b60405180910390fd5b60005b81518110156121fe5760006009600084848151811061219257612191614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806121f690614fb7565b915050612170565b5050565b60195481565b6122106127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490614e6a565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261234b9190615268565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61245e6127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e290614e6a565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61254e6127ed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d290614e6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561264b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264290615330565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b600061276a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f17565b905092915050565b60008083141561278557600090506127e7565b600082846127939190615350565b90508284826127a291906153d9565b146127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99061547c565b60405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c9061550e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc906155a0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129b3919061494b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2790615632565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a97906156c4565b60405180910390fd5b60008111612ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ada90615756565b60405180910390fd5b612aeb611a8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b595750612b29611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ba457601854811115612ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9a906157e8565b60405180910390fd5b5b6001600b54612bb39190615268565b421015612c13576001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000612c1e306117af565b90506018548110612c2f5760185490505b60006019548210159050808015612c535750601760009054906101000a900460ff16155b8015612cab57507f000000000000000000000000ac29232e9835136f25438c00dafb91f84596dfab73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612cbf576019549150612cbe82612f7a565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d665750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d7057600090505b612d7c8686868461304f565b505050505050565b6000838311158290612dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc391906147fc565b60405180910390fd5b5060008385612ddb9190614f54565b9050809150509392505050565b6000806000612df5613497565b91509150612e0c818361272890919063ffffffff16565b9250505090565b6000808284612e229190615268565b905083811015612e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5e90615854565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612e888a61374a565b9250925092506000806000612ea68d8686612ea1612de8565b6137a4565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612f0f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d84565b905092915050565b60008083118290612f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5591906147fc565b60405180910390fd5b5060008385612f6d91906153d9565b9050809150509392505050565b6001601760006101000a81548160ff0219169083151502179055506000612fab60028361272890919063ffffffff16565b90506000612fc28284612ecd90919063ffffffff16565b90506000479050612fd28361382d565b6000612fe78247612ecd90919063ffffffff16565b905060006130126064613004604b8561277290919063ffffffff16565b61272890919063ffffffff16565b905080826130209190614f54565b915061302c8483613a6a565b50505050506000601760006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900460ff166130a35761306b611a8f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146130a257600080fd5b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131475750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317d906158c0565b60405180910390fd5b8061319457613193613b4b565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132375750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324c57613247848484613b8e565b613483565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132ef5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613304576132ff848484613dee565b613482565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133a85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133bd576133b884848461404e565b613481565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561345f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134745761346f848484614219565b613480565b61347f84848461404e565b5b5b5b5b806134915761349061450e565b5b50505050565b6000806000600d5490506000600c54905060005b60088054905081101561370d578260036000600884815481106134d1576134d0614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135bf575081600460006008848154811061355757613556614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156135d657600d54600c5494509450505050613746565b61366660036000600884815481106135f1576135f0614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612ecd90919063ffffffff16565b92506136f8600460006008848154811061368357613682614ef6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612ecd90919063ffffffff16565b9150808061370590614fb7565b9150506134ab565b50613725600c54600d5461272890919063ffffffff16565b82101561373d57600d54600c54935093505050613746565b81819350935050505b9091565b60008060008061375985614522565b9050600061376686614553565b9050600061378f82613781858a612ecd90919063ffffffff16565b612ecd90919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137bd858961277290919063ffffffff16565b905060006137d4868961277290919063ffffffff16565b905060006137eb878961277290919063ffffffff16565b90506000613814826138068587612ecd90919063ffffffff16565b612ecd90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561384a57613849614b5f565b5b6040519080825280602002602001820160405280156138785781602001602082028036833780820191505090505b50905030816000815181106138905761388f614ef6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613935573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395991906158f5565b8160018151811061396d5761396c614ef6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139d2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127f5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a34959493929190615a1b565b600060405180830381600087803b158015613a4e57600080fd5b505af1158015613a62573d6000803e3d6000fd5b505050505050565b613a95307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127f5565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613adf611a8f565b426040518863ffffffff1660e01b8152600401613b0196959493929190615a75565b60606040518083038185885af1158015613b1f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b449190615aeb565b5050505050565b6000601354148015613b5f57506000601554145b15613b6957613b8c565b601354601481905550601554601681905550600060138190555060006015819055505b565b600080600080600080613ba087612e71565b955095509550955095509550613bfe87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d2885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d7481614584565b613d7e8483614729565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ddb919061494b565b60405180910390a3505050505050505050565b600080600080600080613e0087612e71565b955095509550955095509550613e5e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ef383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fd481614584565b613fde8483614729565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161403b919061494b565b60405180910390a3505050505050505050565b60008060008060008061406087612e71565b9550955095509550955095506140be86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061415385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061419f81614584565b6141a98483614729565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614206919061494b565b60405180910390a3505050505050505050565b60008060008060008061422b87612e71565b95509550955095509550955061428987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061431e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ecd90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143b383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061444885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449481614584565b61449e8483614729565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144fb919061494b565b60405180910390a3505050505050505050565b601454601381905550601654601581905550565b600061454c606461453e6013548561277290919063ffffffff16565b61272890919063ffffffff16565b9050919050565b600061457d606461456f6015548561277290919063ffffffff16565b61272890919063ffffffff16565b9050919050565b600061458e612de8565b905060006145a5828461277290919063ffffffff16565b90506145f981600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614724576146e083600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e1390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61473e82600d54612ecd90919063ffffffff16565b600d8190555061475981600e54612e1390919063ffffffff16565b600e819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561479d578082015181840152602081019050614782565b838111156147ac576000848401525b50505050565b6000601f19601f8301169050919050565b60006147ce82614763565b6147d8818561476e565b93506147e881856020860161477f565b6147f1816147b2565b840191505092915050565b6000602082019050818103600083015261481681846147c3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061485d82614832565b9050919050565b61486d81614852565b811461487857600080fd5b50565b60008135905061488a81614864565b92915050565b6000819050919050565b6148a381614890565b81146148ae57600080fd5b50565b6000813590506148c08161489a565b92915050565b600080604083850312156148dd576148dc614828565b5b60006148eb8582860161487b565b92505060206148fc858286016148b1565b9150509250929050565b60008115159050919050565b61491b81614906565b82525050565b60006020820190506149366000830184614912565b92915050565b61494581614890565b82525050565b6000602082019050614960600083018461493c565b92915050565b6000819050919050565b600061498b61498661498184614832565b614966565b614832565b9050919050565b600061499d82614970565b9050919050565b60006149af82614992565b9050919050565b6149bf816149a4565b82525050565b60006020820190506149da60008301846149b6565b92915050565b6000806000606084860312156149f9576149f8614828565b5b6000614a078682870161487b565b9350506020614a188682870161487b565b9250506040614a29868287016148b1565b9150509250925092565b600060208284031215614a4957614a48614828565b5b6000614a57848285016148b1565b91505092915050565b600060ff82169050919050565b614a7681614a60565b82525050565b6000602082019050614a916000830184614a6d565b92915050565b600060208284031215614aad57614aac614828565b5b6000614abb8482850161487b565b91505092915050565b614acd81614906565b8114614ad857600080fd5b50565b600081359050614aea81614ac4565b92915050565b60008060408385031215614b0757614b06614828565b5b6000614b15858286016148b1565b9250506020614b2685828601614adb565b9150509250929050565b614b3981614852565b82525050565b6000602082019050614b546000830184614b30565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614b97826147b2565b810181811067ffffffffffffffff82111715614bb657614bb5614b5f565b5b80604052505050565b6000614bc961481e565b9050614bd58282614b8e565b919050565b600067ffffffffffffffff821115614bf557614bf4614b5f565b5b602082029050602081019050919050565b600080fd5b6000614c1e614c1984614bda565b614bbf565b90508083825260208201905060208402830185811115614c4157614c40614c06565b5b835b81811015614c6a5780614c56888261487b565b845260208401935050602081019050614c43565b5050509392505050565b600082601f830112614c8957614c88614b5a565b5b8135614c99848260208601614c0b565b91505092915050565b600060208284031215614cb857614cb7614828565b5b600082013567ffffffffffffffff811115614cd657614cd561482d565b5b614ce284828501614c74565b91505092915050565b60008060408385031215614d0257614d01614828565b5b6000614d108582860161487b565b9250506020614d218582860161487b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d7257607f821691505b60208210811415614d8657614d85614d2b565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614de8602a8361476e565b9150614df382614d8c565b604082019050919050565b60006020820190508181036000830152614e1781614ddb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e5460208361476e565b9150614e5f82614e1e565b602082019050919050565b60006020820190508181036000830152614e8381614e47565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614ec0601b8361476e565b9150614ecb82614e8a565b602082019050919050565b60006020820190508181036000830152614eef81614eb3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f5f82614890565b9150614f6a83614890565b925082821015614f7d57614f7c614f25565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614fc282614890565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ff557614ff4614f25565b5b600182019050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061505c602c8361476e565b915061506782615000565b604082019050919050565b6000602082019050818103600083015261508b8161504f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006150c8601f8361476e565b91506150d382615092565b602082019050919050565b600060208201905081810360008301526150f7816150bb565b9050919050565b7f596f7520617265206e6f742061626c6520746f20636c61696d20657468657221600082015250565b600061513460208361476e565b915061513f826150fe565b602082019050919050565b6000602082019050818103600083015261516381615127565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b60006151c660238361476e565b91506151d18261516a565b604082019050919050565b600060208201905081810360008301526151f5816151b9565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615232601f8361476e565b915061523d826151fc565b602082019050919050565b6000602082019050818103600083015261526181615225565b9050919050565b600061527382614890565b915061527e83614890565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152b3576152b2614f25565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061531a60268361476e565b9150615325826152be565b604082019050919050565b600060208201905081810360008301526153498161530d565b9050919050565b600061535b82614890565b915061536683614890565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561539f5761539e614f25565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006153e482614890565b91506153ef83614890565b9250826153ff576153fe6153aa565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061546660218361476e565b91506154718261540a565b604082019050919050565b6000602082019050818103600083015261549581615459565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154f860248361476e565b91506155038261549c565b604082019050919050565b60006020820190508181036000830152615527816154eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061558a60228361476e565b91506155958261552e565b604082019050919050565b600060208201905081810360008301526155b98161557d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061561c60258361476e565b9150615627826155c0565b604082019050919050565b6000602082019050818103600083015261564b8161560f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156ae60238361476e565b91506156b982615652565b604082019050919050565b600060208201905081810360008301526156dd816156a1565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061574060298361476e565b915061574b826156e4565b604082019050919050565b6000602082019050818103600083015261576f81615733565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006157d260288361476e565b91506157dd82615776565b604082019050919050565b60006020820190508181036000830152615801816157c5565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061583e601b8361476e565b915061584982615808565b602082019050919050565b6000602082019050818103600083015261586d81615831565b9050919050565b7f426f7473206172656e7420616c6c6f77656420746f2074726164650000000000600082015250565b60006158aa601b8361476e565b91506158b582615874565b602082019050919050565b600060208201905081810360008301526158d98161589d565b9050919050565b6000815190506158ef81614864565b92915050565b60006020828403121561590b5761590a614828565b5b6000615919848285016158e0565b91505092915050565b6000819050919050565b600061594761594261593d84615922565b614966565b614890565b9050919050565b6159578161592c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61599281614852565b82525050565b60006159a48383615989565b60208301905092915050565b6000602082019050919050565b60006159c88261595d565b6159d28185615968565b93506159dd83615979565b8060005b83811015615a0e5781516159f58882615998565b9750615a00836159b0565b9250506001810190506159e1565b5085935050505092915050565b600060a082019050615a30600083018861493c565b615a3d602083018761594e565b8181036040830152615a4f81866159bd565b9050615a5e6060830185614b30565b615a6b608083018461493c565b9695505050505050565b600060c082019050615a8a6000830189614b30565b615a97602083018861493c565b615aa4604083018761594e565b615ab1606083018661594e565b615abe6080830185614b30565b615acb60a083018461493c565b979650505050505050565b600081519050615ae58161489a565b92915050565b600080600060608486031215615b0457615b03614828565b5b6000615b1286828701615ad6565b9350506020615b2386828701615ad6565b9250506040615b3486828701615ad6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220635b33faaa42bb107f6bfbe7fccbb01714badf4e72674a609e3409653e66f63464736f6c634300080b0033

Deployed Bytecode Sourcemap

15114:17427:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17358:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18270:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19391:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16227:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17635:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18439:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20315:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15621:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17544:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21031:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18760:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16038:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19486:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22174:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19871:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16285:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20576:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22545:189;;;;;;;;;;;;;:::i;:::-;;22415:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16125:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17738:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5962:148;;;;;;;;;;;;;:::i;:::-;;15879:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15415:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16370:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19263:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5748:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17449:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22746:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18986:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23270:119;;;;;;;;;;;;;:::i;:::-;;6837:305;;;;;;;;;;;;;:::i;:::-;;17944:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6370:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23062:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16430:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6535:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18119:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22297:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6118:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15565:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17358:83;17395:13;17428:5;17421:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17358:83;:::o;18270:161::-;18345:4;18362:39;18371:12;:10;:12::i;:::-;18385:7;18394:6;18362:8;:39::i;:::-;18419:4;18412:11;;18270:161;;;;:::o;19391:87::-;19433:7;19460:10;;19453:17;;19391:87;:::o;16227:51::-;;;:::o;17635:95::-;17688:7;17715;;17708:14;;17635:95;:::o;18439:313::-;18537:4;18554:36;18564:6;18572:9;18583:6;18554:9;:36::i;:::-;18601:121;18610:6;18618:12;:10;:12::i;:::-;18632:89;18670:6;18632:89;;;;;;;;;;;;;;;;;:11;:19;18644:6;18632:19;;;;;;;;;;;;;;;:33;18652:12;:10;:12::i;:::-;18632:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;18601:8;:121::i;:::-;18740:4;18733:11;;18439:313;;;;;:::o;20315:253::-;20381:7;20420;;20409;:18;;20401:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20485:19;20508:10;:8;:10::i;:::-;20485:33;;20536:24;20548:11;20536:7;:11;;:24;;;;:::i;:::-;20529:31;;;20315:253;;;:::o;15621:28::-;;;;;;;;;;;;;:::o;17544:83::-;17585:5;17610:9;;;;;;;;;;;17603:16;;17544:83;:::o;21031:479::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21113:11:::1;:20;21125:7;21113:20;;;;;;;;;;;;;;;;;;;;;;;;;21105:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21181:9;21176:327;21200:9;:16;;;;21196:1;:20;21176:327;;;21258:7;21242:23;;:9;21252:1;21242:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;21238:254;;;21301:9;21330:1;21311:9;:16;;;;:20;;;;:::i;:::-;21301:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21286:9;21296:1;21286:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21370:1;21351:7;:16;21359:7;21351:16;;;;;;;;;;;;;;;:20;;;;21413:5;21390:11;:20;21402:7;21390:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;21437:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;21471:5;;21238:254;21218:3;;;;;:::i;:::-;;;;21176:327;;;;21031:479:::0;:::o;18760:218::-;18848:4;18865:83;18874:12;:10;:12::i;:::-;18888:7;18897:50;18936:10;18897:11;:25;18909:12;:10;:12::i;:::-;18897:25;;;;;;;;;;;;;;;:34;18923:7;18897:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18865:8;:83::i;:::-;18966:4;18959:11;;18760:218;;;;:::o;16038:26::-;;;;:::o;19486:377::-;19538:14;19555:12;:10;:12::i;:::-;19538:29;;19587:11;:19;19599:6;19587:19;;;;;;;;;;;;;;;;;;;;;;;;;19586:20;19578:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;19667:15;19691:19;19702:7;19691:10;:19::i;:::-;19666:44;;;;;;;19739:28;19759:7;19739;:15;19747:6;19739:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;19721:7;:15;19729:6;19721:15;;;;;;;;;;;;;;;:46;;;;19788:20;19800:7;19788;;:11;;:20;;;;:::i;:::-;19778:7;:30;;;;19832:23;19847:7;19832:10;;:14;;:23;;;;:::i;:::-;19819:10;:36;;;;19527:336;;19486:377;:::o;22174:111::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22273:4:::1;22243:18;:27;22262:7;22243:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;22174:111:::0;:::o;19871:436::-;19961:7;20000;;19989;:18;;19981:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20059:17;20054:246;;20094:15;20118:19;20129:7;20118:10;:19::i;:::-;20093:44;;;;;;;20159:7;20152:14;;;;;20054:246;20201:23;20232:19;20243:7;20232:10;:19::i;:::-;20199:52;;;;;;;20273:15;20266:22;;;19871:436;;;;;:::o;16285:38::-;;;:::o;20576:447::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20773:11:::1;:20;20785:7;20773:20;;;;;;;;;;;;;;;;;;;;;;;;;20772:21;20764:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20858:1;20839:7;:16;20847:7;20839:16;;;;;;;;;;;;;;;;:20;20836:108;;;20895:37;20915:7;:16;20923:7;20915:16;;;;;;;;;;;;;;;;20895:19;:37::i;:::-;20876:7;:16;20884:7;20876:16;;;;;;;;;;;;;;;:56;;;;20836:108;20977:4;20954:11;:20;20966:7;20954:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;20992:9;21007:7;20992:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20576:447:::0;:::o;22545:189::-;22607:15;;;;;;;;;;;22593:29;;:10;:29;;;22585:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22678:15;;;;;;;;;;;22670:33;;:56;22704:21;22670:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22545:189::o;22415:118::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22512:13:::1;22494:15;;:31;;;;;;;;;;;;;;;;;;22415:118:::0;:::o;16125:33::-;;;;:::o;17738:198::-;17804:7;17828:11;:20;17840:7;17828:20;;;;;;;;;;;;;;;;;;;;;;;;;17824:49;;;17857:7;:16;17865:7;17857:16;;;;;;;;;;;;;;;;17850:23;;;;17824:49;17891:37;17911:7;:16;17919:7;17911:16;;;;;;;;;;;;;;;;17891:19;:37::i;:::-;17884:44;;17738:198;;;;:::o;5962:148::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6069:1:::1;6032:40;;6053:6;::::0;::::1;;;;;;;;6032:40;;;;;;;;;;;;6100:1;6083:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5962:148::o:0;15879:30::-;;;;;;;;;;;;;:::o;15415:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;16370:48::-;;;;:::o;19263:120::-;19331:4;19355:11;:20;19367:7;19355:20;;;;;;;;;;;;;;;;;;;;;;;;;19348:27;;19263:120;;;:::o;5748:79::-;5786:7;5813:6;;;;;;;;;;;5806:13;;5748:79;:::o;17449:87::-;17488:13;17521:7;17514:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17449:87;:::o;22746:304::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22833:6:::1;22828:215;22849:9;:16;22845:1;:20;22828:215;;;22907:13;22891:29;;:9;22901:1;22891:12;;;;;;;;:::i;:::-;;;;;;;;:29;;;;:73;;;;;22948:15;22924:40;;:9;22934:1;22924:12;;;;;;;;:::i;:::-;;;;;;;;:40;;;;22891:73;22887:145;;;23012:4;22985:10;:24;22996:9;23006:1;22996:12;;;;;;;;:::i;:::-;;;;;;;;22985:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;22887:145;22867:3;;;;;:::i;:::-;;;;22828:215;;;;22746:304:::0;:::o;18986:269::-;19079:4;19096:129;19105:12;:10;:12::i;:::-;19119:7;19128:96;19167:15;19128:96;;;;;;;;;;;;;;;;;:11;:25;19140:12;:10;:12::i;:::-;19128:25;;;;;;;;;;;;;;;:34;19154:7;19128:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19096:8;:129::i;:::-;19243:4;19236:11;;18986:269;;;;:::o;23270:119::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23336:4:::1;23325:8;;:15;;;;;;;;;;;;;;;;;;23366;23351:12;:30;;;;23270:119::o:0;6837:305::-;6907:10;6889:28;;:14;;;;;;;;;;;:28;;;6881:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6994:9;;6976:15;:27;6968:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7085:14;;;;;;;;;;;7056:44;;7077:6;;;;;;;;;;7056:44;;;;;;;;;;;;7120:14;;;;;;;;;;;7111:6;;:23;;;;;;;;;;;;;;;;;;6837:305::o;17944:167::-;18022:4;18039:42;18049:12;:10;:12::i;:::-;18063:9;18074:6;18039:9;:42::i;:::-;18099:4;18092:11;;17944:167;;;;:::o;6370:89::-;6415:7;6442:9;;6435:16;;6370:89;:::o;23062:196::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23153:6:::1;23148:103;23169:9;:16;23165:1;:20;23148:103;;;23234:5;23207:10;:24;23218:9;23228:1;23218:12;;;;;;;;:::i;:::-;;;;;;;;23207:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;23187:3;;;;;:::i;:::-;;;;23148:103;;;;23062:196:::0;:::o;16430:72::-;;;;:::o;6535:226::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6616:6:::1;::::0;::::1;;;;;;;;6599:14;;:23;;;;;;;;;;;;;;;;;;6650:1;6633:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6693:4;6675:15;:22;;;;:::i;:::-;6663:9;:34;;;;6750:1;6713:40;;6734:6;::::0;::::1;;;;;;;;6713:40;;;;;;;;;;;;6535:226:::0;:::o;18119:143::-;18200:7;18227:11;:18;18239:5;18227:18;;;;;;;;;;;;;;;:27;18246:7;18227:27;;;;;;;;;;;;;;;;18220:34;;18119:143;;;;:::o;22297:110::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22394:5:::1;22364:18;:27;22383:7;22364:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;22297:110:::0;:::o;6118:244::-;5885:12;:10;:12::i;:::-;5875:22;;:6;;;;;;;;;;:22;;;5867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6227:1:::1;6207:22;;:8;:22;;;;6199:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6317:8;6288:38;;6309:6;::::0;::::1;;;;;;;;6288:38;;;;;;;;;;;;6346:8;6337:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6118:244:::0;:::o;15565:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;1623:132::-;1681:7;1708:39;1712:1;1715;1708:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1701:46;;1623:132;;;;:::o;1365:250::-;1423:7;1452:1;1447;:6;1443:47;;;1477:1;1470:8;;;;1443:47;1502:9;1518:1;1514;:5;;;;:::i;:::-;1502:17;;1547:1;1542;1538;:5;;;;:::i;:::-;:10;1530:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1606:1;1599:8;;;1365:250;;;;;:::o;2393:98::-;2446:7;2473:10;2466:17;;2393:98;:::o;26540:337::-;26650:1;26633:19;;:5;:19;;;;26625:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26731:1;26712:21;;:7;:21;;;;26704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26815:6;26785:11;:18;26797:5;26785:18;;;;;;;;;;;;;;;:27;26804:7;26785:27;;;;;;;;;;;;;;;:36;;;;26853:7;26837:32;;26846:5;26837:32;;;26862:6;26837:32;;;;;;:::i;:::-;;;;;;;;26540:337;;;:::o;26885:1236::-;27023:1;27007:18;;:4;:18;;;;26999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27100:1;27086:16;;:2;:16;;;;27078:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27170:1;27161:6;:10;27153:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27240:7;:5;:7::i;:::-;27232:15;;:4;:15;;;;:32;;;;;27257:7;:5;:7::i;:::-;27251:13;;:2;:13;;;;27232:32;27228:113;;;27284:12;;27274:6;:22;;27266:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27228:113;27391:1;27376:12;;:16;;;;:::i;:::-;27358:15;:34;27354:61;;;27411:4;27394:10;:14;27405:2;27394:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27354:61;27428:28;27459:24;27477:4;27459:9;:24::i;:::-;27428:55;;27522:12;;27498:20;:36;27494:77;;27559:12;;27536:35;;27494:77;27592:24;27643:29;;27619:20;:53;;27592:80;;27701:19;:53;;;;;27738:16;;;;;;;;;;;27737:17;27701:53;:91;;;;;27779:13;27771:21;;:4;:21;;;;27701:91;27683:251;;;27842:29;;27819:52;;27886:36;27901:20;27886:14;:36::i;:::-;27683:251;27954:12;27969:4;27954:19;;27988:18;:24;28007:4;27988:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;28016:18;:22;28035:2;28016:22;;;;;;;;;;;;;;;;;;;;;;;;;27988:50;27984:70;;;28049:5;28039:15;;27984:70;28075:38;28090:4;28095:2;28098:6;28105:7;28075:14;:38::i;:::-;26988:1133;;;26885:1236;;;:::o;1165:192::-;1251:7;1284:1;1279;:6;;1287:12;1271:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1311:9;1327:1;1323;:5;;;;:::i;:::-;1311:17;;1348:1;1341:8;;;1165:192;;;;;:::o;24754:163::-;24795:7;24816:15;24833;24852:19;:17;:19::i;:::-;24815:56;;;;24889:20;24901:7;24889;:11;;:20;;;;:::i;:::-;24882:27;;;;24754:163;:::o;832:181::-;890:7;910:9;926:1;922;:5;;;;:::i;:::-;910:17;;951:1;946;:6;;938:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1004:1;997:8;;;832:181;;;;:::o;23552:419::-;23611:7;23620;23629;23638;23647;23656;23677:23;23702:12;23716:18;23738:20;23750:7;23738:11;:20::i;:::-;23676:82;;;;;;23770:15;23787:23;23812:12;23828:50;23840:7;23849:4;23855:10;23867;:8;:10::i;:::-;23828:11;:50::i;:::-;23769:109;;;;;;23897:7;23906:15;23923:4;23929:15;23946:4;23952:10;23889:74;;;;;;;;;;;;;;;;;;23552:419;;;;;;;:::o;1021:136::-;1079:7;1106:43;1110:1;1113;1106:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1099:50;;1021:136;;;;:::o;1763:278::-;1849:7;1881:1;1877;:5;1884:12;1869:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1908:9;1924:1;1920;:5;;;;:::i;:::-;1908:17;;2032:1;2025:8;;;1763:278;;;;;:::o;28129:517::-;16577:4;16558:16;;:23;;;;;;;;;;;;;;;;;;28214:12:::1;28229:27;28254:1;28229:20;:24;;:27;;;;:::i;:::-;28214:42;;28267:17;28287:30;28312:4;28287:20;:24;;:30;;;;:::i;:::-;28267:50;;28334:22;28359:21;28334:46;;28391:22;28408:4;28391:16;:22::i;:::-;28426:18;28447:41;28473:14;28447:21;:25;;:41;;;;:::i;:::-;28426:62;;28499:22;28524:27;28547:3;28524:18;28539:2;28524:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;28499:52;;28576:14;28562:28;;;;;:::i;:::-;;;28603:35;28616:9;28627:10;28603:12;:35::i;:::-;28203:443;;;;;16623:5:::0;16604:16;;:24;;;;;;;;;;;;;;;;;;28129:517;:::o;29845:978::-;29957:8;;;;;;;;;;;29952:41;;29985:7;:5;:7::i;:::-;29975:17;;:6;:17;;;29967:26;;;;;;29952:41;30023:10;:18;30034:6;30023:18;;;;;;;;;;;;;;;;;;;;;;;;;30022:19;:45;;;;;30046:10;:21;30057:9;30046:21;;;;;;;;;;;;;;;;;;;;;;;;;30045:22;30022:45;30014:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30125:7;30120:28;;30134:14;:12;:14::i;:::-;30120:28;30173:11;:19;30185:6;30173:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;30197:11;:22;30209:9;30197:22;;;;;;;;;;;;;;;;;;;;;;;;;30196:23;30173:46;30169:597;;;30236:48;30258:6;30266:9;30277:6;30236:21;:48::i;:::-;30169:597;;;30307:11;:19;30319:6;30307:19;;;;;;;;;;;;;;;;;;;;;;;;;30306:20;:46;;;;;30330:11;:22;30342:9;30330:22;;;;;;;;;;;;;;;;;;;;;;;;;30306:46;30302:464;;;30369:46;30389:6;30397:9;30408:6;30369:19;:46::i;:::-;30302:464;;;30438:11;:19;30450:6;30438:19;;;;;;;;;;;;;;;;;;;;;;;;;30437:20;:47;;;;;30462:11;:22;30474:9;30462:22;;;;;;;;;;;;;;;;;;;;;;;;;30461:23;30437:47;30433:333;;;30501:44;30519:6;30527:9;30538:6;30501:17;:44::i;:::-;30433:333;;;30567:11;:19;30579:6;30567:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;30590:11;:22;30602:9;30590:22;;;;;;;;;;;;;;;;;;;;;;;;;30567:45;30563:203;;;30629:48;30651:6;30659:9;30670:6;30629:21;:48::i;:::-;30563:203;;;30710:44;30728:6;30736:9;30747:6;30710:17;:44::i;:::-;30563:203;30433:333;30302:464;30169:597;30791:7;30786:29;;30800:15;:13;:15::i;:::-;30786:29;29845:978;;;;:::o;24925:561::-;24975:7;24984;25004:15;25022:7;;25004:25;;25040:15;25058:7;;25040:25;;25087:9;25082:289;25106:9;:16;;;;25102:1;:20;25082:289;;;25172:7;25148;:21;25156:9;25166:1;25156:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25148:21;;;;;;;;;;;;;;;;:31;:66;;;;25207:7;25183;:21;25191:9;25201:1;25191:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25183:21;;;;;;;;;;;;;;;;:31;25148:66;25144:97;;;25224:7;;25233;;25216:25;;;;;;;;;25144:97;25266:34;25278:7;:21;25286:9;25296:1;25286:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25278:21;;;;;;;;;;;;;;;;25266:7;:11;;:34;;;;:::i;:::-;25256:44;;25325:34;25337:7;:21;25345:9;25355:1;25345:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25337:21;;;;;;;;;;;;;;;;25325:7;:11;;:34;;;;:::i;:::-;25315:44;;25124:3;;;;;:::i;:::-;;;;25082:289;;;;25395:20;25407:7;;25395;;:11;;:20;;;;:::i;:::-;25385:7;:30;25381:61;;;25425:7;;25434;;25417:25;;;;;;;;25381:61;25461:7;25470;25453:25;;;;;;24925:561;;;:::o;23979:330::-;24039:7;24048;24057;24077:12;24092:24;24108:7;24092:15;:24::i;:::-;24077:39;;24127:18;24148:30;24170:7;24148:21;:30::i;:::-;24127:51;;24189:23;24215:33;24237:10;24215:17;24227:4;24215:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;24189:59;;24267:15;24284:4;24290:10;24259:42;;;;;;;;;23979:330;;;;;:::o;24317:429::-;24432:7;24441;24450;24470:15;24488:24;24500:11;24488:7;:11;;:24;;;;:::i;:::-;24470:42;;24523:12;24538:21;24547:11;24538:4;:8;;:21;;;;:::i;:::-;24523:36;;24570:18;24591:27;24606:11;24591:10;:14;;:27;;;;:::i;:::-;24570:48;;24629:23;24655:33;24677:10;24655:17;24667:4;24655:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;24629:59;;24707:7;24716:15;24733:4;24699:39;;;;;;;;;;24317:429;;;;;;;;:::o;28654:589::-;28780:21;28818:1;28804:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28780:40;;28849:4;28831;28836:1;28831:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28875:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28865:4;28870:1;28865:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28910:62;28927:4;28942:15;28960:11;28910:8;:62::i;:::-;29011:15;:66;;;29092:11;29118:1;29162:4;29189;29209:15;29011:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28709:534;28654:589;:::o;29251:513::-;29399:62;29416:4;29431:15;29449:11;29399:8;:62::i;:::-;29504:15;:31;;;29543:9;29576:4;29596:11;29622:1;29665;29708:7;:5;:7::i;:::-;29730:15;29504:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29251:513;;:::o;26145:250::-;26202:1;26191:7;;:12;:34;;;;;26224:1;26207:13;;:18;26191:34;26188:46;;;26227:7;;26188:46;26272:7;;26254:15;:25;;;;26314:13;;26290:21;:37;;;;26358:1;26348:7;:11;;;;26386:1;26370:13;:17;;;;26145:250;:::o;31935:566::-;32038:15;32055:23;32080:12;32094:23;32119:12;32133:18;32155:19;32166:7;32155:10;:19::i;:::-;32037:137;;;;;;;;;;;;32203:28;32223:7;32203;:15;32211:6;32203:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32185:7;:15;32193:6;32185:15;;;;;;;;;;;;;;;:46;;;;32260:28;32280:7;32260;:15;32268:6;32260:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32242:7;:15;32250:6;32242:15;;;;;;;;;;;;;;;:46;;;;32320:39;32343:15;32320:7;:18;32328:9;32320:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32299:7;:18;32307:9;32299:18;;;;;;;;;;;;;;;:60;;;;32373:26;32388:10;32373:14;:26::i;:::-;32410:23;32422:4;32428;32410:11;:23::i;:::-;32466:9;32449:44;;32458:6;32449:44;;;32477:15;32449:44;;;;;;:::i;:::-;;;;;;;;32026:475;;;;;;31935:566;;;:::o;31341:586::-;31442:15;31459:23;31484:12;31498:23;31523:12;31537:18;31559:19;31570:7;31559:10;:19::i;:::-;31441:137;;;;;;;;;;;;31607:28;31627:7;31607;:15;31615:6;31607:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31589:7;:15;31597:6;31589:15;;;;;;;;;;;;;;;:46;;;;31667:39;31690:15;31667:7;:18;31675:9;31667:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31646:7;:18;31654:9;31646:18;;;;;;;;;;;;;;;:60;;;;31738:39;31761:15;31738:7;:18;31746:9;31738:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31717:7;:18;31725:9;31717:18;;;;;;;;;;;;;;;:60;;;;31799:26;31814:10;31799:14;:26::i;:::-;31836:23;31848:4;31854;31836:11;:23::i;:::-;31892:9;31875:44;;31884:6;31875:44;;;31903:15;31875:44;;;;;;:::i;:::-;;;;;;;;31430:497;;;;;;31341:586;;;:::o;30831:502::-;30930:15;30947:23;30972:12;30986:23;31011:12;31025:18;31047:19;31058:7;31047:10;:19::i;:::-;30929:137;;;;;;;;;;;;31095:28;31115:7;31095;:15;31103:6;31095:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31077:7;:15;31085:6;31077:15;;;;;;;;;;;;;;;:46;;;;31155:39;31178:15;31155:7;:18;31163:9;31155:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31134:7;:18;31142:9;31134:18;;;;;;;;;;;;;;;:60;;;;31205:26;31220:10;31205:14;:26::i;:::-;31242:23;31254:4;31260;31242:11;:23::i;:::-;31298:9;31281:44;;31290:6;31281:44;;;31309:15;31281:44;;;;;;:::i;:::-;;;;;;;;30918:415;;;;;;30831:502;;;:::o;21520:642::-;21623:15;21640:23;21665:12;21679:23;21704:12;21718:18;21740:19;21751:7;21740:10;:19::i;:::-;21622:137;;;;;;;;;;;;21788:28;21808:7;21788;:15;21796:6;21788:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21770:7;:15;21778:6;21770:15;;;;;;;;;;;;;;;:46;;;;21845:28;21865:7;21845;:15;21853:6;21845:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21827:7;:15;21835:6;21827:15;;;;;;;;;;;;;;;:46;;;;21905:39;21928:15;21905:7;:18;21913:9;21905:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;21884:7;:18;21892:9;21884:18;;;;;;;;;;;;;;;:60;;;;21976:39;21999:15;21976:7;:18;21984:9;21976:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;21955:7;:18;21963:9;21955:18;;;;;;;;;;;;;;;:60;;;;22034:26;22049:10;22034:14;:26::i;:::-;22071:23;22083:4;22089;22071:11;:23::i;:::-;22127:9;22110:44;;22119:6;22110:44;;;22138:15;22110:44;;;;;;:::i;:::-;;;;;;;;21611:551;;;;;;21520:642;;;:::o;26407:125::-;26461:15;;26451:7;:25;;;;26503:21;;26487:13;:37;;;;26407:125::o;25853:130::-;25917:7;25944:31;25969:5;25944:20;25956:7;;25944;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;25937:38;;25853:130;;;:::o;25991:142::-;26061:7;26088:37;26119:5;26088:26;26100:13;;26088:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;26081:44;;25991:142;;;:::o;25498:343::-;25561:19;25584:10;:8;:10::i;:::-;25561:33;;25605:18;25626:27;25641:11;25626:10;:14;;:27;;;;:::i;:::-;25605:48;;25689:38;25716:10;25689:7;:22;25705:4;25689:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;25664:7;:22;25680:4;25664:22;;;;;;;;;;;;;;;:63;;;;25742:11;:26;25762:4;25742:26;;;;;;;;;;;;;;;;;;;;;;;;;25738:95;;;25795:38;25822:10;25795:7;:22;25811:4;25795:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;25770:7;:22;25786:4;25770:22;;;;;;;;;;;;;;;:63;;;;25738:95;25550:291;;25498:343;:::o;23397:147::-;23475:17;23487:4;23475:7;;:11;;:17;;;;:::i;:::-;23465:7;:27;;;;23516:20;23531:4;23516:10;;:14;;:20;;;;:::i;:::-;23503:10;:33;;;;23397:147;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:329::-;5508:6;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5449:329;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:329::-;6273:6;6322:2;6310:9;6301:7;6297:23;6293:32;6290:119;;;6328:79;;:::i;:::-;6290:119;6448:1;6473:53;6518:7;6509:6;6498:9;6494:22;6473:53;:::i;:::-;6463:63;;6419:117;6214:329;;;;:::o;6549:116::-;6619:21;6634:5;6619:21;:::i;:::-;6612:5;6609:32;6599:60;;6655:1;6652;6645:12;6599:60;6549:116;:::o;6671:133::-;6714:5;6752:6;6739:20;6730:29;;6768:30;6792:5;6768:30;:::i;:::-;6671:133;;;;:::o;6810:468::-;6875:6;6883;6932:2;6920:9;6911:7;6907:23;6903:32;6900:119;;;6938:79;;:::i;:::-;6900:119;7058:1;7083:53;7128:7;7119:6;7108:9;7104:22;7083:53;:::i;:::-;7073:63;;7029:117;7185:2;7211:50;7253:7;7244:6;7233:9;7229:22;7211:50;:::i;:::-;7201:60;;7156:115;6810:468;;;;;:::o;7284:118::-;7371:24;7389:5;7371:24;:::i;:::-;7366:3;7359:37;7284:118;;:::o;7408:222::-;7501:4;7539:2;7528:9;7524:18;7516:26;;7552:71;7620:1;7609:9;7605:17;7596:6;7552:71;:::i;:::-;7408:222;;;;:::o;7636:117::-;7745:1;7742;7735:12;7759:180;7807:77;7804:1;7797:88;7904:4;7901:1;7894:15;7928:4;7925:1;7918:15;7945:281;8028:27;8050:4;8028:27;:::i;:::-;8020:6;8016:40;8158:6;8146:10;8143:22;8122:18;8110:10;8107:34;8104:62;8101:88;;;8169:18;;:::i;:::-;8101:88;8209:10;8205:2;8198:22;7988:238;7945:281;;:::o;8232:129::-;8266:6;8293:20;;:::i;:::-;8283:30;;8322:33;8350:4;8342:6;8322:33;:::i;:::-;8232:129;;;:::o;8367:311::-;8444:4;8534:18;8526:6;8523:30;8520:56;;;8556:18;;:::i;:::-;8520:56;8606:4;8598:6;8594:17;8586:25;;8666:4;8660;8656:15;8648:23;;8367:311;;;:::o;8684:117::-;8793:1;8790;8783:12;8824:710;8920:5;8945:81;8961:64;9018:6;8961:64;:::i;:::-;8945:81;:::i;:::-;8936:90;;9046:5;9075:6;9068:5;9061:21;9109:4;9102:5;9098:16;9091:23;;9162:4;9154:6;9150:17;9142:6;9138:30;9191:3;9183:6;9180:15;9177:122;;;9210:79;;:::i;:::-;9177:122;9325:6;9308:220;9342:6;9337:3;9334:15;9308:220;;;9417:3;9446:37;9479:3;9467:10;9446:37;:::i;:::-;9441:3;9434:50;9513:4;9508:3;9504:14;9497:21;;9384:144;9368:4;9363:3;9359:14;9352:21;;9308:220;;;9312:21;8926:608;;8824:710;;;;;:::o;9557:370::-;9628:5;9677:3;9670:4;9662:6;9658:17;9654:27;9644:122;;9685:79;;:::i;:::-;9644:122;9802:6;9789:20;9827:94;9917:3;9909:6;9902:4;9894:6;9890:17;9827:94;:::i;:::-;9818:103;;9634:293;9557:370;;;;:::o;9933:539::-;10017:6;10066:2;10054:9;10045:7;10041:23;10037:32;10034:119;;;10072:79;;:::i;:::-;10034:119;10220:1;10209:9;10205:17;10192:31;10250:18;10242:6;10239:30;10236:117;;;10272:79;;:::i;:::-;10236:117;10377:78;10447:7;10438:6;10427:9;10423:22;10377:78;:::i;:::-;10367:88;;10163:302;9933:539;;;;:::o;10478:474::-;10546:6;10554;10603:2;10591:9;10582:7;10578:23;10574:32;10571:119;;;10609:79;;:::i;:::-;10571:119;10729:1;10754:53;10799:7;10790:6;10779:9;10775:22;10754:53;:::i;:::-;10744:63;;10700:117;10856:2;10882:53;10927:7;10918:6;10907:9;10903:22;10882:53;:::i;:::-;10872:63;;10827:118;10478:474;;;;;:::o;10958:180::-;11006:77;11003:1;10996:88;11103:4;11100:1;11093:15;11127:4;11124:1;11117:15;11144:320;11188:6;11225:1;11219:4;11215:12;11205:22;;11272:1;11266:4;11262:12;11293:18;11283:81;;11349:4;11341:6;11337:17;11327:27;;11283:81;11411:2;11403:6;11400:14;11380:18;11377:38;11374:84;;;11430:18;;:::i;:::-;11374:84;11195:269;11144:320;;;:::o;11470:229::-;11610:34;11606:1;11598:6;11594:14;11587:58;11679:12;11674:2;11666:6;11662:15;11655:37;11470:229;:::o;11705:366::-;11847:3;11868:67;11932:2;11927:3;11868:67;:::i;:::-;11861:74;;11944:93;12033:3;11944:93;:::i;:::-;12062:2;12057:3;12053:12;12046:19;;11705:366;;;:::o;12077:419::-;12243:4;12281:2;12270:9;12266:18;12258:26;;12330:9;12324:4;12320:20;12316:1;12305:9;12301:17;12294:47;12358:131;12484:4;12358:131;:::i;:::-;12350:139;;12077:419;;;:::o;12502:182::-;12642:34;12638:1;12630:6;12626:14;12619:58;12502:182;:::o;12690:366::-;12832:3;12853:67;12917:2;12912:3;12853:67;:::i;:::-;12846:74;;12929:93;13018:3;12929:93;:::i;:::-;13047:2;13042:3;13038:12;13031:19;;12690:366;;;:::o;13062:419::-;13228:4;13266:2;13255:9;13251:18;13243:26;;13315:9;13309:4;13305:20;13301:1;13290:9;13286:17;13279:47;13343:131;13469:4;13343:131;:::i;:::-;13335:139;;13062:419;;;:::o;13487:177::-;13627:29;13623:1;13615:6;13611:14;13604:53;13487:177;:::o;13670:366::-;13812:3;13833:67;13897:2;13892:3;13833:67;:::i;:::-;13826:74;;13909:93;13998:3;13909:93;:::i;:::-;14027:2;14022:3;14018:12;14011:19;;13670:366;;;:::o;14042:419::-;14208:4;14246:2;14235:9;14231:18;14223:26;;14295:9;14289:4;14285:20;14281:1;14270:9;14266:17;14259:47;14323:131;14449:4;14323:131;:::i;:::-;14315:139;;14042:419;;;:::o;14467:180::-;14515:77;14512:1;14505:88;14612:4;14609:1;14602:15;14636:4;14633:1;14626:15;14653:180;14701:77;14698:1;14691:88;14798:4;14795:1;14788:15;14822:4;14819:1;14812:15;14839:191;14879:4;14899:20;14917:1;14899:20;:::i;:::-;14894:25;;14933:20;14951:1;14933:20;:::i;:::-;14928:25;;14972:1;14969;14966:8;14963:34;;;14977:18;;:::i;:::-;14963:34;15022:1;15019;15015:9;15007:17;;14839:191;;;;:::o;15036:180::-;15084:77;15081:1;15074:88;15181:4;15178:1;15171:15;15205:4;15202:1;15195:15;15222:233;15261:3;15284:24;15302:5;15284:24;:::i;:::-;15275:33;;15330:66;15323:5;15320:77;15317:103;;;15400:18;;:::i;:::-;15317:103;15447:1;15440:5;15436:13;15429:20;;15222:233;;;:::o;15461:231::-;15601:34;15597:1;15589:6;15585:14;15578:58;15670:14;15665:2;15657:6;15653:15;15646:39;15461:231;:::o;15698:366::-;15840:3;15861:67;15925:2;15920:3;15861:67;:::i;:::-;15854:74;;15937:93;16026:3;15937:93;:::i;:::-;16055:2;16050:3;16046:12;16039:19;;15698:366;;;:::o;16070:419::-;16236:4;16274:2;16263:9;16259:18;16251:26;;16323:9;16317:4;16313:20;16309:1;16298:9;16294:17;16287:47;16351:131;16477:4;16351:131;:::i;:::-;16343:139;;16070:419;;;:::o;16495:181::-;16635:33;16631:1;16623:6;16619:14;16612:57;16495:181;:::o;16682:366::-;16824:3;16845:67;16909:2;16904:3;16845:67;:::i;:::-;16838:74;;16921:93;17010:3;16921:93;:::i;:::-;17039:2;17034:3;17030:12;17023:19;;16682:366;;;:::o;17054:419::-;17220:4;17258:2;17247:9;17243:18;17235:26;;17307:9;17301:4;17297:20;17293:1;17282:9;17278:17;17271:47;17335:131;17461:4;17335:131;:::i;:::-;17327:139;;17054:419;;;:::o;17479:182::-;17619:34;17615:1;17607:6;17603:14;17596:58;17479:182;:::o;17667:366::-;17809:3;17830:67;17894:2;17889:3;17830:67;:::i;:::-;17823:74;;17906:93;17995:3;17906:93;:::i;:::-;18024:2;18019:3;18015:12;18008:19;;17667:366;;;:::o;18039:419::-;18205:4;18243:2;18232:9;18228:18;18220:26;;18292:9;18286:4;18282:20;18278:1;18267:9;18263:17;18256:47;18320:131;18446:4;18320:131;:::i;:::-;18312:139;;18039:419;;;:::o;18464:222::-;18604:34;18600:1;18592:6;18588:14;18581:58;18673:5;18668:2;18660:6;18656:15;18649:30;18464:222;:::o;18692:366::-;18834:3;18855:67;18919:2;18914:3;18855:67;:::i;:::-;18848:74;;18931:93;19020:3;18931:93;:::i;:::-;19049:2;19044:3;19040:12;19033:19;;18692:366;;;:::o;19064:419::-;19230:4;19268:2;19257:9;19253:18;19245:26;;19317:9;19311:4;19307:20;19303:1;19292:9;19288:17;19281:47;19345:131;19471:4;19345:131;:::i;:::-;19337:139;;19064:419;;;:::o;19489:181::-;19629:33;19625:1;19617:6;19613:14;19606:57;19489:181;:::o;19676:366::-;19818:3;19839:67;19903:2;19898:3;19839:67;:::i;:::-;19832:74;;19915:93;20004:3;19915:93;:::i;:::-;20033:2;20028:3;20024:12;20017:19;;19676:366;;;:::o;20048:419::-;20214:4;20252:2;20241:9;20237:18;20229:26;;20301:9;20295:4;20291:20;20287:1;20276:9;20272:17;20265:47;20329:131;20455:4;20329:131;:::i;:::-;20321:139;;20048:419;;;:::o;20473:305::-;20513:3;20532:20;20550:1;20532:20;:::i;:::-;20527:25;;20566:20;20584:1;20566:20;:::i;:::-;20561:25;;20720:1;20652:66;20648:74;20645:1;20642:81;20639:107;;;20726:18;;:::i;:::-;20639:107;20770:1;20767;20763:9;20756:16;;20473:305;;;;:::o;20784:225::-;20924:34;20920:1;20912:6;20908:14;20901:58;20993:8;20988:2;20980:6;20976:15;20969:33;20784:225;:::o;21015:366::-;21157:3;21178:67;21242:2;21237:3;21178:67;:::i;:::-;21171:74;;21254:93;21343:3;21254:93;:::i;:::-;21372:2;21367:3;21363:12;21356:19;;21015:366;;;:::o;21387:419::-;21553:4;21591:2;21580:9;21576:18;21568:26;;21640:9;21634:4;21630:20;21626:1;21615:9;21611:17;21604:47;21668:131;21794:4;21668:131;:::i;:::-;21660:139;;21387:419;;;:::o;21812:348::-;21852:7;21875:20;21893:1;21875:20;:::i;:::-;21870:25;;21909:20;21927:1;21909:20;:::i;:::-;21904:25;;22097:1;22029:66;22025:74;22022:1;22019:81;22014:1;22007:9;22000:17;21996:105;21993:131;;;22104:18;;:::i;:::-;21993:131;22152:1;22149;22145:9;22134:20;;21812:348;;;;:::o;22166:180::-;22214:77;22211:1;22204:88;22311:4;22308:1;22301:15;22335:4;22332:1;22325:15;22352:185;22392:1;22409:20;22427:1;22409:20;:::i;:::-;22404:25;;22443:20;22461:1;22443:20;:::i;:::-;22438:25;;22482:1;22472:35;;22487:18;;:::i;:::-;22472:35;22529:1;22526;22522:9;22517:14;;22352:185;;;;:::o;22543:220::-;22683:34;22679:1;22671:6;22667:14;22660:58;22752:3;22747:2;22739:6;22735:15;22728:28;22543:220;:::o;22769:366::-;22911:3;22932:67;22996:2;22991:3;22932:67;:::i;:::-;22925:74;;23008:93;23097:3;23008:93;:::i;:::-;23126:2;23121:3;23117:12;23110:19;;22769:366;;;:::o;23141:419::-;23307:4;23345:2;23334:9;23330:18;23322:26;;23394:9;23388:4;23384:20;23380:1;23369:9;23365:17;23358:47;23422:131;23548:4;23422:131;:::i;:::-;23414:139;;23141:419;;;:::o;23566:223::-;23706:34;23702:1;23694:6;23690:14;23683:58;23775:6;23770:2;23762:6;23758:15;23751:31;23566:223;:::o;23795:366::-;23937:3;23958:67;24022:2;24017:3;23958:67;:::i;:::-;23951:74;;24034:93;24123:3;24034:93;:::i;:::-;24152:2;24147:3;24143:12;24136:19;;23795:366;;;:::o;24167:419::-;24333:4;24371:2;24360:9;24356:18;24348:26;;24420:9;24414:4;24410:20;24406:1;24395:9;24391:17;24384:47;24448:131;24574:4;24448:131;:::i;:::-;24440:139;;24167:419;;;:::o;24592:221::-;24732:34;24728:1;24720:6;24716:14;24709:58;24801:4;24796:2;24788:6;24784:15;24777:29;24592:221;:::o;24819:366::-;24961:3;24982:67;25046:2;25041:3;24982:67;:::i;:::-;24975:74;;25058:93;25147:3;25058:93;:::i;:::-;25176:2;25171:3;25167:12;25160:19;;24819:366;;;:::o;25191:419::-;25357:4;25395:2;25384:9;25380:18;25372:26;;25444:9;25438:4;25434:20;25430:1;25419:9;25415:17;25408:47;25472:131;25598:4;25472:131;:::i;:::-;25464:139;;25191:419;;;:::o;25616:224::-;25756:34;25752:1;25744:6;25740:14;25733:58;25825:7;25820:2;25812:6;25808:15;25801:32;25616:224;:::o;25846:366::-;25988:3;26009:67;26073:2;26068:3;26009:67;:::i;:::-;26002:74;;26085:93;26174:3;26085:93;:::i;:::-;26203:2;26198:3;26194:12;26187:19;;25846:366;;;:::o;26218:419::-;26384:4;26422:2;26411:9;26407:18;26399:26;;26471:9;26465:4;26461:20;26457:1;26446:9;26442:17;26435:47;26499:131;26625:4;26499:131;:::i;:::-;26491:139;;26218:419;;;:::o;26643:222::-;26783:34;26779:1;26771:6;26767:14;26760:58;26852:5;26847:2;26839:6;26835:15;26828:30;26643:222;:::o;26871:366::-;27013:3;27034:67;27098:2;27093:3;27034:67;:::i;:::-;27027:74;;27110:93;27199:3;27110:93;:::i;:::-;27228:2;27223:3;27219:12;27212:19;;26871:366;;;:::o;27243:419::-;27409:4;27447:2;27436:9;27432:18;27424:26;;27496:9;27490:4;27486:20;27482:1;27471:9;27467:17;27460:47;27524:131;27650:4;27524:131;:::i;:::-;27516:139;;27243:419;;;:::o;27668:228::-;27808:34;27804:1;27796:6;27792:14;27785:58;27877:11;27872:2;27864:6;27860:15;27853:36;27668:228;:::o;27902:366::-;28044:3;28065:67;28129:2;28124:3;28065:67;:::i;:::-;28058:74;;28141:93;28230:3;28141:93;:::i;:::-;28259:2;28254:3;28250:12;28243:19;;27902:366;;;:::o;28274:419::-;28440:4;28478:2;28467:9;28463:18;28455:26;;28527:9;28521:4;28517:20;28513:1;28502:9;28498:17;28491:47;28555:131;28681:4;28555:131;:::i;:::-;28547:139;;28274:419;;;:::o;28699:227::-;28839:34;28835:1;28827:6;28823:14;28816:58;28908:10;28903:2;28895:6;28891:15;28884:35;28699:227;:::o;28932:366::-;29074:3;29095:67;29159:2;29154:3;29095:67;:::i;:::-;29088:74;;29171:93;29260:3;29171:93;:::i;:::-;29289:2;29284:3;29280:12;29273:19;;28932:366;;;:::o;29304:419::-;29470:4;29508:2;29497:9;29493:18;29485:26;;29557:9;29551:4;29547:20;29543:1;29532:9;29528:17;29521:47;29585:131;29711:4;29585:131;:::i;:::-;29577:139;;29304:419;;;:::o;29729:177::-;29869:29;29865:1;29857:6;29853:14;29846:53;29729:177;:::o;29912:366::-;30054:3;30075:67;30139:2;30134:3;30075:67;:::i;:::-;30068:74;;30151:93;30240:3;30151:93;:::i;:::-;30269:2;30264:3;30260:12;30253:19;;29912:366;;;:::o;30284:419::-;30450:4;30488:2;30477:9;30473:18;30465:26;;30537:9;30531:4;30527:20;30523:1;30512:9;30508:17;30501:47;30565:131;30691:4;30565:131;:::i;:::-;30557:139;;30284:419;;;:::o;30709:177::-;30849:29;30845:1;30837:6;30833:14;30826:53;30709:177;:::o;30892:366::-;31034:3;31055:67;31119:2;31114:3;31055:67;:::i;:::-;31048:74;;31131:93;31220:3;31131:93;:::i;:::-;31249:2;31244:3;31240:12;31233:19;;30892:366;;;:::o;31264:419::-;31430:4;31468:2;31457:9;31453:18;31445:26;;31517:9;31511:4;31507:20;31503:1;31492:9;31488:17;31481:47;31545:131;31671:4;31545:131;:::i;:::-;31537:139;;31264:419;;;:::o;31689:143::-;31746:5;31777:6;31771:13;31762:22;;31793:33;31820:5;31793:33;:::i;:::-;31689:143;;;;:::o;31838:351::-;31908:6;31957:2;31945:9;31936:7;31932:23;31928:32;31925:119;;;31963:79;;:::i;:::-;31925:119;32083:1;32108:64;32164:7;32155:6;32144:9;32140:22;32108:64;:::i;:::-;32098:74;;32054:128;31838:351;;;;:::o;32195:85::-;32240:7;32269:5;32258:16;;32195:85;;;:::o;32286:158::-;32344:9;32377:61;32395:42;32404:32;32430:5;32404:32;:::i;:::-;32395:42;:::i;:::-;32377:61;:::i;:::-;32364:74;;32286:158;;;:::o;32450:147::-;32545:45;32584:5;32545:45;:::i;:::-;32540:3;32533:58;32450:147;;:::o;32603:114::-;32670:6;32704:5;32698:12;32688:22;;32603:114;;;:::o;32723:184::-;32822:11;32856:6;32851:3;32844:19;32896:4;32891:3;32887:14;32872:29;;32723:184;;;;:::o;32913:132::-;32980:4;33003:3;32995:11;;33033:4;33028:3;33024:14;33016:22;;32913:132;;;:::o;33051:108::-;33128:24;33146:5;33128:24;:::i;:::-;33123:3;33116:37;33051:108;;:::o;33165:179::-;33234:10;33255:46;33297:3;33289:6;33255:46;:::i;:::-;33333:4;33328:3;33324:14;33310:28;;33165:179;;;;:::o;33350:113::-;33420:4;33452;33447:3;33443:14;33435:22;;33350:113;;;:::o;33499:732::-;33618:3;33647:54;33695:5;33647:54;:::i;:::-;33717:86;33796:6;33791:3;33717:86;:::i;:::-;33710:93;;33827:56;33877:5;33827:56;:::i;:::-;33906:7;33937:1;33922:284;33947:6;33944:1;33941:13;33922:284;;;34023:6;34017:13;34050:63;34109:3;34094:13;34050:63;:::i;:::-;34043:70;;34136:60;34189:6;34136:60;:::i;:::-;34126:70;;33982:224;33969:1;33966;33962:9;33957:14;;33922:284;;;33926:14;34222:3;34215:10;;33623:608;;;33499:732;;;;:::o;34237:831::-;34500:4;34538:3;34527:9;34523:19;34515:27;;34552:71;34620:1;34609:9;34605:17;34596:6;34552:71;:::i;:::-;34633:80;34709:2;34698:9;34694:18;34685:6;34633:80;:::i;:::-;34760:9;34754:4;34750:20;34745:2;34734:9;34730:18;34723:48;34788:108;34891:4;34882:6;34788:108;:::i;:::-;34780:116;;34906:72;34974:2;34963:9;34959:18;34950:6;34906:72;:::i;:::-;34988:73;35056:3;35045:9;35041:19;35032:6;34988:73;:::i;:::-;34237:831;;;;;;;;:::o;35074:807::-;35323:4;35361:3;35350:9;35346:19;35338:27;;35375:71;35443:1;35432:9;35428:17;35419:6;35375:71;:::i;:::-;35456:72;35524:2;35513:9;35509:18;35500:6;35456:72;:::i;:::-;35538:80;35614:2;35603:9;35599:18;35590:6;35538:80;:::i;:::-;35628;35704:2;35693:9;35689:18;35680:6;35628:80;:::i;:::-;35718:73;35786:3;35775:9;35771:19;35762:6;35718:73;:::i;:::-;35801;35869:3;35858:9;35854:19;35845:6;35801:73;:::i;:::-;35074:807;;;;;;;;;:::o;35887:143::-;35944:5;35975:6;35969:13;35960:22;;35991:33;36018:5;35991:33;:::i;:::-;35887:143;;;;:::o;36036:663::-;36124:6;36132;36140;36189:2;36177:9;36168:7;36164:23;36160:32;36157:119;;;36195:79;;:::i;:::-;36157:119;36315:1;36340:64;36396:7;36387:6;36376:9;36372:22;36340:64;:::i;:::-;36330:74;;36286:128;36453:2;36479:64;36535:7;36526:6;36515:9;36511:22;36479:64;:::i;:::-;36469:74;;36424:129;36592:2;36618:64;36674:7;36665:6;36654:9;36650:22;36618:64;:::i;:::-;36608:74;;36563:129;36036:663;;;;;:::o

Swarm Source

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