ETH Price: $2,527.13 (+0.86%)

Token

Groks Wife (GROKETTE)
 

Overview

Max Total Supply

10,000,000,000 GROKETTE

Holders

83

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
GROKSWIFE

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-09
*/

/*

https://t.me/GroksWife
https://twitter.com/Groks_Wife

https://x.com/PA4034/status/1733357738715988265?s=20

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.21;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    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 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 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 IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _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 _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    
}
 
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;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
       
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
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 GROKSWIFE is ERC20, Ownable {

    string _name = unicode"Groks Wife";
    string _symbol = unicode"GROKETTE";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    uint256 public maxTransaction;
    uint256 public contractSellTreshold;
    uint256 public maxWalletHolding;
 
    bool public areLimitsOn = true;
    bool public emptyContractFull = false;

    uint256 public totalBuyTax;
    uint256 public devBuyTax;
    uint256 public liqBuyTax;
 
    uint256 public totalSellTax;
    uint256 public devSellTax;
    uint256 public liqSellTax;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
   
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
       
 
        uint256 _devBuyTax = 25;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 25;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 10000000000 * 1e18;
 
        maxTransaction = totalSupply * 20 / 1000; // 2%
        maxWalletHolding = totalSupply * 20 / 1000; // 2% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%
 
        devBuyTax = _devBuyTax;
        liqBuyTax = _liqBuyTax;
        totalBuyTax = devBuyTax + liqBuyTax;
 
        devSellTax = _devSellTax;
        liqSellTax = _liqSellTax;
        totalSellTax = devSellTax + liqSellTax;
        devWallet = address(msg.sender);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(devWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

       
        _mint(address(this), totalSupply);
        
        
        
    }
 
    receive() external payable {
 
    }
 

    function goLive() external onlyOwner{



        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this));
        

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

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


    

    function removeStuckETHERR() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        require(ethBalance > 0, "ETH balance must be greater than 0");
        (bool success,) = address(devWallet).call{value: ethBalance}("");
        require(success, "Failed to clear ETH balance");
    }

    function removeStuckTokenBalance() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Token balance must be greater than 0");
        _transfer(address(this), devWallet, tokenBalance);
    }

    function RemLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function EnableEmptyContract(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function editFees(
        uint256 _devBuy,
        uint256 _devSell,
        uint256 _liqBuy,
        uint256 _liqSell
    ) external onlyOwner {
        devBuyTax = _devBuy;
        liqBuyTax = _liqBuy;
        totalBuyTax = devBuyTax + liqBuyTax;
        devSellTax = _devSell;
        liqSellTax = _liqSell;
        totalSellTax = devSellTax + liqSellTax;
       
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newDevWallet) external onlyOwner{
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableEmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RemLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"}],"name":"editFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"goLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeStuckETHERR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","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":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600a81526020017f47726f6b73205769666500000000000000000000000000000000000000000000815250600690816200004a919062000bcf565b506040518060400160405280600881526020017f47524f4b455454450000000000000000000000000000000000000000000000008152506007908162000091919062000bcf565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e290620009cf565b80601f01602080910402602001604051908101604052809291908181526020018280546200011090620009cf565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b5050505050600780546200017390620009cf565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a190620009cf565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000bcf565b50806004908162000218919062000bcf565b5050505f6200022c620004f660201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601990505f80601990505f806b204fce5e3e2502611000000090506103e8601482620002f7919062000ce0565b62000303919062000d57565b600c819055506103e86014826200031b919062000ce0565b62000327919062000d57565b600e819055506103e86001826200033f919062000ce0565b6200034b919062000d57565b600d81905550846011819055508360128190555060125460115462000371919062000d8e565b601081905550826014819055508160158190555060155460145462000397919062000d8e565b60138190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ff620003f1620004fd60201b60201c565b60016200052560201b60201c565b620004123060016200052560201b60201c565b6200042761dead60016200052560201b60201c565b6200045b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200052560201b60201c565b6200047d6200046f620004fd60201b60201c565b60016200066e60201b60201c565b620004903060016200066e60201b60201c565b620004a561dead60016200066e60201b60201c565b620004d9600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066e60201b60201c565b620004eb30826200076760201b60201c565b505050505062000f85565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000535620004f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005bd9062000e26565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000662919062000e62565b60405180910390a25050565b6200067e620004f660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200070f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007069062000e26565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cf9062000ecb565b60405180910390fd5b620007eb5f83836200090460201b60201c565b62000802816002546200090960201b90919060201c565b60028190555062000859815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200090960201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f8919062000efc565b60405180910390a35050565b505050565b5f80828462000919919062000d8e565b90508381101562000961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009589062000f65565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009e757607f821691505b602082108103620009fd57620009fc620009a2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a24565b62000a6d868362000a24565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ab762000ab162000aab8462000a85565b62000a8e565b62000a85565b9050919050565b5f819050919050565b62000ad28362000a97565b62000aea62000ae18262000abe565b84845462000a30565b825550505050565b5f90565b62000b0062000af2565b62000b0d81848462000ac7565b505050565b5b8181101562000b345762000b285f8262000af6565b60018101905062000b13565b5050565b601f82111562000b835762000b4d8162000a03565b62000b588462000a15565b8101602085101562000b68578190505b62000b8062000b778562000a15565b83018262000b12565b50505b505050565b5f82821c905092915050565b5f62000ba55f198460080262000b88565b1980831691505092915050565b5f62000bbf838362000b94565b9150826002028217905092915050565b62000bda826200096b565b67ffffffffffffffff81111562000bf65762000bf562000975565b5b62000c028254620009cf565b62000c0f82828562000b38565b5f60209050601f83116001811462000c45575f841562000c30578287015190505b62000c3c858262000bb2565b86555062000cab565b601f19841662000c558662000a03565b5f5b8281101562000c7e5784890151825560018201915060208501945060208101905062000c57565b8683101562000c9e578489015162000c9a601f89168262000b94565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000cec8262000a85565b915062000cf98362000a85565b925082820262000d098162000a85565b9150828204841483151762000d235762000d2262000cb3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000d638262000a85565b915062000d708362000a85565b92508262000d835762000d8262000d2a565b5b828204905092915050565b5f62000d9a8262000a85565b915062000da78362000a85565b925082820190508082111562000dc25762000dc162000cb3565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e0e60208362000dc8565b915062000e1b8262000dd8565b602082019050919050565b5f6020820190508181035f83015262000e3f8162000e00565b9050919050565b5f8115159050919050565b62000e5c8162000e46565b82525050565b5f60208201905062000e775f83018462000e51565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000eb3601f8362000dc8565b915062000ec08262000e7d565b602082019050919050565b5f6020820190508181035f83015262000ee48162000ea5565b9050919050565b62000ef68162000a85565b82525050565b5f60208201905062000f115f83018462000eeb565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f4d601b8362000dc8565b915062000f5a8262000f17565b602082019050919050565b5f6020820190508181035f83015262000f7e8162000f3f565b9050919050565b61465c8062000f935f395ff3fe60806040526004361061025f575f3560e01c80635de0f2a0116101435780639fccce32116100b5578063be85750411610079578063be857504146108b0578063c0246668146108da578063c3f70b5214610902578063dd62ed3e1461092c578063df6f93be14610968578063f2fde38b1461099257610266565b80639fccce32146107a8578063a457c2d7146107d2578063a9059cbb1461080e578063b62496f51461084a578063b69ef8a81461088657610266565b8063863cf2cc11610107578063863cf2cc146106c45780638da5cb5b146106ec578063945674fe1461071657806395d89b41146107405780639a7a23d61461076a5780639ee2e9241461079257610266565b80635de0f2a0146105f65780636c7e15c91461062057806370a082311461064a578063715018a6146106865780637571336a1461069c57610266565b806322eb6631116101dc5780633373fe83116101a05780633373fe83146104ea578063395093511461050057806346469afb1461053c57806348d791551461056657806349bd5a5e146105905780634fbee193146105ba57610266565b806322eb66311461042e57806323b872dd146104585780632c28f57914610494578063313ae728146104aa578063313ce567146104c057610266565b806318160ddd1161022357806318160ddd146103605780631816467f1461038a5780631a8145bb146103b25780631bff7898146103dc5780631d9305bf1461040657610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d057806310d5de53146102fa5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b91906135ee565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b5919061369f565b610a4a565b6040516102c791906136f7565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f191906136f7565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190613710565b610a79565b60405161032d91906136f7565b60405180910390f35b348015610341575f80fd5b5061034a610a96565b6040516103579190613796565b60405180910390f35b34801561036b575f80fd5b50610374610abb565b60405161038191906137be565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190613710565b610ac4565b005b3480156103bd575f80fd5b506103c6610c18565b6040516103d391906137be565b60405180910390f35b3480156103e7575f80fd5b506103f0610c1e565b6040516103fd91906137be565b60405180910390f35b348015610411575f80fd5b5061042c600480360381019061042791906137d7565b610c24565b005b348015610439575f80fd5b50610442610d08565b60405161044f91906137be565b60405180910390f35b348015610463575f80fd5b5061047e6004803603810190610479919061383b565b610d0e565b60405161048b91906136f7565b60405180910390f35b34801561049f575f80fd5b506104a8610de2565b005b3480156104b5575f80fd5b506104be6111d0565b005b3480156104cb575f80fd5b506104d4611379565b6040516104e191906138a6565b60405180910390f35b3480156104f5575f80fd5b506104fe611381565b005b34801561050b575f80fd5b506105266004803603810190610521919061369f565b611432565b60405161053391906136f7565b60405180910390f35b348015610547575f80fd5b506105506114e0565b60405161055d91906137be565b60405180910390f35b348015610571575f80fd5b5061057a6114e6565b60405161058791906137be565b60405180910390f35b34801561059b575f80fd5b506105a46114ec565b6040516105b191906138ce565b60405180910390f35b3480156105c5575f80fd5b506105e060048036038101906105db9190613710565b611511565b6040516105ed91906136f7565b60405180910390f35b348015610601575f80fd5b5061060a611563565b60405161061791906137be565b60405180910390f35b34801561062b575f80fd5b50610634611569565b60405161064191906137be565b60405180910390f35b348015610655575f80fd5b50610670600480360381019061066b9190613710565b61156f565b60405161067d91906137be565b60405180910390f35b348015610691575f80fd5b5061069a6115b4565b005b3480156106a7575f80fd5b506106c260048036038101906106bd9190613911565b611707565b005b3480156106cf575f80fd5b506106ea60048036038101906106e5919061394f565b6117f5565b005b3480156106f7575f80fd5b506107006118a8565b60405161070d91906138ce565b60405180910390f35b348015610721575f80fd5b5061072a6118d0565b60405161073791906136f7565b60405180910390f35b34801561074b575f80fd5b506107546118e3565b60405161076191906135ee565b60405180910390f35b348015610775575f80fd5b50610790600480360381019061078b9190613911565b611973565b005b34801561079d575f80fd5b506107a6611aa6565b005b3480156107b3575f80fd5b506107bc611bb9565b6040516107c991906137be565b60405180910390f35b3480156107dd575f80fd5b506107f860048036038101906107f3919061369f565b611bbf565b60405161080591906136f7565b60405180910390f35b348015610819575f80fd5b50610834600480360381019061082f919061369f565b611c87565b60405161084191906136f7565b60405180910390f35b348015610855575f80fd5b50610870600480360381019061086b9190613710565b611ca4565b60405161087d91906136f7565b60405180910390f35b348015610891575f80fd5b5061089a611cc1565b6040516108a791906137be565b60405180910390f35b3480156108bb575f80fd5b506108c4611cc7565b6040516108d191906137be565b60405180910390f35b3480156108e5575f80fd5b5061090060048036038101906108fb9190613911565b611ccd565b005b34801561090d575f80fd5b50610916611e09565b60405161092391906137be565b60405180910390f35b348015610937575f80fd5b50610952600480360381019061094d919061397a565b611e0f565b60405161095f91906137be565b60405180910390f35b348015610973575f80fd5b5061097c611e91565b60405161098991906137be565b60405180910390f35b34801561099d575f80fd5b506109b860048036038101906109b39190613710565b611e97565b005b6060600380546109c9906139e5565b80601f01602080910402602001604051908101604052809291908181526020018280546109f5906139e5565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56611feb565b8484611ff2565b6001905092915050565b600f5f9054906101000a900460ff1681565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610acc611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613a5f565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b610c2c611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613a5f565b60405180910390fd5b8360118190555081601281905550601254601154610cd89190613aaa565b6010819055508260148190555080601581905550601554601454610cfc9190613aaa565b60138190555050505050565b60145481565b5f610d1a8484846121b5565b610dd784610d26611feb565b610dd2856040518060600160405280602881526020016145da6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d89611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ada9092919063ffffffff16565b611ff2565b600190509392505050565b610dea611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90613a5f565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610e9b816001611707565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190613af1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd19190613af1565b6040518363ffffffff1660e01b8152600401610fee929190613b1c565b6020604051808303815f875af115801561100a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102e9190613af1565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061109960095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611707565b6110c560095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612b3c565b5f4790505f6110d33061156f565b90506111013060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ff2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161118796959493929190613b7c565b60606040518083038185885af11580156111a3573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111c89190613bef565b505050505050565b6111d8611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90613a5f565b60405180910390fd5b5f4790505f81116112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390613caf565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516112f290613cfa565b5f6040518083038185875af1925050503d805f811461132c576040519150601f19603f3d011682016040523d82523d5f602084013e611331565b606091505b5050905080611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90613d58565b60405180910390fd5b5050565b5f6012905090565b611389611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e90613a5f565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b5f6114d661143e611feb565b846114d18560015f61144e611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bda90919063ffffffff16565b611ff2565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6115bc611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190613a5f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61170f611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179490613a5f565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117fd611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613a5f565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b6060600480546118f2906139e5565b80601f016020809104026020016040519081016040528092919081815260200182805461191e906139e5565b80156119695780601f1061194057610100808354040283529160200191611969565b820191905f5260205f20905b81548152906001019060200180831161194c57829003601f168201915b5050505050905090565b61197b611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090613a5f565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613de6565b60405180910390fd5b611aa28282612b3c565b5050565b611aae611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3390613a5f565b60405180910390fd5b5f611b463061156f565b90505f8111611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190613e74565b60405180910390fd5b611bb630600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121b5565b50565b60175481565b5f611c7d611bcb611feb565b84611c78856040518060600160405280602581526020016146026025913960015f611bf4611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ada9092919063ffffffff16565b611ff2565b6001905092915050565b5f611c9a611c93611feb565b84846121b5565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b611cd5611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5a90613a5f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dfd91906136f7565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611e9f611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490613a5f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790613f02565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613f90565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a891906137be565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a9061401e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612291576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612288906140ac565b60405180910390fd5b5f81036122a8576122a383835f612c37565b612ad5565b600f5f9054906101000a900460ff161561269d576122c46118a8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561233257506123026118a8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561236a57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123a4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123bd5750600960149054906101000a900460ff16155b1561269c57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561245f5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561250657600c548111156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a09061413a565b60405180910390fd5b600e546124b58361156f565b826124c09190613aaa565b1115612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f8906141a2565b60405180910390fd5b61269b565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125a35750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125f257600c548111156125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e490614230565b60405180910390fd5b61269a565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661269957600e5461264c8361156f565b826126579190613aaa565b1115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f906141a2565b60405180910390fd5b5b5b5b5b5b5f6126a73061156f565b90505f600d5482101590508080156126cc5750600960149054906101000a900460ff16155b801561271f5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612772575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127c5575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612808576001600960146101000a81548160ff0219169083151502179055506127ed612ec0565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128b7575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128c0575f90505b5f8115612ac557601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561291e57505f601354115b156129b65761294b606461293d601354886130e690919063ffffffff16565b61315d90919063ffffffff16565b90506013546015548261295e919061424e565b61296891906142bc565b60165f8282546129789190613aaa565b9250508190555060135460145482612990919061424e565b61299a91906142bc565b60175f8282546129aa9190613aaa565b92505081905550612aa2565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a0d57505f601054115b15612aa157612a3a6064612a2c601054886130e690919063ffffffff16565b61315d90919063ffffffff16565b905060105460125482612a4d919061424e565b612a5791906142bc565b60165f828254612a679190613aaa565b9250508190555060105460115482612a7f919061424e565b612a8991906142bc565b60175f828254612a999190613aaa565b925050819055505b5b5f811115612ab657612ab5873083612c37565b5b8085612ac291906142ec565b94505b612ad0878787612c37565b505050505b505050565b5f838311158290612b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1891906135ee565b60405180910390fd5b505f8385612b2f91906142ec565b9050809150509392505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f808284612be89190613aaa565b905083811015612c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2490614369565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9c9061401e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0a906140ac565b60405180910390fd5b612d1e8383836131a6565b612d87816040518060600160405280602681526020016145b4602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ada9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e16815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bda90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612eb391906137be565b60405180910390a3505050565b5f612eca3061156f565b90505f601754601654612edd9190613aaa565b90505f80831480612eed57505f82145b15612efa575050506130e4565b5f1515600f60019054906101000a900460ff16151503612f41576014600d54612f23919061424e565b831115612f3c576014600d54612f39919061424e565b92505b612f4d565b612f4a3061156f565b92505b5f60028360165486612f5f919061424e565b612f6991906142bc565b612f7391906142bc565b90505f612f8982866131ab90919063ffffffff16565b90505f479050612f98826131f4565b5f612fac82476131ab90919063ffffffff16565b90505f612fd687612fc8601754856130e690919063ffffffff16565b61315d90919063ffffffff16565b90505f8183612fe591906142ec565b90505f6016819055505f6017819055505f8611801561300357505f81115b1561305057613012868261342a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161304793929190614387565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161309590613cfa565b5f6040518083038185875af1925050503d805f81146130cf576040519150601f19603f3d011682016040523d82523d5f602084013e6130d4565b606091505b5050809750505050505050505050505b565b5f8083036130f6575f9050613157565b5f8284613103919061424e565b905082848261311291906142bc565b14613152576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131499061442c565b60405180910390fd5b809150505b92915050565b5f61319e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613503565b905092915050565b505050565b5f6131ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ada565b905092915050565b5f600267ffffffffffffffff8111156132105761320f61444a565b5b60405190808252806020026020018201604052801561323e5781602001602082028036833780820191505090505b50905030815f8151811061325557613254614477565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061331d9190613af1565b8160018151811061333157613330614477565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133973060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ff2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016133f995949392919061455b565b5f604051808303815f87803b158015613410575f80fd5b505af1158015613422573d5f803e3d5ffd5b505050505050565b6134563060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ff2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016134bb96959493929190613b7c565b60606040518083038185885af11580156134d7573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906134fc9190613bef565b5050505050565b5f8083118290613549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354091906135ee565b60405180910390fd5b505f838561355791906142bc565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561359b578082015181840152602081019050613580565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135c082613564565b6135ca818561356e565b93506135da81856020860161357e565b6135e3816135a6565b840191505092915050565b5f6020820190508181035f83015261360681846135b6565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61363b82613612565b9050919050565b61364b81613631565b8114613655575f80fd5b50565b5f8135905061366681613642565b92915050565b5f819050919050565b61367e8161366c565b8114613688575f80fd5b50565b5f8135905061369981613675565b92915050565b5f80604083850312156136b5576136b461360e565b5b5f6136c285828601613658565b92505060206136d38582860161368b565b9150509250929050565b5f8115159050919050565b6136f1816136dd565b82525050565b5f60208201905061370a5f8301846136e8565b92915050565b5f602082840312156137255761372461360e565b5b5f61373284828501613658565b91505092915050565b5f819050919050565b5f61375e61375961375484613612565b61373b565b613612565b9050919050565b5f61376f82613744565b9050919050565b5f61378082613765565b9050919050565b61379081613776565b82525050565b5f6020820190506137a95f830184613787565b92915050565b6137b88161366c565b82525050565b5f6020820190506137d15f8301846137af565b92915050565b5f805f80608085870312156137ef576137ee61360e565b5b5f6137fc8782880161368b565b945050602061380d8782880161368b565b935050604061381e8782880161368b565b925050606061382f8782880161368b565b91505092959194509250565b5f805f606084860312156138525761385161360e565b5b5f61385f86828701613658565b935050602061387086828701613658565b92505060406138818682870161368b565b9150509250925092565b5f60ff82169050919050565b6138a08161388b565b82525050565b5f6020820190506138b95f830184613897565b92915050565b6138c881613631565b82525050565b5f6020820190506138e15f8301846138bf565b92915050565b6138f0816136dd565b81146138fa575f80fd5b50565b5f8135905061390b816138e7565b92915050565b5f80604083850312156139275761392661360e565b5b5f61393485828601613658565b9250506020613945858286016138fd565b9150509250929050565b5f602082840312156139645761396361360e565b5b5f613971848285016138fd565b91505092915050565b5f80604083850312156139905761398f61360e565b5b5f61399d85828601613658565b92505060206139ae85828601613658565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139fc57607f821691505b602082108103613a0f57613a0e6139b8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a4960208361356e565b9150613a5482613a15565b602082019050919050565b5f6020820190508181035f830152613a7681613a3d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ab48261366c565b9150613abf8361366c565b9250828201905080821115613ad757613ad6613a7d565b5b92915050565b5f81519050613aeb81613642565b92915050565b5f60208284031215613b0657613b0561360e565b5b5f613b1384828501613add565b91505092915050565b5f604082019050613b2f5f8301856138bf565b613b3c60208301846138bf565b9392505050565b5f819050919050565b5f613b66613b61613b5c84613b43565b61373b565b61366c565b9050919050565b613b7681613b4c565b82525050565b5f60c082019050613b8f5f8301896138bf565b613b9c60208301886137af565b613ba96040830187613b6d565b613bb66060830186613b6d565b613bc360808301856138bf565b613bd060a08301846137af565b979650505050505050565b5f81519050613be981613675565b92915050565b5f805f60608486031215613c0657613c0561360e565b5b5f613c1386828701613bdb565b9350506020613c2486828701613bdb565b9250506040613c3586828701613bdb565b9150509250925092565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c9960228361356e565b9150613ca482613c3f565b604082019050919050565b5f6020820190508181035f830152613cc681613c8d565b9050919050565b5f81905092915050565b50565b5f613ce55f83613ccd565b9150613cf082613cd7565b5f82019050919050565b5f613d0482613cda565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613d42601b8361356e565b9150613d4d82613d0e565b602082019050919050565b5f6020820190508181035f830152613d6f81613d36565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613dd060398361356e565b9150613ddb82613d76565b604082019050919050565b5f6020820190508181035f830152613dfd81613dc4565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613e5e60248361356e565b9150613e6982613e04565b604082019050919050565b5f6020820190508181035f830152613e8b81613e52565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613eec60248361356e565b9150613ef782613e92565b604082019050919050565b5f6020820190508181035f830152613f1981613ee0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f7a60228361356e565b9150613f8582613f20565b604082019050919050565b5f6020820190508181035f830152613fa781613f6e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61400860258361356e565b915061401382613fae565b604082019050919050565b5f6020820190508181035f83015261403581613ffc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61409660238361356e565b91506140a18261403c565b604082019050919050565b5f6020820190508181035f8301526140c38161408a565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61412460358361356e565b915061412f826140ca565b604082019050919050565b5f6020820190508181035f83015261415181614118565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61418c60138361356e565b915061419782614158565b602082019050919050565b5f6020820190508181035f8301526141b981614180565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61421a60368361356e565b9150614225826141c0565b604082019050919050565b5f6020820190508181035f8301526142478161420e565b9050919050565b5f6142588261366c565b91506142638361366c565b92508282026142718161366c565b9150828204841483151761428857614287613a7d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6142c68261366c565b91506142d18361366c565b9250826142e1576142e061428f565b5b828204905092915050565b5f6142f68261366c565b91506143018361366c565b925082820390508181111561431957614318613a7d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614353601b8361356e565b915061435e8261431f565b602082019050919050565b5f6020820190508181035f83015261438081614347565b9050919050565b5f60608201905061439a5f8301866137af565b6143a760208301856137af565b6143b460408301846137af565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61441660218361356e565b9150614421826143bc565b604082019050919050565b5f6020820190508181035f8301526144438161440a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6144d681613631565b82525050565b5f6144e783836144cd565b60208301905092915050565b5f602082019050919050565b5f614509826144a4565b61451381856144ae565b935061451e836144be565b805f5b8381101561454e57815161453588826144dc565b9750614540836144f3565b925050600181019050614521565b5085935050505092915050565b5f60a08201905061456e5f8301886137af565b61457b6020830187613b6d565b818103604083015261458d81866144ff565b905061459c60608301856138bf565b6145a960808301846137af565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203aed1fc9eca6499bceedcc1099b22b2b7966bc56884b1b55ff7d1d1b63c467cf64736f6c63430008150033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c80635de0f2a0116101435780639fccce32116100b5578063be85750411610079578063be857504146108b0578063c0246668146108da578063c3f70b5214610902578063dd62ed3e1461092c578063df6f93be14610968578063f2fde38b1461099257610266565b80639fccce32146107a8578063a457c2d7146107d2578063a9059cbb1461080e578063b62496f51461084a578063b69ef8a81461088657610266565b8063863cf2cc11610107578063863cf2cc146106c45780638da5cb5b146106ec578063945674fe1461071657806395d89b41146107405780639a7a23d61461076a5780639ee2e9241461079257610266565b80635de0f2a0146105f65780636c7e15c91461062057806370a082311461064a578063715018a6146106865780637571336a1461069c57610266565b806322eb6631116101dc5780633373fe83116101a05780633373fe83146104ea578063395093511461050057806346469afb1461053c57806348d791551461056657806349bd5a5e146105905780634fbee193146105ba57610266565b806322eb66311461042e57806323b872dd146104585780632c28f57914610494578063313ae728146104aa578063313ce567146104c057610266565b806318160ddd1161022357806318160ddd146103605780631816467f1461038a5780631a8145bb146103b25780631bff7898146103dc5780631d9305bf1461040657610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d057806310d5de53146102fa5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b91906135ee565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b5919061369f565b610a4a565b6040516102c791906136f7565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f191906136f7565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190613710565b610a79565b60405161032d91906136f7565b60405180910390f35b348015610341575f80fd5b5061034a610a96565b6040516103579190613796565b60405180910390f35b34801561036b575f80fd5b50610374610abb565b60405161038191906137be565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190613710565b610ac4565b005b3480156103bd575f80fd5b506103c6610c18565b6040516103d391906137be565b60405180910390f35b3480156103e7575f80fd5b506103f0610c1e565b6040516103fd91906137be565b60405180910390f35b348015610411575f80fd5b5061042c600480360381019061042791906137d7565b610c24565b005b348015610439575f80fd5b50610442610d08565b60405161044f91906137be565b60405180910390f35b348015610463575f80fd5b5061047e6004803603810190610479919061383b565b610d0e565b60405161048b91906136f7565b60405180910390f35b34801561049f575f80fd5b506104a8610de2565b005b3480156104b5575f80fd5b506104be6111d0565b005b3480156104cb575f80fd5b506104d4611379565b6040516104e191906138a6565b60405180910390f35b3480156104f5575f80fd5b506104fe611381565b005b34801561050b575f80fd5b506105266004803603810190610521919061369f565b611432565b60405161053391906136f7565b60405180910390f35b348015610547575f80fd5b506105506114e0565b60405161055d91906137be565b60405180910390f35b348015610571575f80fd5b5061057a6114e6565b60405161058791906137be565b60405180910390f35b34801561059b575f80fd5b506105a46114ec565b6040516105b191906138ce565b60405180910390f35b3480156105c5575f80fd5b506105e060048036038101906105db9190613710565b611511565b6040516105ed91906136f7565b60405180910390f35b348015610601575f80fd5b5061060a611563565b60405161061791906137be565b60405180910390f35b34801561062b575f80fd5b50610634611569565b60405161064191906137be565b60405180910390f35b348015610655575f80fd5b50610670600480360381019061066b9190613710565b61156f565b60405161067d91906137be565b60405180910390f35b348015610691575f80fd5b5061069a6115b4565b005b3480156106a7575f80fd5b506106c260048036038101906106bd9190613911565b611707565b005b3480156106cf575f80fd5b506106ea60048036038101906106e5919061394f565b6117f5565b005b3480156106f7575f80fd5b506107006118a8565b60405161070d91906138ce565b60405180910390f35b348015610721575f80fd5b5061072a6118d0565b60405161073791906136f7565b60405180910390f35b34801561074b575f80fd5b506107546118e3565b60405161076191906135ee565b60405180910390f35b348015610775575f80fd5b50610790600480360381019061078b9190613911565b611973565b005b34801561079d575f80fd5b506107a6611aa6565b005b3480156107b3575f80fd5b506107bc611bb9565b6040516107c991906137be565b60405180910390f35b3480156107dd575f80fd5b506107f860048036038101906107f3919061369f565b611bbf565b60405161080591906136f7565b60405180910390f35b348015610819575f80fd5b50610834600480360381019061082f919061369f565b611c87565b60405161084191906136f7565b60405180910390f35b348015610855575f80fd5b50610870600480360381019061086b9190613710565b611ca4565b60405161087d91906136f7565b60405180910390f35b348015610891575f80fd5b5061089a611cc1565b6040516108a791906137be565b60405180910390f35b3480156108bb575f80fd5b506108c4611cc7565b6040516108d191906137be565b60405180910390f35b3480156108e5575f80fd5b5061090060048036038101906108fb9190613911565b611ccd565b005b34801561090d575f80fd5b50610916611e09565b60405161092391906137be565b60405180910390f35b348015610937575f80fd5b50610952600480360381019061094d919061397a565b611e0f565b60405161095f91906137be565b60405180910390f35b348015610973575f80fd5b5061097c611e91565b60405161098991906137be565b60405180910390f35b34801561099d575f80fd5b506109b860048036038101906109b39190613710565b611e97565b005b6060600380546109c9906139e5565b80601f01602080910402602001604051908101604052809291908181526020018280546109f5906139e5565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56611feb565b8484611ff2565b6001905092915050565b600f5f9054906101000a900460ff1681565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610acc611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613a5f565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b610c2c611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613a5f565b60405180910390fd5b8360118190555081601281905550601254601154610cd89190613aaa565b6010819055508260148190555080601581905550601554601454610cfc9190613aaa565b60138190555050505050565b60145481565b5f610d1a8484846121b5565b610dd784610d26611feb565b610dd2856040518060600160405280602881526020016145da6028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d89611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ada9092919063ffffffff16565b611ff2565b600190509392505050565b610dea611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90613a5f565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610e9b816001611707565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190613af1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd19190613af1565b6040518363ffffffff1660e01b8152600401610fee929190613b1c565b6020604051808303815f875af115801561100a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102e9190613af1565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061109960095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611707565b6110c560095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612b3c565b5f4790505f6110d33061156f565b90506111013060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ff2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161118796959493929190613b7c565b60606040518083038185885af11580156111a3573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111c89190613bef565b505050505050565b6111d8611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90613a5f565b60405180910390fd5b5f4790505f81116112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390613caf565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516112f290613cfa565b5f6040518083038185875af1925050503d805f811461132c576040519150601f19603f3d011682016040523d82523d5f602084013e611331565b606091505b5050905080611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90613d58565b60405180910390fd5b5050565b5f6012905090565b611389611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e90613a5f565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b5f6114d661143e611feb565b846114d18560015f61144e611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bda90919063ffffffff16565b611ff2565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6115bc611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190613a5f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61170f611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179490613a5f565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6117fd611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613a5f565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b6060600480546118f2906139e5565b80601f016020809104026020016040519081016040528092919081815260200182805461191e906139e5565b80156119695780601f1061194057610100808354040283529160200191611969565b820191905f5260205f20905b81548152906001019060200180831161194c57829003601f168201915b5050505050905090565b61197b611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090613a5f565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613de6565b60405180910390fd5b611aa28282612b3c565b5050565b611aae611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3390613a5f565b60405180910390fd5b5f611b463061156f565b90505f8111611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190613e74565b60405180910390fd5b611bb630600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121b5565b50565b60175481565b5f611c7d611bcb611feb565b84611c78856040518060600160405280602581526020016146026025913960015f611bf4611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ada9092919063ffffffff16565b611ff2565b6001905092915050565b5f611c9a611c93611feb565b84846121b5565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b611cd5611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5a90613a5f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611dfd91906136f7565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611e9f611feb565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2490613a5f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790613f02565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590613f90565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a891906137be565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a9061401e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612291576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612288906140ac565b60405180910390fd5b5f81036122a8576122a383835f612c37565b612ad5565b600f5f9054906101000a900460ff161561269d576122c46118a8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561233257506123026118a8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561236a57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123a4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123bd5750600960149054906101000a900460ff16155b1561269c57601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561245f5750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561250657600c548111156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a09061413a565b60405180910390fd5b600e546124b58361156f565b826124c09190613aaa565b1115612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f8906141a2565b60405180910390fd5b61269b565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125a35750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125f257600c548111156125ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e490614230565b60405180910390fd5b61269a565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661269957600e5461264c8361156f565b826126579190613aaa565b1115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f906141a2565b60405180910390fd5b5b5b5b5b5b5f6126a73061156f565b90505f600d5482101590508080156126cc5750600960149054906101000a900460ff16155b801561271f5750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612772575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127c5575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612808576001600960146101000a81548160ff0219169083151502179055506127ed612ec0565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128b7575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128c0575f90505b5f8115612ac557601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561291e57505f601354115b156129b65761294b606461293d601354886130e690919063ffffffff16565b61315d90919063ffffffff16565b90506013546015548261295e919061424e565b61296891906142bc565b60165f8282546129789190613aaa565b9250508190555060135460145482612990919061424e565b61299a91906142bc565b60175f8282546129aa9190613aaa565b92505081905550612aa2565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a0d57505f601054115b15612aa157612a3a6064612a2c601054886130e690919063ffffffff16565b61315d90919063ffffffff16565b905060105460125482612a4d919061424e565b612a5791906142bc565b60165f828254612a679190613aaa565b9250508190555060105460115482612a7f919061424e565b612a8991906142bc565b60175f828254612a999190613aaa565b925050819055505b5b5f811115612ab657612ab5873083612c37565b5b8085612ac291906142ec565b94505b612ad0878787612c37565b505050505b505050565b5f838311158290612b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1891906135ee565b60405180910390fd5b505f8385612b2f91906142ec565b9050809150509392505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f808284612be89190613aaa565b905083811015612c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2490614369565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9c9061401e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0a906140ac565b60405180910390fd5b612d1e8383836131a6565b612d87816040518060600160405280602681526020016145b4602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ada9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e16815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bda90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612eb391906137be565b60405180910390a3505050565b5f612eca3061156f565b90505f601754601654612edd9190613aaa565b90505f80831480612eed57505f82145b15612efa575050506130e4565b5f1515600f60019054906101000a900460ff16151503612f41576014600d54612f23919061424e565b831115612f3c576014600d54612f39919061424e565b92505b612f4d565b612f4a3061156f565b92505b5f60028360165486612f5f919061424e565b612f6991906142bc565b612f7391906142bc565b90505f612f8982866131ab90919063ffffffff16565b90505f479050612f98826131f4565b5f612fac82476131ab90919063ffffffff16565b90505f612fd687612fc8601754856130e690919063ffffffff16565b61315d90919063ffffffff16565b90505f8183612fe591906142ec565b90505f6016819055505f6017819055505f8611801561300357505f81115b1561305057613012868261342a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161304793929190614387565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161309590613cfa565b5f6040518083038185875af1925050503d805f81146130cf576040519150601f19603f3d011682016040523d82523d5f602084013e6130d4565b606091505b5050809750505050505050505050505b565b5f8083036130f6575f9050613157565b5f8284613103919061424e565b905082848261311291906142bc565b14613152576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131499061442c565b60405180910390fd5b809150505b92915050565b5f61319e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613503565b905092915050565b505050565b5f6131ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ada565b905092915050565b5f600267ffffffffffffffff8111156132105761320f61444a565b5b60405190808252806020026020018201604052801561323e5781602001602082028036833780820191505090505b50905030815f8151811061325557613254614477565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061331d9190613af1565b8160018151811061333157613330614477565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133973060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ff2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016133f995949392919061455b565b5f604051808303815f87803b158015613410575f80fd5b505af1158015613422573d5f803e3d5ffd5b505050505050565b6134563060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ff2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016134bb96959493929190613b7c565b60606040518083038185885af11580156134d7573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906134fc9190613bef565b5050505050565b5f8083118290613549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354091906135ee565b60405180910390fd5b505f838561355791906142bc565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561359b578082015181840152602081019050613580565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135c082613564565b6135ca818561356e565b93506135da81856020860161357e565b6135e3816135a6565b840191505092915050565b5f6020820190508181035f83015261360681846135b6565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61363b82613612565b9050919050565b61364b81613631565b8114613655575f80fd5b50565b5f8135905061366681613642565b92915050565b5f819050919050565b61367e8161366c565b8114613688575f80fd5b50565b5f8135905061369981613675565b92915050565b5f80604083850312156136b5576136b461360e565b5b5f6136c285828601613658565b92505060206136d38582860161368b565b9150509250929050565b5f8115159050919050565b6136f1816136dd565b82525050565b5f60208201905061370a5f8301846136e8565b92915050565b5f602082840312156137255761372461360e565b5b5f61373284828501613658565b91505092915050565b5f819050919050565b5f61375e61375961375484613612565b61373b565b613612565b9050919050565b5f61376f82613744565b9050919050565b5f61378082613765565b9050919050565b61379081613776565b82525050565b5f6020820190506137a95f830184613787565b92915050565b6137b88161366c565b82525050565b5f6020820190506137d15f8301846137af565b92915050565b5f805f80608085870312156137ef576137ee61360e565b5b5f6137fc8782880161368b565b945050602061380d8782880161368b565b935050604061381e8782880161368b565b925050606061382f8782880161368b565b91505092959194509250565b5f805f606084860312156138525761385161360e565b5b5f61385f86828701613658565b935050602061387086828701613658565b92505060406138818682870161368b565b9150509250925092565b5f60ff82169050919050565b6138a08161388b565b82525050565b5f6020820190506138b95f830184613897565b92915050565b6138c881613631565b82525050565b5f6020820190506138e15f8301846138bf565b92915050565b6138f0816136dd565b81146138fa575f80fd5b50565b5f8135905061390b816138e7565b92915050565b5f80604083850312156139275761392661360e565b5b5f61393485828601613658565b9250506020613945858286016138fd565b9150509250929050565b5f602082840312156139645761396361360e565b5b5f613971848285016138fd565b91505092915050565b5f80604083850312156139905761398f61360e565b5b5f61399d85828601613658565b92505060206139ae85828601613658565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139fc57607f821691505b602082108103613a0f57613a0e6139b8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a4960208361356e565b9150613a5482613a15565b602082019050919050565b5f6020820190508181035f830152613a7681613a3d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ab48261366c565b9150613abf8361366c565b9250828201905080821115613ad757613ad6613a7d565b5b92915050565b5f81519050613aeb81613642565b92915050565b5f60208284031215613b0657613b0561360e565b5b5f613b1384828501613add565b91505092915050565b5f604082019050613b2f5f8301856138bf565b613b3c60208301846138bf565b9392505050565b5f819050919050565b5f613b66613b61613b5c84613b43565b61373b565b61366c565b9050919050565b613b7681613b4c565b82525050565b5f60c082019050613b8f5f8301896138bf565b613b9c60208301886137af565b613ba96040830187613b6d565b613bb66060830186613b6d565b613bc360808301856138bf565b613bd060a08301846137af565b979650505050505050565b5f81519050613be981613675565b92915050565b5f805f60608486031215613c0657613c0561360e565b5b5f613c1386828701613bdb565b9350506020613c2486828701613bdb565b9250506040613c3586828701613bdb565b9150509250925092565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c9960228361356e565b9150613ca482613c3f565b604082019050919050565b5f6020820190508181035f830152613cc681613c8d565b9050919050565b5f81905092915050565b50565b5f613ce55f83613ccd565b9150613cf082613cd7565b5f82019050919050565b5f613d0482613cda565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613d42601b8361356e565b9150613d4d82613d0e565b602082019050919050565b5f6020820190508181035f830152613d6f81613d36565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613dd060398361356e565b9150613ddb82613d76565b604082019050919050565b5f6020820190508181035f830152613dfd81613dc4565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613e5e60248361356e565b9150613e6982613e04565b604082019050919050565b5f6020820190508181035f830152613e8b81613e52565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613eec60248361356e565b9150613ef782613e92565b604082019050919050565b5f6020820190508181035f830152613f1981613ee0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f7a60228361356e565b9150613f8582613f20565b604082019050919050565b5f6020820190508181035f830152613fa781613f6e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61400860258361356e565b915061401382613fae565b604082019050919050565b5f6020820190508181035f83015261403581613ffc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61409660238361356e565b91506140a18261403c565b604082019050919050565b5f6020820190508181035f8301526140c38161408a565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61412460358361356e565b915061412f826140ca565b604082019050919050565b5f6020820190508181035f83015261415181614118565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61418c60138361356e565b915061419782614158565b602082019050919050565b5f6020820190508181035f8301526141b981614180565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61421a60368361356e565b9150614225826141c0565b604082019050919050565b5f6020820190508181035f8301526142478161420e565b9050919050565b5f6142588261366c565b91506142638361366c565b92508282026142718161366c565b9150828204841483151761428857614287613a7d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6142c68261366c565b91506142d18361366c565b9250826142e1576142e061428f565b5b828204905092915050565b5f6142f68261366c565b91506143018361366c565b925082820390508181111561431957614318613a7d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614353601b8361356e565b915061435e8261431f565b602082019050919050565b5f6020820190508181035f83015261438081614347565b9050919050565b5f60608201905061439a5f8301866137af565b6143a760208301856137af565b6143b460408301846137af565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61441660218361356e565b9150614421826143bc565b604082019050919050565b5f6020820190508181035f8301526144438161440a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6144d681613631565b82525050565b5f6144e783836144cd565b60208301905092915050565b5f602082019050919050565b5f614509826144a4565b61451381856144ae565b935061451e836144be565b805f5b8381101561454e57815161453588826144dc565b9750614540836144f3565b925050600181019050614521565b5085935050505092915050565b5f60a08201905061456e5f8301886137af565b61457b6020830187613b6d565b818103604083015261458d81866144ff565b905061459c60608301856138bf565b6145a960808301846137af565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203aed1fc9eca6499bceedcc1099b22b2b7966bc56884b1b55ff7d1d1b63c467cf64736f6c63430008150033

Deployed Bytecode Sourcemap

17613:12459:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4876:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5790:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18078:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18651:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17779:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5197:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24029:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18360:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18259:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22993:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18293:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5967:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21004:1026;;;;;;;;;;;;;:::i;:::-;;22048:314;;;;;;;;;;;;;:::i;:::-;;5096:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22634:78;;;;;;;;;;;;;:::i;:::-;;6330:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18161:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18037:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17827:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24202:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17995:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18194:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5313:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10857:148;;;;;;;;;;;;;:::i;:::-;;22837:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22721:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10643:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18115:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4984:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23578:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22370:256;;;;;;;;;;;;;:::i;:::-;;18400:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6556:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5448:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18874:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17895:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18325:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23387:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17959:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5631:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18225:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11013:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4876:100;4930:13;4963:5;4956:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4876:100;:::o;5790:169::-;5873:4;5890:39;5899:12;:10;:12::i;:::-;5913:7;5922:6;5890:8;:39::i;:::-;5947:4;5940:11;;5790:169;;;;:::o;18078:30::-;;;;;;;;;;;;;:::o;18651:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17779:41::-;;;;;;;;;;;;;:::o;5197:108::-;5258:7;5285:12;;5278:19;;5197:108;:::o;24029:165::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24141:9:::1;;;;;;;;;;;24110:41;;24127:12;24110:41;;;;;;;;;;;;24174:12;24162:9;;:24;;;;;;;;;;;;;;;;;;24029:165:::0;:::o;18360:33::-;;;;:::o;18259:27::-;;;;:::o;22993:386::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23166:7:::1;23154:9;:19;;;;23196:7;23184:9;:19;;;;23240:9;;23228;;:21;;;;:::i;:::-;23214:11;:35;;;;23273:8;23260:10;:21;;;;23305:8;23292:10;:21;;;;23352:10;;23339;;:23;;;;:::i;:::-;23324:12;:38;;;;22993:386:::0;;;;:::o;18293:25::-;;;;:::o;5967:355::-;6107:4;6124:36;6134:6;6142:9;6153:6;6124:9;:36::i;:::-;6171:121;6180:6;6188:12;:10;:12::i;:::-;6202:89;6240:6;6202:89;;;;;;;;;;;;;;;;;:11;:19;6214:6;6202:19;;;;;;;;;;;;;;;:33;6222:12;:10;:12::i;:::-;6202:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6171:8;:121::i;:::-;6310:4;6303:11;;5967:355;;;;;:::o;21004:1026::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21057:35:::1;21114:42;21057:100;;21171:58;21205:16;21224:4;21171:25;:58::i;:::-;21258:16;21240:15;;:34;;;;;;;;;;;;;;;;;;21322:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21304:56;;;21369:4;21376:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21304:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21288:13;;:112;;;;;;;;;;;;;;;;;;21411:55;21445:13;;;;;;;;;;;21461:4;21411:25;:55::i;:::-;21477:58;21514:13;;;;;;;;;;;21530:4;21477:28;:58::i;:::-;21556:17;21576:21;21556:41;;21608:19;21630:24;21648:4;21630:9;:24::i;:::-;21608:46;;21685:62;21702:4;21717:15;;;;;;;;;;;21735:11;21685:8;:62::i;:::-;21760:15;;;;;;;;;;;:31;;;21799:9;21832:4;21852:11;21882:1;21929::::0;21972:9:::1;;;;;;;;;;;21996:15;21760:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21040:990;;;21004:1026::o:0;22048:314::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22107:18:::1;22128:21;22107:42;;22181:1;22168:10;:14;22160:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22233:12;22258:9;;;;;;;;;;;22250:23;;22281:10;22250:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22232:64;;;22315:7;22307:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22096:266;;22048:314::o:0;5096:93::-;5154:5;5179:2;5172:9;;5096:93;:::o;22634:78::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22699:5:::1;22685:11;;:19;;;;;;;;;;;;;;;;;;22634:78::o:0;6330:218::-;6418:4;6435:83;6444:12;:10;:12::i;:::-;6458:7;6467:50;6506:10;6467:11;:25;6479:12;:10;:12::i;:::-;6467:25;;;;;;;;;;;;;;;:34;6493:7;6467:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6435:8;:83::i;:::-;6536:4;6529:11;;6330:218;;;;:::o;18161:26::-;;;;:::o;18037:31::-;;;;:::o;17827:28::-;;;;;;;;;;;;;:::o;24202:125::-;24267:4;24291:19;:28;24311:7;24291:28;;;;;;;;;;;;;;;;;;;;;;;;;24284:35;;24202:125;;;:::o;17995:35::-;;;;:::o;18194:24::-;;;;:::o;5313:127::-;5387:7;5414:9;:18;5424:7;5414:18;;;;;;;;;;;;;;;;5407:25;;5313:127;;;:::o;10857:148::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10964:1:::1;10927:40;;10948:6;;;;;;;;;;;10927:40;;;;;;;;;;;;10995:1;10978:6;;:19;;;;;;;;;;;;;;;;;;10857:148::o:0;22837:144::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22969:4:::1;22927:31;:39;22959:6;22927:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22837:144:::0;;:::o;22721:107::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22813:7:::1;22793:17;;:27;;;;;;;;;;;;;;;;;;22721:107:::0;:::o;10643:79::-;10681:7;10708:6;;;;;;;;;;;10701:13;;10643:79;:::o;18115:37::-;;;;;;;;;;;;;:::o;4984:104::-;5040:13;5073:7;5066:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4984:104;:::o;23578:245::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23685:13:::1;;;;;;;;;;;23677:21;;:4;:21;;::::0;23669:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23774:41;23803:4;23809:5;23774:28;:41::i;:::-;23578:245:::0;;:::o;22370:256::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22435:20:::1;22458:24;22476:4;22458:9;:24::i;:::-;22435:47;;22516:1;22501:12;:16;22493:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22569:49;22587:4;22594:9;;;;;;;;;;;22605:12;22569:9;:49::i;:::-;22424:202;22370:256::o:0;18400:27::-;;;;:::o;6556:269::-;6649:4;6666:129;6675:12;:10;:12::i;:::-;6689:7;6698:96;6737:15;6698:96;;;;;;;;;;;;;;;;;:11;:25;6710:12;:10;:12::i;:::-;6698:25;;;;;;;;;;;;;;;:34;6724:7;6698:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6666:8;:129::i;:::-;6813:4;6806:11;;6556:269;;;;:::o;5448:175::-;5534:4;5551:42;5561:12;:10;:12::i;:::-;5575:9;5586:6;5551:9;:42::i;:::-;5611:4;5604:11;;5448:175;;;;:::o;18874:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17895:22::-;;;;:::o;18325:25::-;;;;:::o;23387:182::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23503:8:::1;23472:19;:28;23492:7;23472:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23543:7;23527:34;;;23552:8;23527:34;;;;;;:::i;:::-;;;;;;;;23387:182:::0;;:::o;17959:29::-;;;;:::o;5631:151::-;5720:7;5747:11;:18;5759:5;5747:18;;;;;;;;;;;;;;;:27;5766:7;5747:27;;;;;;;;;;;;;;;;5740:34;;5631:151;;;;:::o;18225:24::-;;;;:::o;11013:169::-;10780:12;:10;:12::i;:::-;10770:22;;:6;;;;;;;;;;;:22;;;10762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11137:8:::1;11108:38;;11129:6;;;;;;;;;;;11108:38;;;;;;;;;;;;11166:8;11157:6;;:17;;;;;;;;;;;;;;;;;;11013:169:::0;:::o;229:98::-;282:7;309:10;302:17;;229:98;:::o;8232:381::-;8385:1;8368:19;;:5;:19;;;8360:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8466:1;8447:21;;:7;:21;;;8439:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8551:6;8521:11;:18;8533:5;8521:18;;;;;;;;;;;;;;;:27;8540:7;8521:27;;;;;;;;;;;;;;;:36;;;;8589:7;8573:32;;8582:5;8573:32;;;8598:6;8573:32;;;;;;:::i;:::-;;;;;;;;8232:381;;;:::o;24336:3112::-;24484:1;24468:18;;:4;:18;;;24460:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24561:1;24547:16;;:2;:16;;;24539:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24628:1;24618:6;:11;24615:92;;24646:28;24662:4;24668:2;24672:1;24646:15;:28::i;:::-;24689:7;;24615:92;24723:11;;;;;;;;;;;24720:1083;;;24780:7;:5;:7::i;:::-;24772:15;;:4;:15;;;;:49;;;;;24814:7;:5;:7::i;:::-;24808:13;;:2;:13;;;;24772:49;:86;;;;;24856:1;24842:16;;:2;:16;;;;24772:86;:128;;;;;24893:6;24879:21;;:2;:21;;;;24772:128;:160;;;;;24922:10;;;;;;;;;;;24921:11;24772:160;24750:1042;;;25016:25;:31;25042:4;25016:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25052:31;:35;25084:2;25052:35;;;;;;;;;;;;;;;;;;;;;;;;;25051:36;25016:71;25012:765;;;25134:14;;25124:6;:24;;25116:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25267:16;;25250:13;25260:2;25250:9;:13::i;:::-;25241:6;:22;;;;:::i;:::-;:42;;25233:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25012:765;;;25386:25;:29;25412:2;25386:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25420:31;:37;25452:4;25420:37;;;;;;;;;;;;;;;;;;;;;;;;;25419:38;25386:71;25382:395;;;25504:14;;25494:6;:24;;25486:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25382:395;;;25624:31;:35;25656:2;25624:35;;;;;;;;;;;;;;;;;;;;;;;;;25620:157;;25717:16;;25700:13;25710:2;25700:9;:13::i;:::-;25691:6;:22;;;;:::i;:::-;:42;;25683:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25620:157;25382:395;25012:765;24750:1042;24720:1083;25816:28;25847:24;25865:4;25847:9;:24::i;:::-;25816:55;;25885:12;25924:20;;25900;:44;;25885:59;;25976:7;:35;;;;;26001:10;;;;;;;;;;;26000:11;25976:35;:84;;;;;26029:25;:31;26055:4;26029:31;;;;;;;;;;;;;;;;;;;;;;;;;26028:32;25976:84;:127;;;;;26078:19;:25;26098:4;26078:25;;;;;;;;;;;;;;;;;;;;;;;;;26077:26;25976:127;:168;;;;;26121:19;:23;26141:2;26121:23;;;;;;;;;;;;;;;;;;;;;;;;;26120:24;25976:168;25958:306;;;26184:4;26171:10;;:17;;;;;;;;;;;;;;;;;;26206:10;:8;:10::i;:::-;26247:5;26234:10;;:18;;;;;;;;;;;;;;;;;;25958:306;26277:12;26293:10;;;;;;;;;;;26292:11;26277:26;;26405:19;:25;26425:4;26405:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26434:19;:23;26454:2;26434:23;;;;;;;;;;;;;;;;;;;;;;;;;26405:52;26402:99;;;26484:5;26474:15;;26402:99;26514:12;26618:7;26615:779;;;26669:25;:29;26695:2;26669:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26717:1;26702:12;;:16;26669:49;26665:576;;;26745:33;26774:3;26745:24;26756:12;;26745:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26738:40;;26839:12;;26826:10;;26819:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26797:18;;:54;;;;;;;:::i;:::-;;;;;;;;26906:12;;26893:10;;26886:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26870:12;;:48;;;;;;;:::i;:::-;;;;;;;;26665:576;;;26979:25;:31;27005:4;26979:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27028:1;27014:11;;:15;26979:50;26976:265;;;27057:32;27085:3;27057:23;27068:11;;27057:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27050:39;;27149:11;;27137:9;;27130:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27108:18;;:52;;;;;;;:::i;:::-;;;;;;;;27214:11;;27202:9;;27195:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27179:12;;:46;;;;;;;:::i;:::-;;;;;;;;26976:265;26665:576;27268:1;27261:4;:8;27258:93;;;27293:42;27309:4;27323;27330;27293:15;:42::i;:::-;27258:93;27378:4;27368:14;;;;;:::i;:::-;;;26615:779;27407:33;27423:4;27429:2;27433:6;27407:15;:33::i;:::-;24449:2999;;;;24336:3112;;;;:::o;9120:193::-;9206:7;9239:1;9234;:6;;9242:12;9226:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9266:9;9282:1;9278;:5;;;;:::i;:::-;9266:17;;9304:1;9297:8;;;9120:193;;;;;:::o;23832:189::-;23949:5;23915:25;:31;23941:4;23915:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24007:5;23973:40;;24001:4;23973:40;;;;;;;;;;;;23832:189;;:::o;8786:182::-;8844:7;8864:9;8880:1;8876;:5;;;;:::i;:::-;8864:17;;8905:1;8900;:6;;8892:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8959:1;8952:8;;;8786:182;;;;:::o;6833:575::-;6991:1;6973:20;;:6;:20;;;6965:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7075:1;7054:23;;:9;:23;;;7046:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7131:47;7152:6;7160:9;7171:6;7131:20;:47::i;:::-;7212:71;7234:6;7212:71;;;;;;;;;;;;;;;;;:9;:17;7222:6;7212:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7192:9;:17;7202:6;7192:17;;;;;;;;;;;;;;;:91;;;;7317:32;7342:6;7317:9;:20;7327:9;7317:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7294:9;:20;7304:9;7294:20;;;;;;;;;;;;;;;:55;;;;7382:9;7365:35;;7374:6;7365:35;;;7393:6;7365:35;;;;;;:::i;:::-;;;;;;;;6833:575;;;:::o;28592:1477::-;28631:23;28657:24;28675:4;28657:9;:24::i;:::-;28631:50;;28692:25;28741:12;;28720:18;;:33;;;;:::i;:::-;28692:61;;28764:12;28812:1;28793:15;:20;:46;;;;28838:1;28817:17;:22;28793:46;28790:60;;;28842:7;;;;;28790:60;28887:5;28866:26;;:17;;;;;;;;;;;:26;;;28863:254;;28952:2;28929:20;;:25;;;;:::i;:::-;28911:15;:43;28908:125;;;29015:2;28992:20;;:25;;;;:::i;:::-;28974:43;;28908:125;28863:254;;;29081:24;29099:4;29081:9;:24::i;:::-;29063:42;;28863:254;29189:23;29274:1;29254:17;29233:18;;29215:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29189:86;;29286:26;29315:36;29335:15;29315;:19;;:36;;;;:::i;:::-;29286:65;;29365:25;29393:21;29365:49;;29428:36;29445:18;29428:16;:36::i;:::-;29479:18;29500:44;29526:17;29500:21;:25;;:44;;;;:::i;:::-;29479:65;;29558:17;29578:51;29611:17;29578:28;29593:12;;29578:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29558:71;;29640:23;29679:9;29666:10;:22;;;;:::i;:::-;29640:48;;29726:1;29705:18;:22;;;;29753:1;29738:12;:16;;;;29789:1;29771:15;:19;:42;;;;;29812:1;29794:15;:19;29771:42;29768:210;;;29829:46;29842:15;29859;29829:12;:46::i;:::-;29895:71;29910:18;29930:15;29947:18;;29895:71;;;;;;;;:::i;:::-;;;;;;;;29768:210;30012:9;;;;;;;;;;;30004:23;;30035:21;30004:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29991:70;;;;;28620:1449;;;;;;;;;28592:1477;:::o;9321:254::-;9379:7;9410:1;9405;:6;9401:47;;9435:1;9428:8;;;;9401:47;9461:9;9477:1;9473;:5;;;;:::i;:::-;9461:17;;9506:1;9501;9497;:5;;;;:::i;:::-;:10;9489:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9566:1;9559:8;;;9321:254;;;;;:::o;9583:132::-;9641:7;9668:39;9672:1;9675;9668:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9661:46;;9583:132;;;;:::o;8621:125::-;;;;:::o;8976:136::-;9034:7;9061:43;9065:1;9068;9061:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9054:50;;8976:136;;;;:::o;27457:597::-;27586:21;27624:1;27610:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27586:40;;27655:4;27637;27642:1;27637:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27681:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27671:4;27676:1;27671:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27717:62;27734:4;27749:15;;;;;;;;;;;27767:11;27717:8;:62::i;:::-;27819:15;;;;;;;;;;;:66;;;27900:11;27926:1;27970:4;27997;28017:15;27819:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27512:542;27457:597;:::o;28063:520::-;28211:62;28228:4;28243:15;;;;;;;;;;;28261:11;28211:8;:62::i;:::-;28317:15;;;;;;;;;;;:31;;;28356:9;28389:4;28409:11;28435:1;28478;28529:4;28549:15;28317:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28063:520;;:::o;9723:279::-;9809:7;9841:1;9837;:5;9844:12;9829:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9868:9;9884:1;9880;:5;;;;:::i;:::-;9868:17;;9993:1;9986:8;;;9723:279;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:765::-;5197:6;5205;5213;5221;5270:3;5258:9;5249:7;5245:23;5241:33;5238:120;;;5277:79;;:::i;:::-;5238:120;5397:1;5422:53;5467:7;5458:6;5447:9;5443:22;5422:53;:::i;:::-;5412:63;;5368:117;5524:2;5550:53;5595:7;5586:6;5575:9;5571:22;5550:53;:::i;:::-;5540:63;;5495:118;5652:2;5678:53;5723:7;5714:6;5703:9;5699:22;5678:53;:::i;:::-;5668:63;;5623:118;5780:2;5806:53;5851:7;5842:6;5831:9;5827:22;5806:53;:::i;:::-;5796:63;;5751:118;5111:765;;;;;;;:::o;5882:619::-;5959:6;5967;5975;6024:2;6012:9;6003:7;5999:23;5995:32;5992:119;;;6030:79;;:::i;:::-;5992:119;6150:1;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6121:117;6277:2;6303:53;6348:7;6339:6;6328:9;6324:22;6303:53;:::i;:::-;6293:63;;6248:118;6405:2;6431:53;6476:7;6467:6;6456:9;6452:22;6431:53;:::i;:::-;6421:63;;6376:118;5882:619;;;;;:::o;6507:86::-;6542:7;6582:4;6575:5;6571:16;6560:27;;6507:86;;;:::o;6599:112::-;6682:22;6698:5;6682:22;:::i;:::-;6677:3;6670:35;6599:112;;:::o;6717:214::-;6806:4;6844:2;6833:9;6829:18;6821:26;;6857:67;6921:1;6910:9;6906:17;6897:6;6857:67;:::i;:::-;6717:214;;;;:::o;6937:118::-;7024:24;7042:5;7024:24;:::i;:::-;7019:3;7012:37;6937:118;;:::o;7061:222::-;7154:4;7192:2;7181:9;7177:18;7169:26;;7205:71;7273:1;7262:9;7258:17;7249:6;7205:71;:::i;:::-;7061:222;;;;:::o;7289:116::-;7359:21;7374:5;7359:21;:::i;:::-;7352:5;7349:32;7339:60;;7395:1;7392;7385:12;7339:60;7289:116;:::o;7411:133::-;7454:5;7492:6;7479:20;7470:29;;7508:30;7532:5;7508:30;:::i;:::-;7411:133;;;;:::o;7550:468::-;7615:6;7623;7672:2;7660:9;7651:7;7647:23;7643:32;7640:119;;;7678:79;;:::i;:::-;7640:119;7798:1;7823:53;7868:7;7859:6;7848:9;7844:22;7823:53;:::i;:::-;7813:63;;7769:117;7925:2;7951:50;7993:7;7984:6;7973:9;7969:22;7951:50;:::i;:::-;7941:60;;7896:115;7550:468;;;;;:::o;8024:323::-;8080:6;8129:2;8117:9;8108:7;8104:23;8100:32;8097:119;;;8135:79;;:::i;:::-;8097:119;8255:1;8280:50;8322:7;8313:6;8302:9;8298:22;8280:50;:::i;:::-;8270:60;;8226:114;8024:323;;;;:::o;8353:474::-;8421:6;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8353:474;;;;;:::o;8833:180::-;8881:77;8878:1;8871:88;8978:4;8975:1;8968:15;9002:4;8999:1;8992:15;9019:320;9063:6;9100:1;9094:4;9090:12;9080:22;;9147:1;9141:4;9137:12;9168:18;9158:81;;9224:4;9216:6;9212:17;9202:27;;9158:81;9286:2;9278:6;9275:14;9255:18;9252:38;9249:84;;9305:18;;:::i;:::-;9249:84;9070:269;9019:320;;;:::o;9345:182::-;9485:34;9481:1;9473:6;9469:14;9462:58;9345:182;:::o;9533:366::-;9675:3;9696:67;9760:2;9755:3;9696:67;:::i;:::-;9689:74;;9772:93;9861:3;9772:93;:::i;:::-;9890:2;9885:3;9881:12;9874:19;;9533:366;;;:::o;9905:419::-;10071:4;10109:2;10098:9;10094:18;10086:26;;10158:9;10152:4;10148:20;10144:1;10133:9;10129:17;10122:47;10186:131;10312:4;10186:131;:::i;:::-;10178:139;;9905:419;;;:::o;10330:180::-;10378:77;10375:1;10368:88;10475:4;10472:1;10465:15;10499:4;10496:1;10489:15;10516:191;10556:3;10575:20;10593:1;10575:20;:::i;:::-;10570:25;;10609:20;10627:1;10609:20;:::i;:::-;10604:25;;10652:1;10649;10645:9;10638:16;;10673:3;10670:1;10667:10;10664:36;;;10680:18;;:::i;:::-;10664:36;10516:191;;;;:::o;10713:143::-;10770:5;10801:6;10795:13;10786:22;;10817:33;10844:5;10817:33;:::i;:::-;10713:143;;;;:::o;10862:351::-;10932:6;10981:2;10969:9;10960:7;10956:23;10952:32;10949:119;;;10987:79;;:::i;:::-;10949:119;11107:1;11132:64;11188:7;11179:6;11168:9;11164:22;11132:64;:::i;:::-;11122:74;;11078:128;10862:351;;;;:::o;11219:332::-;11340:4;11378:2;11367:9;11363:18;11355:26;;11391:71;11459:1;11448:9;11444:17;11435:6;11391:71;:::i;:::-;11472:72;11540:2;11529:9;11525:18;11516:6;11472:72;:::i;:::-;11219:332;;;;;:::o;11557:85::-;11602:7;11631:5;11620:16;;11557:85;;;:::o;11648:158::-;11706:9;11739:61;11757:42;11766:32;11792:5;11766:32;:::i;:::-;11757:42;:::i;:::-;11739:61;:::i;:::-;11726:74;;11648:158;;;:::o;11812:147::-;11907:45;11946:5;11907:45;:::i;:::-;11902:3;11895:58;11812:147;;:::o;11965:807::-;12214:4;12252:3;12241:9;12237:19;12229:27;;12266:71;12334:1;12323:9;12319:17;12310:6;12266:71;:::i;:::-;12347:72;12415:2;12404:9;12400:18;12391:6;12347:72;:::i;:::-;12429:80;12505:2;12494:9;12490:18;12481:6;12429:80;:::i;:::-;12519;12595:2;12584:9;12580:18;12571:6;12519:80;:::i;:::-;12609:73;12677:3;12666:9;12662:19;12653:6;12609:73;:::i;:::-;12692;12760:3;12749:9;12745:19;12736:6;12692:73;:::i;:::-;11965:807;;;;;;;;;:::o;12778:143::-;12835:5;12866:6;12860:13;12851:22;;12882:33;12909:5;12882:33;:::i;:::-;12778:143;;;;:::o;12927:663::-;13015:6;13023;13031;13080:2;13068:9;13059:7;13055:23;13051:32;13048:119;;;13086:79;;:::i;:::-;13048:119;13206:1;13231:64;13287:7;13278:6;13267:9;13263:22;13231:64;:::i;:::-;13221:74;;13177:128;13344:2;13370:64;13426:7;13417:6;13406:9;13402:22;13370:64;:::i;:::-;13360:74;;13315:129;13483:2;13509:64;13565:7;13556:6;13545:9;13541:22;13509:64;:::i;:::-;13499:74;;13454:129;12927:663;;;;;:::o;13596:221::-;13736:34;13732:1;13724:6;13720:14;13713:58;13805:4;13800:2;13792:6;13788:15;13781:29;13596:221;:::o;13823:366::-;13965:3;13986:67;14050:2;14045:3;13986:67;:::i;:::-;13979:74;;14062:93;14151:3;14062:93;:::i;:::-;14180:2;14175:3;14171:12;14164:19;;13823:366;;;:::o;14195:419::-;14361:4;14399:2;14388:9;14384:18;14376:26;;14448:9;14442:4;14438:20;14434:1;14423:9;14419:17;14412:47;14476:131;14602:4;14476:131;:::i;:::-;14468:139;;14195:419;;;:::o;14620:147::-;14721:11;14758:3;14743:18;;14620:147;;;;:::o;14773:114::-;;:::o;14893:398::-;15052:3;15073:83;15154:1;15149:3;15073:83;:::i;:::-;15066:90;;15165:93;15254:3;15165:93;:::i;:::-;15283:1;15278:3;15274:11;15267:18;;14893:398;;;:::o;15297:379::-;15481:3;15503:147;15646:3;15503:147;:::i;:::-;15496:154;;15667:3;15660:10;;15297:379;;;:::o;15682:177::-;15822:29;15818:1;15810:6;15806:14;15799:53;15682:177;:::o;15865:366::-;16007:3;16028:67;16092:2;16087:3;16028:67;:::i;:::-;16021:74;;16104:93;16193:3;16104:93;:::i;:::-;16222:2;16217:3;16213:12;16206:19;;15865:366;;;:::o;16237:419::-;16403:4;16441:2;16430:9;16426:18;16418:26;;16490:9;16484:4;16480:20;16476:1;16465:9;16461:17;16454:47;16518:131;16644:4;16518:131;:::i;:::-;16510:139;;16237:419;;;:::o;16662:244::-;16802:34;16798:1;16790:6;16786:14;16779:58;16871:27;16866:2;16858:6;16854:15;16847:52;16662:244;:::o;16912:366::-;17054:3;17075:67;17139:2;17134:3;17075:67;:::i;:::-;17068:74;;17151:93;17240:3;17151:93;:::i;:::-;17269:2;17264:3;17260:12;17253:19;;16912:366;;;:::o;17284:419::-;17450:4;17488:2;17477:9;17473:18;17465:26;;17537:9;17531:4;17527:20;17523:1;17512:9;17508:17;17501:47;17565:131;17691:4;17565:131;:::i;:::-;17557:139;;17284:419;;;:::o;17709:223::-;17849:34;17845:1;17837:6;17833:14;17826:58;17918:6;17913:2;17905:6;17901:15;17894:31;17709:223;:::o;17938:366::-;18080:3;18101:67;18165:2;18160:3;18101:67;:::i;:::-;18094:74;;18177:93;18266:3;18177:93;:::i;:::-;18295:2;18290:3;18286:12;18279:19;;17938:366;;;:::o;18310:419::-;18476:4;18514:2;18503:9;18499:18;18491:26;;18563:9;18557:4;18553:20;18549:1;18538:9;18534:17;18527:47;18591:131;18717:4;18591:131;:::i;:::-;18583:139;;18310:419;;;:::o;18735:223::-;18875:34;18871:1;18863:6;18859:14;18852:58;18944:6;18939:2;18931:6;18927:15;18920:31;18735:223;:::o;18964:366::-;19106:3;19127:67;19191:2;19186:3;19127:67;:::i;:::-;19120:74;;19203:93;19292:3;19203:93;:::i;:::-;19321:2;19316:3;19312:12;19305:19;;18964:366;;;:::o;19336:419::-;19502:4;19540:2;19529:9;19525:18;19517:26;;19589:9;19583:4;19579:20;19575:1;19564:9;19560:17;19553:47;19617:131;19743:4;19617:131;:::i;:::-;19609:139;;19336:419;;;:::o;19761:221::-;19901:34;19897:1;19889:6;19885:14;19878:58;19970:4;19965:2;19957:6;19953:15;19946:29;19761:221;:::o;19988:366::-;20130:3;20151:67;20215:2;20210:3;20151:67;:::i;:::-;20144:74;;20227:93;20316:3;20227:93;:::i;:::-;20345:2;20340:3;20336:12;20329:19;;19988:366;;;:::o;20360:419::-;20526:4;20564:2;20553:9;20549:18;20541:26;;20613:9;20607:4;20603:20;20599:1;20588:9;20584:17;20577:47;20641:131;20767:4;20641:131;:::i;:::-;20633:139;;20360:419;;;:::o;20785:224::-;20925:34;20921:1;20913:6;20909:14;20902:58;20994:7;20989:2;20981:6;20977:15;20970:32;20785:224;:::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:222::-;21952:34;21948:1;21940:6;21936:14;21929:58;22021:5;22016:2;22008:6;22004:15;21997:30;21812:222;:::o;22040:366::-;22182:3;22203:67;22267:2;22262:3;22203:67;:::i;:::-;22196:74;;22279:93;22368:3;22279:93;:::i;:::-;22397:2;22392:3;22388:12;22381:19;;22040:366;;;:::o;22412:419::-;22578:4;22616:2;22605:9;22601:18;22593:26;;22665:9;22659:4;22655:20;22651:1;22640:9;22636:17;22629:47;22693:131;22819:4;22693:131;:::i;:::-;22685:139;;22412:419;;;:::o;22837:240::-;22977:34;22973:1;22965:6;22961:14;22954:58;23046:23;23041:2;23033:6;23029:15;23022:48;22837:240;:::o;23083:366::-;23225:3;23246:67;23310:2;23305:3;23246:67;:::i;:::-;23239:74;;23322:93;23411:3;23322:93;:::i;:::-;23440:2;23435:3;23431:12;23424:19;;23083:366;;;:::o;23455:419::-;23621:4;23659:2;23648:9;23644:18;23636:26;;23708:9;23702:4;23698:20;23694:1;23683:9;23679:17;23672:47;23736:131;23862:4;23736:131;:::i;:::-;23728:139;;23455:419;;;:::o;23880:169::-;24020:21;24016:1;24008:6;24004:14;23997:45;23880:169;:::o;24055:366::-;24197:3;24218:67;24282:2;24277:3;24218:67;:::i;:::-;24211:74;;24294:93;24383:3;24294:93;:::i;:::-;24412:2;24407:3;24403:12;24396:19;;24055:366;;;:::o;24427:419::-;24593:4;24631:2;24620:9;24616:18;24608:26;;24680:9;24674:4;24670:20;24666:1;24655:9;24651:17;24644:47;24708:131;24834:4;24708:131;:::i;:::-;24700:139;;24427:419;;;:::o;24852:241::-;24992:34;24988:1;24980:6;24976:14;24969:58;25061:24;25056:2;25048:6;25044:15;25037:49;24852:241;:::o;25099:366::-;25241:3;25262:67;25326:2;25321:3;25262:67;:::i;:::-;25255:74;;25338:93;25427:3;25338:93;:::i;:::-;25456:2;25451:3;25447:12;25440:19;;25099:366;;;:::o;25471:419::-;25637:4;25675:2;25664:9;25660:18;25652:26;;25724:9;25718:4;25714:20;25710:1;25699:9;25695:17;25688:47;25752:131;25878:4;25752:131;:::i;:::-;25744:139;;25471:419;;;:::o;25896:410::-;25936:7;25959:20;25977:1;25959:20;:::i;:::-;25954:25;;25993:20;26011:1;25993:20;:::i;:::-;25988:25;;26048:1;26045;26041:9;26070:30;26088:11;26070:30;:::i;:::-;26059:41;;26249:1;26240:7;26236:15;26233:1;26230:22;26210:1;26203:9;26183:83;26160:139;;26279:18;;:::i;:::-;26160:139;25944:362;25896:410;;;;:::o;26312:180::-;26360:77;26357:1;26350:88;26457:4;26454:1;26447:15;26481:4;26478:1;26471:15;26498:185;26538:1;26555:20;26573:1;26555:20;:::i;:::-;26550:25;;26589:20;26607:1;26589:20;:::i;:::-;26584:25;;26628:1;26618:35;;26633:18;;:::i;:::-;26618:35;26675:1;26672;26668:9;26663:14;;26498:185;;;;:::o;26689:194::-;26729:4;26749:20;26767:1;26749:20;:::i;:::-;26744:25;;26783:20;26801:1;26783:20;:::i;:::-;26778:25;;26827:1;26824;26820:9;26812:17;;26851:1;26845:4;26842:11;26839:37;;;26856:18;;:::i;:::-;26839:37;26689:194;;;;:::o;26889:177::-;27029:29;27025:1;27017:6;27013:14;27006:53;26889:177;:::o;27072:366::-;27214:3;27235:67;27299:2;27294:3;27235:67;:::i;:::-;27228:74;;27311:93;27400:3;27311:93;:::i;:::-;27429:2;27424:3;27420:12;27413:19;;27072:366;;;:::o;27444:419::-;27610:4;27648:2;27637:9;27633:18;27625:26;;27697:9;27691:4;27687:20;27683:1;27672:9;27668:17;27661:47;27725:131;27851:4;27725:131;:::i;:::-;27717:139;;27444:419;;;:::o;27869:442::-;28018:4;28056:2;28045:9;28041:18;28033:26;;28069:71;28137:1;28126:9;28122:17;28113:6;28069:71;:::i;:::-;28150:72;28218:2;28207:9;28203:18;28194:6;28150:72;:::i;:::-;28232;28300:2;28289:9;28285:18;28276:6;28232:72;:::i;:::-;27869:442;;;;;;:::o;28317:220::-;28457:34;28453:1;28445:6;28441:14;28434:58;28526:3;28521:2;28513:6;28509:15;28502:28;28317:220;:::o;28543:366::-;28685:3;28706:67;28770:2;28765:3;28706:67;:::i;:::-;28699:74;;28782:93;28871:3;28782:93;:::i;:::-;28900:2;28895:3;28891:12;28884:19;;28543:366;;;:::o;28915:419::-;29081:4;29119:2;29108:9;29104:18;29096:26;;29168:9;29162:4;29158:20;29154:1;29143:9;29139:17;29132:47;29196:131;29322:4;29196:131;:::i;:::-;29188:139;;28915:419;;;:::o;29340:180::-;29388:77;29385:1;29378:88;29485:4;29482:1;29475:15;29509:4;29506:1;29499:15;29526:180;29574:77;29571:1;29564:88;29671:4;29668:1;29661:15;29695:4;29692:1;29685:15;29712:114;29779:6;29813:5;29807:12;29797:22;;29712:114;;;:::o;29832:184::-;29931:11;29965:6;29960:3;29953:19;30005:4;30000:3;29996:14;29981:29;;29832:184;;;;:::o;30022:132::-;30089:4;30112:3;30104:11;;30142:4;30137:3;30133:14;30125:22;;30022:132;;;:::o;30160:108::-;30237:24;30255:5;30237:24;:::i;:::-;30232:3;30225:37;30160:108;;:::o;30274:179::-;30343:10;30364:46;30406:3;30398:6;30364:46;:::i;:::-;30442:4;30437:3;30433:14;30419:28;;30274:179;;;;:::o;30459:113::-;30529:4;30561;30556:3;30552:14;30544:22;;30459:113;;;:::o;30608:732::-;30727:3;30756:54;30804:5;30756:54;:::i;:::-;30826:86;30905:6;30900:3;30826:86;:::i;:::-;30819:93;;30936:56;30986:5;30936:56;:::i;:::-;31015:7;31046:1;31031:284;31056:6;31053:1;31050:13;31031:284;;;31132:6;31126:13;31159:63;31218:3;31203:13;31159:63;:::i;:::-;31152:70;;31245:60;31298:6;31245:60;:::i;:::-;31235:70;;31091:224;31078:1;31075;31071:9;31066:14;;31031:284;;;31035:14;31331:3;31324:10;;30732:608;;;30608:732;;;;:::o;31346:831::-;31609:4;31647:3;31636:9;31632:19;31624:27;;31661:71;31729:1;31718:9;31714:17;31705:6;31661:71;:::i;:::-;31742:80;31818:2;31807:9;31803:18;31794:6;31742:80;:::i;:::-;31869:9;31863:4;31859:20;31854:2;31843:9;31839:18;31832:48;31897:108;32000:4;31991:6;31897:108;:::i;:::-;31889:116;;32015:72;32083:2;32072:9;32068:18;32059:6;32015:72;:::i;:::-;32097:73;32165:3;32154:9;32150:19;32141:6;32097:73;:::i;:::-;31346:831;;;;;;;;:::o

Swarm Source

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