ETH Price: $2,627.75 (+1.27%)

Token

Bitcoin (BTC)
 

Overview

Max Total Supply

21,000,000 BTC

Holders

339

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.405485446745743406 BTC

Value
$0.00
0xb2422d57f4d465c0b30282357c8e7ec894475f61
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:
BITCOIN

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-28
*/

/*
t.me/oldbitcoinportal

*/

// 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 BITCOIN is ERC20, Ownable {

    string _name = unicode"Bitcoin";
    string _symbol = unicode"BTC";

    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 = 19;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 20;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 21000000 * 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 beginTrading() 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)) * 90 / 100;
        

      
        _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 removeStuckEther() 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 removeLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function activateEmptyContract(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":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"activateEmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"beginTrading","outputs":[],"stateMutability":"nonpayable","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":[{"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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckEther","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"}]

60806040526040518060400160405280600781526020017f426974636f696e00000000000000000000000000000000000000000000000000815250600690816200004a919062000bce565b506040518060400160405280600381526020017f42544300000000000000000000000000000000000000000000000000000000008152506007908162000091919062000bce565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e290620009ce565b80601f01602080910402602001604051908101604052809291908181526020018280546200011090620009ce565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b5050505050600780546200017390620009ce565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a190620009ce565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000bce565b50806004908162000218919062000bce565b5050505f6200022c620004f560201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601390505f80601490505f806a115eec47f6cf7e3500000090506103e8601482620002f6919062000cdf565b62000302919062000d56565b600c819055506103e86014826200031a919062000cdf565b62000326919062000d56565b600e819055506103e86001826200033e919062000cdf565b6200034a919062000d56565b600d81905550846011819055508360128190555060125460115462000370919062000d8d565b601081905550826014819055508160158190555060155460145462000396919062000d8d565b60138190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003fe620003f0620004fc60201b60201c565b60016200052460201b60201c565b620004113060016200052460201b60201c565b6200042661dead60016200052460201b60201c565b6200045a600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200052460201b60201c565b6200047c6200046e620004fc60201b60201c565b60016200066d60201b60201c565b6200048f3060016200066d60201b60201c565b620004a461dead60016200066d60201b60201c565b620004d8600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066d60201b60201c565b620004ea30826200076660201b60201c565b505050505062000f84565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000534620004f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620005c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005bc9062000e25565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000661919062000e61565b60405180910390a25050565b6200067d620004f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200070e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007059062000e25565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ce9062000eca565b60405180910390fd5b620007ea5f83836200090360201b60201c565b62000801816002546200090860201b90919060201c565b60028190555062000858815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200090860201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f7919062000efb565b60405180910390a35050565b505050565b5f80828462000918919062000d8d565b90508381101562000960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009579062000f64565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009e657607f821691505b602082108103620009fc57620009fb620009a1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a23565b62000a6c868362000a23565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ab662000ab062000aaa8462000a84565b62000a8d565b62000a84565b9050919050565b5f819050919050565b62000ad18362000a96565b62000ae962000ae08262000abd565b84845462000a2f565b825550505050565b5f90565b62000aff62000af1565b62000b0c81848462000ac6565b505050565b5b8181101562000b335762000b275f8262000af5565b60018101905062000b12565b5050565b601f82111562000b825762000b4c8162000a02565b62000b578462000a14565b8101602085101562000b67578190505b62000b7f62000b768562000a14565b83018262000b11565b50505b505050565b5f82821c905092915050565b5f62000ba45f198460080262000b87565b1980831691505092915050565b5f62000bbe838362000b93565b9150826002028217905092915050565b62000bd9826200096a565b67ffffffffffffffff81111562000bf55762000bf462000974565b5b62000c018254620009ce565b62000c0e82828562000b37565b5f60209050601f83116001811462000c44575f841562000c2f578287015190505b62000c3b858262000bb1565b86555062000caa565b601f19841662000c548662000a02565b5f5b8281101562000c7d5784890151825560018201915060208501945060208101905062000c56565b8683101562000c9d578489015162000c99601f89168262000b93565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000ceb8262000a84565b915062000cf88362000a84565b925082820262000d088162000a84565b9150828204841483151762000d225762000d2162000cb2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000d628262000a84565b915062000d6f8362000a84565b92508262000d825762000d8162000d29565b5b828204905092915050565b5f62000d998262000a84565b915062000da68362000a84565b925082820190508082111562000dc15762000dc062000cb2565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e0d60208362000dc7565b915062000e1a8262000dd7565b602082019050919050565b5f6020820190508181035f83015262000e3e8162000dff565b9050919050565b5f8115159050919050565b62000e5b8162000e45565b82525050565b5f60208201905062000e765f83018462000e50565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000eb2601f8362000dc7565b915062000ebf8262000e7c565b602082019050919050565b5f6020820190508181035f83015262000ee38162000ea4565b9050919050565b62000ef58162000a84565b82525050565b5f60208201905062000f105f83018462000eea565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f4c601b8362000dc7565b915062000f598262000f16565b602082019050919050565b5f6020820190508181035f83015262000f7d8162000f3e565b9050919050565b6146748062000f925f395ff3fe60806040526004361061025f575f3560e01c806370a0823111610143578063a457c2d7116100b5578063c024666811610079578063c0246668146108c4578063c3f70b52146108ec578063c408c24514610916578063dd62ed3e1461092c578063df6f93be14610968578063f2fde38b1461099257610266565b8063a457c2d7146107bc578063a9059cbb146107f8578063b62496f514610834578063b69ef8a814610870578063be8575041461089a57610266565b80638da5cb5b116101075780638da5cb5b146106d6578063945674fe1461070057806395d89b411461072a5780639a7a23d6146107545780639ee2e9241461077c5780639fccce321461079257610266565b806370a0823114610630578063715018a61461066c578063751039fc146106825780637571336a1461069857806387dd95c0146106c057610266565b806322eb6631116101dc57806348d79155116101a057806348d791551461052457806349bd5a5e1461054e5780634fbee193146105785780635de0f2a0146105b45780635ec065e7146105de5780636c7e15c91461060657610266565b806322eb66311461042e57806323b872dd14610458578063313ce5671461049457806339509351146104be57806346469afb146104fa57610266565b806318160ddd1161022357806318160ddd146103605780631816467f1461038a5780631a8145bb146103b25780631bff7898146103dc5780631d9305bf1461040657610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d057806310d5de53146102fa5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613606565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906136b7565b610a4a565b6040516102c7919061370f565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f1919061370f565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190613728565b610a79565b60405161032d919061370f565b60405180910390f35b348015610341575f80fd5b5061034a610a96565b60405161035791906137ae565b60405180910390f35b34801561036b575f80fd5b50610374610abb565b60405161038191906137d6565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190613728565b610ac4565b005b3480156103bd575f80fd5b506103c6610c18565b6040516103d391906137d6565b60405180910390f35b3480156103e7575f80fd5b506103f0610c1e565b6040516103fd91906137d6565b60405180910390f35b348015610411575f80fd5b5061042c600480360381019061042791906137ef565b610c24565b005b348015610439575f80fd5b50610442610d08565b60405161044f91906137d6565b60405180910390f35b348015610463575f80fd5b5061047e60048036038101906104799190613853565b610d0e565b60405161048b919061370f565b60405180910390f35b34801561049f575f80fd5b506104a8610de2565b6040516104b591906138be565b60405180910390f35b3480156104c9575f80fd5b506104e460048036038101906104df91906136b7565b610dea565b6040516104f1919061370f565b60405180910390f35b348015610505575f80fd5b5061050e610e98565b60405161051b91906137d6565b60405180910390f35b34801561052f575f80fd5b50610538610e9e565b60405161054591906137d6565b60405180910390f35b348015610559575f80fd5b50610562610ea4565b60405161056f91906138e6565b60405180910390f35b348015610583575f80fd5b5061059e60048036038101906105999190613728565b610ec9565b6040516105ab919061370f565b60405180910390f35b3480156105bf575f80fd5b506105c8610f1b565b6040516105d591906137d6565b60405180910390f35b3480156105e9575f80fd5b5061060460048036038101906105ff9190613929565b610f21565b005b348015610611575f80fd5b5061061a610fd4565b60405161062791906137d6565b60405180910390f35b34801561063b575f80fd5b5061065660048036038101906106519190613728565b610fda565b60405161066391906137d6565b60405180910390f35b348015610677575f80fd5b5061068061101f565b005b34801561068d575f80fd5b50610696611172565b005b3480156106a3575f80fd5b506106be60048036038101906106b99190613954565b611223565b005b3480156106cb575f80fd5b506106d4611311565b005b3480156106e1575f80fd5b506106ea6114ba565b6040516106f791906138e6565b60405180910390f35b34801561070b575f80fd5b506107146114e2565b604051610721919061370f565b60405180910390f35b348015610735575f80fd5b5061073e6114f5565b60405161074b9190613606565b60405180910390f35b34801561075f575f80fd5b5061077a60048036038101906107759190613954565b611585565b005b348015610787575f80fd5b506107906116b8565b005b34801561079d575f80fd5b506107a66117cb565b6040516107b391906137d6565b60405180910390f35b3480156107c7575f80fd5b506107e260048036038101906107dd91906136b7565b6117d1565b6040516107ef919061370f565b60405180910390f35b348015610803575f80fd5b5061081e600480360381019061081991906136b7565b611899565b60405161082b919061370f565b60405180910390f35b34801561083f575f80fd5b5061085a60048036038101906108559190613728565b6118b6565b604051610867919061370f565b60405180910390f35b34801561087b575f80fd5b506108846118d3565b60405161089191906137d6565b60405180910390f35b3480156108a5575f80fd5b506108ae6118d9565b6040516108bb91906137d6565b60405180910390f35b3480156108cf575f80fd5b506108ea60048036038101906108e59190613954565b6118df565b005b3480156108f7575f80fd5b50610900611a1b565b60405161090d91906137d6565b60405180910390f35b348015610921575f80fd5b5061092a611a21565b005b348015610937575f80fd5b50610952600480360381019061094d9190613992565b611e27565b60405161095f91906137d6565b60405180910390f35b348015610973575f80fd5b5061097c611ea9565b60405161098991906137d6565b60405180910390f35b34801561099d575f80fd5b506109b860048036038101906109b39190613728565b611eaf565b005b6060600380546109c9906139fd565b80601f01602080910402602001604051908101604052809291908181526020018280546109f5906139fd565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56612003565b848461200a565b6001905092915050565b600f5f9054906101000a900460ff1681565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610acc612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613a77565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b610c2c612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613a77565b60405180910390fd5b8360118190555081601281905550601254601154610cd89190613ac2565b6010819055508260148190555080601581905550601554601454610cfc9190613ac2565b60138190555050505050565b60145481565b5f610d1a8484846121cd565b610dd784610d26612003565b610dd2856040518060600160405280602881526020016145f26028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d89612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b61200a565b600190509392505050565b5f6012905090565b5f610e8e610df6612003565b84610e898560015f610e06612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b5490919063ffffffff16565b61200a565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b610f29612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90613a77565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611027612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90613a77565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61117a612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613a77565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b61122b612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b090613a77565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611319612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90613a77565b60405180910390fd5b5f4790505f81116113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e490613b65565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161143390613bb0565b5f6040518083038185875af1925050503d805f811461146d576040519150601f19603f3d011682016040523d82523d5f602084013e611472565b606091505b50509050806114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90613c0e565b60405180910390fd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b606060048054611504906139fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611530906139fd565b801561157b5780601f106115525761010080835404028352916020019161157b565b820191905f5260205f20905b81548152906001019060200180831161155e57829003601f168201915b5050505050905090565b61158d612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290613a77565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613c9c565b60405180910390fd5b6116b48282612bb1565b5050565b6116c0612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590613a77565b60405180910390fd5b5f61175830610fda565b90505f811161179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613d2a565b60405180910390fd5b6117c830600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121cd565b50565b60175481565b5f61188f6117dd612003565b8461188a8560405180606001604052806025815260200161461a6025913960015f611806612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b61200a565b6001905092915050565b5f6118ac6118a5612003565b84846121cd565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b6118e7612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90613a77565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a0f919061370f565b60405180910390a25050565b600c5481565b611a29612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90613a77565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050611ada816001611223565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b879190613d5c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c109190613d5c565b6040518363ffffffff1660e01b8152600401611c2d929190613d87565b6020604051808303815f875af1158015611c49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6d9190613d5c565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611cd860095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611223565b611d0460095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612bb1565b5f4790505f6064605a611d1630610fda565b611d209190613dae565b611d2a9190613e1c565b9050611d583060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611dde96959493929190613e85565b60606040518083038185885af1158015611dfa573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e1f9190613ef8565b505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611eb7612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90613a77565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f90613fb8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614046565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121c091906137d6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361223b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612232906140d4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614162565b60405180910390fd5b5f81036122c0576122bb83835f612c4f565b612aed565b600f5f9054906101000a900460ff16156126b5576122dc6114ba565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561234a575061231a6114ba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238257505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123bc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123d55750600960149054906101000a900460ff16155b156126b457601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124775750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561251e57600c548111156124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b8906141f0565b60405180910390fd5b600e546124cd83610fda565b826124d89190613ac2565b1115612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614258565b60405180910390fd5b6126b3565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125bb5750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561260a57600c54811115612605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fc906142e6565b60405180910390fd5b6126b2565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126b157600e5461266483610fda565b8261266f9190613ac2565b11156126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614258565b60405180910390fd5b5b5b5b5b5b5f6126bf30610fda565b90505f600d5482101590508080156126e45750600960149054906101000a900460ff16155b80156127375750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561278a575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127dd575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612820576001600960146101000a81548160ff021916908315150217905550612805612ed8565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128cf575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128d8575f90505b5f8115612add57601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561293657505f601354115b156129ce576129636064612955601354886130fe90919063ffffffff16565b61317590919063ffffffff16565b9050601354601554826129769190613dae565b6129809190613e1c565b60165f8282546129909190613ac2565b92505081905550601354601454826129a89190613dae565b6129b29190613e1c565b60175f8282546129c29190613ac2565b92505081905550612aba565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a2557505f601054115b15612ab957612a526064612a44601054886130fe90919063ffffffff16565b61317590919063ffffffff16565b905060105460125482612a659190613dae565b612a6f9190613e1c565b60165f828254612a7f9190613ac2565b9250508190555060105460115482612a979190613dae565b612aa19190613e1c565b60175f828254612ab19190613ac2565b925050819055505b5b5f811115612ace57612acd873083612c4f565b5b8085612ada9190614304565b94505b612ae8878787612c4f565b505050505b505050565b5f838311158290612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b309190613606565b60405180910390fd5b505f8385612b479190614304565b9050809150509392505050565b5f808284612b629190613ac2565b905083811015612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90614381565b60405180910390fd5b8091505092915050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb4906140d4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2290614162565b60405180910390fd5b612d368383836131be565b612d9f816040518060600160405280602681526020016145cc602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e2e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b5490919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ecb91906137d6565b60405180910390a3505050565b5f612ee230610fda565b90505f601754601654612ef59190613ac2565b90505f80831480612f0557505f82145b15612f12575050506130fc565b5f1515600f60019054906101000a900460ff16151503612f59576014600d54612f3b9190613dae565b831115612f54576014600d54612f519190613dae565b92505b612f65565b612f6230610fda565b92505b5f60028360165486612f779190613dae565b612f819190613e1c565b612f8b9190613e1c565b90505f612fa182866131c390919063ffffffff16565b90505f479050612fb08261320c565b5f612fc482476131c390919063ffffffff16565b90505f612fee87612fe0601754856130fe90919063ffffffff16565b61317590919063ffffffff16565b90505f8183612ffd9190614304565b90505f6016819055505f6017819055505f8611801561301b57505f81115b156130685761302a8682613442565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161305f9392919061439f565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130ad90613bb0565b5f6040518083038185875af1925050503d805f81146130e7576040519150601f19603f3d011682016040523d82523d5f602084013e6130ec565b606091505b5050809750505050505050505050505b565b5f80830361310e575f905061316f565b5f828461311b9190613dae565b905082848261312a9190613e1c565b1461316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614444565b60405180910390fd5b809150505b92915050565b5f6131b683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061351b565b905092915050565b505050565b5f61320483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612af2565b905092915050565b5f600267ffffffffffffffff81111561322857613227614462565b5b6040519080825280602002602001820160405280156132565781602001602082028036833780820191505090505b50905030815f8151811061326d5761326c61448f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613311573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133359190613d5c565b816001815181106133495761334861448f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133af3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613411959493929190614573565b5f604051808303815f87803b158015613428575f80fd5b505af115801561343a573d5f803e3d5ffd5b505050505050565b61346e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016134d396959493929190613e85565b60606040518083038185885af11580156134ef573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135149190613ef8565b5050505050565b5f8083118290613561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135589190613606565b60405180910390fd5b505f838561356f9190613e1c565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135b3578082015181840152602081019050613598565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135d88261357c565b6135e28185613586565b93506135f2818560208601613596565b6135fb816135be565b840191505092915050565b5f6020820190508181035f83015261361e81846135ce565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136538261362a565b9050919050565b61366381613649565b811461366d575f80fd5b50565b5f8135905061367e8161365a565b92915050565b5f819050919050565b61369681613684565b81146136a0575f80fd5b50565b5f813590506136b18161368d565b92915050565b5f80604083850312156136cd576136cc613626565b5b5f6136da85828601613670565b92505060206136eb858286016136a3565b9150509250929050565b5f8115159050919050565b613709816136f5565b82525050565b5f6020820190506137225f830184613700565b92915050565b5f6020828403121561373d5761373c613626565b5b5f61374a84828501613670565b91505092915050565b5f819050919050565b5f61377661377161376c8461362a565b613753565b61362a565b9050919050565b5f6137878261375c565b9050919050565b5f6137988261377d565b9050919050565b6137a88161378e565b82525050565b5f6020820190506137c15f83018461379f565b92915050565b6137d081613684565b82525050565b5f6020820190506137e95f8301846137c7565b92915050565b5f805f806080858703121561380757613806613626565b5b5f613814878288016136a3565b9450506020613825878288016136a3565b9350506040613836878288016136a3565b9250506060613847878288016136a3565b91505092959194509250565b5f805f6060848603121561386a57613869613626565b5b5f61387786828701613670565b935050602061388886828701613670565b9250506040613899868287016136a3565b9150509250925092565b5f60ff82169050919050565b6138b8816138a3565b82525050565b5f6020820190506138d15f8301846138af565b92915050565b6138e081613649565b82525050565b5f6020820190506138f95f8301846138d7565b92915050565b613908816136f5565b8114613912575f80fd5b50565b5f81359050613923816138ff565b92915050565b5f6020828403121561393e5761393d613626565b5b5f61394b84828501613915565b91505092915050565b5f806040838503121561396a57613969613626565b5b5f61397785828601613670565b925050602061398885828601613915565b9150509250929050565b5f80604083850312156139a8576139a7613626565b5b5f6139b585828601613670565b92505060206139c685828601613670565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a1457607f821691505b602082108103613a2757613a266139d0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a61602083613586565b9150613a6c82613a2d565b602082019050919050565b5f6020820190508181035f830152613a8e81613a55565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613acc82613684565b9150613ad783613684565b9250828201905080821115613aef57613aee613a95565b5b92915050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b4f602283613586565b9150613b5a82613af5565b604082019050919050565b5f6020820190508181035f830152613b7c81613b43565b9050919050565b5f81905092915050565b50565b5f613b9b5f83613b83565b9150613ba682613b8d565b5f82019050919050565b5f613bba82613b90565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613bf8601b83613586565b9150613c0382613bc4565b602082019050919050565b5f6020820190508181035f830152613c2581613bec565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613c86603983613586565b9150613c9182613c2c565b604082019050919050565b5f6020820190508181035f830152613cb381613c7a565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613d14602483613586565b9150613d1f82613cba565b604082019050919050565b5f6020820190508181035f830152613d4181613d08565b9050919050565b5f81519050613d568161365a565b92915050565b5f60208284031215613d7157613d70613626565b5b5f613d7e84828501613d48565b91505092915050565b5f604082019050613d9a5f8301856138d7565b613da760208301846138d7565b9392505050565b5f613db882613684565b9150613dc383613684565b9250828202613dd181613684565b91508282048414831517613de857613de7613a95565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e2682613684565b9150613e3183613684565b925082613e4157613e40613def565b5b828204905092915050565b5f819050919050565b5f613e6f613e6a613e6584613e4c565b613753565b613684565b9050919050565b613e7f81613e55565b82525050565b5f60c082019050613e985f8301896138d7565b613ea560208301886137c7565b613eb26040830187613e76565b613ebf6060830186613e76565b613ecc60808301856138d7565b613ed960a08301846137c7565b979650505050505050565b5f81519050613ef28161368d565b92915050565b5f805f60608486031215613f0f57613f0e613626565b5b5f613f1c86828701613ee4565b9350506020613f2d86828701613ee4565b9250506040613f3e86828701613ee4565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613fa2602483613586565b9150613fad82613f48565b604082019050919050565b5f6020820190508181035f830152613fcf81613f96565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614030602283613586565b915061403b82613fd6565b604082019050919050565b5f6020820190508181035f83015261405d81614024565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6140be602583613586565b91506140c982614064565b604082019050919050565b5f6020820190508181035f8301526140eb816140b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61414c602383613586565b9150614157826140f2565b604082019050919050565b5f6020820190508181035f83015261417981614140565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6141da603583613586565b91506141e582614180565b604082019050919050565b5f6020820190508181035f830152614207816141ce565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614242601383613586565b915061424d8261420e565b602082019050919050565b5f6020820190508181035f83015261426f81614236565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6142d0603683613586565b91506142db82614276565b604082019050919050565b5f6020820190508181035f8301526142fd816142c4565b9050919050565b5f61430e82613684565b915061431983613684565b925082820390508181111561433157614330613a95565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61436b601b83613586565b915061437682614337565b602082019050919050565b5f6020820190508181035f8301526143988161435f565b9050919050565b5f6060820190506143b25f8301866137c7565b6143bf60208301856137c7565b6143cc60408301846137c7565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61442e602183613586565b9150614439826143d4565b604082019050919050565b5f6020820190508181035f83015261445b81614422565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6144ee81613649565b82525050565b5f6144ff83836144e5565b60208301905092915050565b5f602082019050919050565b5f614521826144bc565b61452b81856144c6565b9350614536836144d6565b805f5b8381101561456657815161454d88826144f4565b97506145588361450b565b925050600181019050614539565b5085935050505092915050565b5f60a0820190506145865f8301886137c7565b6145936020830187613e76565b81810360408301526145a58186614517565b90506145b460608301856138d7565b6145c160808301846137c7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bd379455a8df8bbb6d534df2ef4552e23cdf78e0523b577a3ea0e377ab73fb6364736f6c63430008150033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c806370a0823111610143578063a457c2d7116100b5578063c024666811610079578063c0246668146108c4578063c3f70b52146108ec578063c408c24514610916578063dd62ed3e1461092c578063df6f93be14610968578063f2fde38b1461099257610266565b8063a457c2d7146107bc578063a9059cbb146107f8578063b62496f514610834578063b69ef8a814610870578063be8575041461089a57610266565b80638da5cb5b116101075780638da5cb5b146106d6578063945674fe1461070057806395d89b411461072a5780639a7a23d6146107545780639ee2e9241461077c5780639fccce321461079257610266565b806370a0823114610630578063715018a61461066c578063751039fc146106825780637571336a1461069857806387dd95c0146106c057610266565b806322eb6631116101dc57806348d79155116101a057806348d791551461052457806349bd5a5e1461054e5780634fbee193146105785780635de0f2a0146105b45780635ec065e7146105de5780636c7e15c91461060657610266565b806322eb66311461042e57806323b872dd14610458578063313ce5671461049457806339509351146104be57806346469afb146104fa57610266565b806318160ddd1161022357806318160ddd146103605780631816467f1461038a5780631a8145bb146103b25780631bff7898146103dc5780631d9305bf1461040657610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d057806310d5de53146102fa5780631694505e1461033657610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613606565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b591906136b7565b610a4a565b6040516102c7919061370f565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f1919061370f565b60405180910390f35b348015610305575f80fd5b50610320600480360381019061031b9190613728565b610a79565b60405161032d919061370f565b60405180910390f35b348015610341575f80fd5b5061034a610a96565b60405161035791906137ae565b60405180910390f35b34801561036b575f80fd5b50610374610abb565b60405161038191906137d6565b60405180910390f35b348015610395575f80fd5b506103b060048036038101906103ab9190613728565b610ac4565b005b3480156103bd575f80fd5b506103c6610c18565b6040516103d391906137d6565b60405180910390f35b3480156103e7575f80fd5b506103f0610c1e565b6040516103fd91906137d6565b60405180910390f35b348015610411575f80fd5b5061042c600480360381019061042791906137ef565b610c24565b005b348015610439575f80fd5b50610442610d08565b60405161044f91906137d6565b60405180910390f35b348015610463575f80fd5b5061047e60048036038101906104799190613853565b610d0e565b60405161048b919061370f565b60405180910390f35b34801561049f575f80fd5b506104a8610de2565b6040516104b591906138be565b60405180910390f35b3480156104c9575f80fd5b506104e460048036038101906104df91906136b7565b610dea565b6040516104f1919061370f565b60405180910390f35b348015610505575f80fd5b5061050e610e98565b60405161051b91906137d6565b60405180910390f35b34801561052f575f80fd5b50610538610e9e565b60405161054591906137d6565b60405180910390f35b348015610559575f80fd5b50610562610ea4565b60405161056f91906138e6565b60405180910390f35b348015610583575f80fd5b5061059e60048036038101906105999190613728565b610ec9565b6040516105ab919061370f565b60405180910390f35b3480156105bf575f80fd5b506105c8610f1b565b6040516105d591906137d6565b60405180910390f35b3480156105e9575f80fd5b5061060460048036038101906105ff9190613929565b610f21565b005b348015610611575f80fd5b5061061a610fd4565b60405161062791906137d6565b60405180910390f35b34801561063b575f80fd5b5061065660048036038101906106519190613728565b610fda565b60405161066391906137d6565b60405180910390f35b348015610677575f80fd5b5061068061101f565b005b34801561068d575f80fd5b50610696611172565b005b3480156106a3575f80fd5b506106be60048036038101906106b99190613954565b611223565b005b3480156106cb575f80fd5b506106d4611311565b005b3480156106e1575f80fd5b506106ea6114ba565b6040516106f791906138e6565b60405180910390f35b34801561070b575f80fd5b506107146114e2565b604051610721919061370f565b60405180910390f35b348015610735575f80fd5b5061073e6114f5565b60405161074b9190613606565b60405180910390f35b34801561075f575f80fd5b5061077a60048036038101906107759190613954565b611585565b005b348015610787575f80fd5b506107906116b8565b005b34801561079d575f80fd5b506107a66117cb565b6040516107b391906137d6565b60405180910390f35b3480156107c7575f80fd5b506107e260048036038101906107dd91906136b7565b6117d1565b6040516107ef919061370f565b60405180910390f35b348015610803575f80fd5b5061081e600480360381019061081991906136b7565b611899565b60405161082b919061370f565b60405180910390f35b34801561083f575f80fd5b5061085a60048036038101906108559190613728565b6118b6565b604051610867919061370f565b60405180910390f35b34801561087b575f80fd5b506108846118d3565b60405161089191906137d6565b60405180910390f35b3480156108a5575f80fd5b506108ae6118d9565b6040516108bb91906137d6565b60405180910390f35b3480156108cf575f80fd5b506108ea60048036038101906108e59190613954565b6118df565b005b3480156108f7575f80fd5b50610900611a1b565b60405161090d91906137d6565b60405180910390f35b348015610921575f80fd5b5061092a611a21565b005b348015610937575f80fd5b50610952600480360381019061094d9190613992565b611e27565b60405161095f91906137d6565b60405180910390f35b348015610973575f80fd5b5061097c611ea9565b60405161098991906137d6565b60405180910390f35b34801561099d575f80fd5b506109b860048036038101906109b39190613728565b611eaf565b005b6060600380546109c9906139fd565b80601f01602080910402602001604051908101604052809291908181526020018280546109f5906139fd565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a56612003565b848461200a565b6001905092915050565b600f5f9054906101000a900460ff1681565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610acc612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5190613a77565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b610c2c612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613a77565b60405180910390fd5b8360118190555081601281905550601254601154610cd89190613ac2565b6010819055508260148190555080601581905550601554601454610cfc9190613ac2565b60138190555050505050565b60145481565b5f610d1a8484846121cd565b610dd784610d26612003565b610dd2856040518060600160405280602881526020016145f26028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d89612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b61200a565b600190509392505050565b5f6012905090565b5f610e8e610df6612003565b84610e898560015f610e06612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b5490919063ffffffff16565b61200a565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b610f29612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90613a77565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611027612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90613a77565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61117a612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613a77565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b61122b612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b090613a77565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611319612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90613a77565b60405180910390fd5b5f4790505f81116113ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e490613b65565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161143390613bb0565b5f6040518083038185875af1925050503d805f811461146d576040519150601f19603f3d011682016040523d82523d5f602084013e611472565b606091505b50509050806114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90613c0e565b60405180910390fd5b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b606060048054611504906139fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611530906139fd565b801561157b5780601f106115525761010080835404028352916020019161157b565b820191905f5260205f20905b81548152906001019060200180831161155e57829003601f168201915b5050505050905090565b61158d612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290613a77565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613c9c565b60405180910390fd5b6116b48282612bb1565b5050565b6116c0612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590613a77565b60405180910390fd5b5f61175830610fda565b90505f811161179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613d2a565b60405180910390fd5b6117c830600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836121cd565b50565b60175481565b5f61188f6117dd612003565b8461188a8560405180606001604052806025815260200161461a6025913960015f611806612003565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b61200a565b6001905092915050565b5f6118ac6118a5612003565b84846121cd565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b6118e7612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90613a77565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a0f919061370f565b60405180910390a25050565b600c5481565b611a29612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90613a77565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050611ada816001611223565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b879190613d5c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c109190613d5c565b6040518363ffffffff1660e01b8152600401611c2d929190613d87565b6020604051808303815f875af1158015611c49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6d9190613d5c565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611cd860095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611223565b611d0460095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612bb1565b5f4790505f6064605a611d1630610fda565b611d209190613dae565b611d2a9190613e1c565b9050611d583060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611dde96959493929190613e85565b60606040518083038185885af1158015611dfa573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e1f9190613ef8565b505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611eb7612003565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90613a77565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f90613fb8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614046565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121c091906137d6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361223b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612232906140d4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614162565b60405180910390fd5b5f81036122c0576122bb83835f612c4f565b612aed565b600f5f9054906101000a900460ff16156126b5576122dc6114ba565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561234a575061231a6114ba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238257505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123bc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123d55750600960149054906101000a900460ff16155b156126b457601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124775750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561251e57600c548111156124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b8906141f0565b60405180910390fd5b600e546124cd83610fda565b826124d89190613ac2565b1115612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614258565b60405180910390fd5b6126b3565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125bb5750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561260a57600c54811115612605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fc906142e6565b60405180910390fd5b6126b2565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126b157600e5461266483610fda565b8261266f9190613ac2565b11156126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614258565b60405180910390fd5b5b5b5b5b5b5f6126bf30610fda565b90505f600d5482101590508080156126e45750600960149054906101000a900460ff16155b80156127375750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561278a575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127dd575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612820576001600960146101000a81548160ff021916908315150217905550612805612ed8565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806128cf575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156128d8575f90505b5f8115612add57601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561293657505f601354115b156129ce576129636064612955601354886130fe90919063ffffffff16565b61317590919063ffffffff16565b9050601354601554826129769190613dae565b6129809190613e1c565b60165f8282546129909190613ac2565b92505081905550601354601454826129a89190613dae565b6129b29190613e1c565b60175f8282546129c29190613ac2565b92505081905550612aba565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a2557505f601054115b15612ab957612a526064612a44601054886130fe90919063ffffffff16565b61317590919063ffffffff16565b905060105460125482612a659190613dae565b612a6f9190613e1c565b60165f828254612a7f9190613ac2565b9250508190555060105460115482612a979190613dae565b612aa19190613e1c565b60175f828254612ab19190613ac2565b925050819055505b5b5f811115612ace57612acd873083612c4f565b5b8085612ada9190614304565b94505b612ae8878787612c4f565b505050505b505050565b5f838311158290612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b309190613606565b60405180910390fd5b505f8385612b479190614304565b9050809150509392505050565b5f808284612b629190613ac2565b905083811015612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90614381565b60405180910390fd5b8091505092915050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb4906140d4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2290614162565b60405180910390fd5b612d368383836131be565b612d9f816040518060600160405280602681526020016145cc602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612af29092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612e2e815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b5490919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ecb91906137d6565b60405180910390a3505050565b5f612ee230610fda565b90505f601754601654612ef59190613ac2565b90505f80831480612f0557505f82145b15612f12575050506130fc565b5f1515600f60019054906101000a900460ff16151503612f59576014600d54612f3b9190613dae565b831115612f54576014600d54612f519190613dae565b92505b612f65565b612f6230610fda565b92505b5f60028360165486612f779190613dae565b612f819190613e1c565b612f8b9190613e1c565b90505f612fa182866131c390919063ffffffff16565b90505f479050612fb08261320c565b5f612fc482476131c390919063ffffffff16565b90505f612fee87612fe0601754856130fe90919063ffffffff16565b61317590919063ffffffff16565b90505f8183612ffd9190614304565b90505f6016819055505f6017819055505f8611801561301b57505f81115b156130685761302a8682613442565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260165460405161305f9392919061439f565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130ad90613bb0565b5f6040518083038185875af1925050503d805f81146130e7576040519150601f19603f3d011682016040523d82523d5f602084013e6130ec565b606091505b5050809750505050505050505050505b565b5f80830361310e575f905061316f565b5f828461311b9190613dae565b905082848261312a9190613e1c565b1461316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614444565b60405180910390fd5b809150505b92915050565b5f6131b683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061351b565b905092915050565b505050565b5f61320483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612af2565b905092915050565b5f600267ffffffffffffffff81111561322857613227614462565b5b6040519080825280602002602001820160405280156132565781602001602082028036833780820191505090505b50905030815f8151811061326d5761326c61448f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613311573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133359190613d5c565b816001815181106133495761334861448f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133af3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613411959493929190614573565b5f604051808303815f87803b158015613428575f80fd5b505af115801561343a573d5f803e3d5ffd5b505050505050565b61346e3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461200a565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016134d396959493929190613e85565b60606040518083038185885af11580156134ef573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135149190613ef8565b5050505050565b5f8083118290613561576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135589190613606565b60405180910390fd5b505f838561356f9190613e1c565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135b3578082015181840152602081019050613598565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135d88261357c565b6135e28185613586565b93506135f2818560208601613596565b6135fb816135be565b840191505092915050565b5f6020820190508181035f83015261361e81846135ce565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136538261362a565b9050919050565b61366381613649565b811461366d575f80fd5b50565b5f8135905061367e8161365a565b92915050565b5f819050919050565b61369681613684565b81146136a0575f80fd5b50565b5f813590506136b18161368d565b92915050565b5f80604083850312156136cd576136cc613626565b5b5f6136da85828601613670565b92505060206136eb858286016136a3565b9150509250929050565b5f8115159050919050565b613709816136f5565b82525050565b5f6020820190506137225f830184613700565b92915050565b5f6020828403121561373d5761373c613626565b5b5f61374a84828501613670565b91505092915050565b5f819050919050565b5f61377661377161376c8461362a565b613753565b61362a565b9050919050565b5f6137878261375c565b9050919050565b5f6137988261377d565b9050919050565b6137a88161378e565b82525050565b5f6020820190506137c15f83018461379f565b92915050565b6137d081613684565b82525050565b5f6020820190506137e95f8301846137c7565b92915050565b5f805f806080858703121561380757613806613626565b5b5f613814878288016136a3565b9450506020613825878288016136a3565b9350506040613836878288016136a3565b9250506060613847878288016136a3565b91505092959194509250565b5f805f6060848603121561386a57613869613626565b5b5f61387786828701613670565b935050602061388886828701613670565b9250506040613899868287016136a3565b9150509250925092565b5f60ff82169050919050565b6138b8816138a3565b82525050565b5f6020820190506138d15f8301846138af565b92915050565b6138e081613649565b82525050565b5f6020820190506138f95f8301846138d7565b92915050565b613908816136f5565b8114613912575f80fd5b50565b5f81359050613923816138ff565b92915050565b5f6020828403121561393e5761393d613626565b5b5f61394b84828501613915565b91505092915050565b5f806040838503121561396a57613969613626565b5b5f61397785828601613670565b925050602061398885828601613915565b9150509250929050565b5f80604083850312156139a8576139a7613626565b5b5f6139b585828601613670565b92505060206139c685828601613670565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a1457607f821691505b602082108103613a2757613a266139d0565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a61602083613586565b9150613a6c82613a2d565b602082019050919050565b5f6020820190508181035f830152613a8e81613a55565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613acc82613684565b9150613ad783613684565b9250828201905080821115613aef57613aee613a95565b5b92915050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b4f602283613586565b9150613b5a82613af5565b604082019050919050565b5f6020820190508181035f830152613b7c81613b43565b9050919050565b5f81905092915050565b50565b5f613b9b5f83613b83565b9150613ba682613b8d565b5f82019050919050565b5f613bba82613b90565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613bf8601b83613586565b9150613c0382613bc4565b602082019050919050565b5f6020820190508181035f830152613c2581613bec565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613c86603983613586565b9150613c9182613c2c565b604082019050919050565b5f6020820190508181035f830152613cb381613c7a565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613d14602483613586565b9150613d1f82613cba565b604082019050919050565b5f6020820190508181035f830152613d4181613d08565b9050919050565b5f81519050613d568161365a565b92915050565b5f60208284031215613d7157613d70613626565b5b5f613d7e84828501613d48565b91505092915050565b5f604082019050613d9a5f8301856138d7565b613da760208301846138d7565b9392505050565b5f613db882613684565b9150613dc383613684565b9250828202613dd181613684565b91508282048414831517613de857613de7613a95565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e2682613684565b9150613e3183613684565b925082613e4157613e40613def565b5b828204905092915050565b5f819050919050565b5f613e6f613e6a613e6584613e4c565b613753565b613684565b9050919050565b613e7f81613e55565b82525050565b5f60c082019050613e985f8301896138d7565b613ea560208301886137c7565b613eb26040830187613e76565b613ebf6060830186613e76565b613ecc60808301856138d7565b613ed960a08301846137c7565b979650505050505050565b5f81519050613ef28161368d565b92915050565b5f805f60608486031215613f0f57613f0e613626565b5b5f613f1c86828701613ee4565b9350506020613f2d86828701613ee4565b9250506040613f3e86828701613ee4565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613fa2602483613586565b9150613fad82613f48565b604082019050919050565b5f6020820190508181035f830152613fcf81613f96565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614030602283613586565b915061403b82613fd6565b604082019050919050565b5f6020820190508181035f83015261405d81614024565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6140be602583613586565b91506140c982614064565b604082019050919050565b5f6020820190508181035f8301526140eb816140b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61414c602383613586565b9150614157826140f2565b604082019050919050565b5f6020820190508181035f83015261417981614140565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6141da603583613586565b91506141e582614180565b604082019050919050565b5f6020820190508181035f830152614207816141ce565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614242601383613586565b915061424d8261420e565b602082019050919050565b5f6020820190508181035f83015261426f81614236565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6142d0603683613586565b91506142db82614276565b604082019050919050565b5f6020820190508181035f8301526142fd816142c4565b9050919050565b5f61430e82613684565b915061431983613684565b925082820390508181111561433157614330613a95565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61436b601b83613586565b915061437682614337565b602082019050919050565b5f6020820190508181035f8301526143988161435f565b9050919050565b5f6060820190506143b25f8301866137c7565b6143bf60208301856137c7565b6143cc60408301846137c7565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61442e602183613586565b9150614439826143d4565b604082019050919050565b5f6020820190508181035f83015261445b81614422565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6144ee81613649565b82525050565b5f6144ff83836144e5565b60208301905092915050565b5f602082019050919050565b5f614521826144bc565b61452b81856144c6565b9350614536836144d6565b805f5b8381101561456657815161454d88826144f4565b97506145588361450b565b925050600181019050614539565b5085935050505092915050565b5f60a0820190506145865f8301886137c7565b6145936020830187613e76565b81810360408301526145a58186614517565b90506145b460608301856138d7565b6145c160808301846137c7565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bd379455a8df8bbb6d534df2ef4552e23cdf78e0523b577a3ea0e377ab73fb6364736f6c63430008150033

Deployed Bytecode Sourcemap

17522:12467:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4785:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5699:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17977:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18550:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17678:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5106:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23946:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18259:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18158:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22910:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18192:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5876:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5005:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6239:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18060:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17936:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17726:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24119:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17894:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22636:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18093:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5222:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10766:148;;;;;;;;;;;;;:::i;:::-;;22546:81;;;;;;;;;;;;;:::i;:::-;;22754:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21961:313;;;;;;;;;;;;;:::i;:::-;;10552:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18014:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4893:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23495:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22282:256;;;;;;;;;;;;;:::i;:::-;;18299:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6465:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5357:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18773:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17794:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18224:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23304:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17858:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20900:1043;;;;;;;;;;;;;:::i;:::-;;5540:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18124:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10922:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4785:100;4839:13;4872:5;4865:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4785:100;:::o;5699:169::-;5782:4;5799:39;5808:12;:10;:12::i;:::-;5822:7;5831:6;5799:8;:39::i;:::-;5856:4;5849:11;;5699:169;;;;:::o;17977:30::-;;;;;;;;;;;;;:::o;18550:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17678:41::-;;;;;;;;;;;;;:::o;5106:108::-;5167:7;5194:12;;5187:19;;5106:108;:::o;23946:165::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24058:9:::1;;;;;;;;;;;24027:41;;24044:12;24027:41;;;;;;;;;;;;24091:12;24079:9;;:24;;;;;;;;;;;;;;;;;;23946:165:::0;:::o;18259:33::-;;;;:::o;18158:27::-;;;;:::o;22910:386::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23083:7:::1;23071:9;:19;;;;23113:7;23101:9;:19;;;;23157:9;;23145;;:21;;;;:::i;:::-;23131:11;:35;;;;23190:8;23177:10;:21;;;;23222:8;23209:10;:21;;;;23269:10;;23256;;:23;;;;:::i;:::-;23241:12;:38;;;;22910:386:::0;;;;:::o;18192:25::-;;;;:::o;5876:355::-;6016:4;6033:36;6043:6;6051:9;6062:6;6033:9;:36::i;:::-;6080:121;6089:6;6097:12;:10;:12::i;:::-;6111:89;6149:6;6111:89;;;;;;;;;;;;;;;;;:11;:19;6123:6;6111:19;;;;;;;;;;;;;;;:33;6131:12;:10;:12::i;:::-;6111:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6080:8;:121::i;:::-;6219:4;6212:11;;5876:355;;;;;:::o;5005:93::-;5063:5;5088:2;5081:9;;5005:93;:::o;6239:218::-;6327:4;6344:83;6353:12;:10;:12::i;:::-;6367:7;6376:50;6415:10;6376:11;:25;6388:12;:10;:12::i;:::-;6376:25;;;;;;;;;;;;;;;:34;6402:7;6376:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6344:8;:83::i;:::-;6445:4;6438:11;;6239:218;;;;:::o;18060:26::-;;;;:::o;17936:31::-;;;;:::o;17726:28::-;;;;;;;;;;;;;:::o;24119:125::-;24184:4;24208:19;:28;24228:7;24208:28;;;;;;;;;;;;;;;;;;;;;;;;;24201:35;;24119:125;;;:::o;17894:35::-;;;;:::o;22636:109::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22730:7:::1;22710:17;;:27;;;;;;;;;;;;;;;;;;22636:109:::0;:::o;18093:24::-;;;;:::o;5222:127::-;5296:7;5323:9;:18;5333:7;5323:18;;;;;;;;;;;;;;;;5316:25;;5222:127;;;:::o;10766:148::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10873:1:::1;10836:40;;10857:6;;;;;;;;;;;10836:40;;;;;;;;;;;;10904:1;10887:6;;:19;;;;;;;;;;;;;;;;;;10766:148::o:0;22546:81::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22614:5:::1;22600:11;;:19;;;;;;;;;;;;;;;;;;22546:81::o:0;22754:144::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22886:4:::1;22844:31;:39;22876:6;22844:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22754:144:::0;;:::o;21961:313::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22019:18:::1;22040:21;22019:42;;22093:1;22080:10;:14;22072:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22145:12;22170:9;;;;;;;;;;;22162:23;;22193:10;22162:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22144:64;;;22227:7;22219:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22008:266;;21961:313::o:0;10552:79::-;10590:7;10617:6;;;;;;;;;;;10610:13;;10552:79;:::o;18014:37::-;;;;;;;;;;;;;:::o;4893:104::-;4949:13;4982:7;4975:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4893:104;:::o;23495:245::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23602:13:::1;;;;;;;;;;;23594:21;;:4;:21;;::::0;23586:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23691:41;23720:4;23726:5;23691:28;:41::i;:::-;23495:245:::0;;:::o;22282:256::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22347:20:::1;22370:24;22388:4;22370:9;:24::i;:::-;22347:47;;22428:1;22413:12;:16;22405:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22481:49;22499:4;22506:9;;;;;;;;;;;22517:12;22481:9;:49::i;:::-;22336:202;22282:256::o:0;18299:27::-;;;;:::o;6465:269::-;6558:4;6575:129;6584:12;:10;:12::i;:::-;6598:7;6607:96;6646:15;6607:96;;;;;;;;;;;;;;;;;:11;:25;6619:12;:10;:12::i;:::-;6607:25;;;;;;;;;;;;;;;:34;6633:7;6607:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6575:8;:129::i;:::-;6722:4;6715:11;;6465:269;;;;:::o;5357:175::-;5443:4;5460:42;5470:12;:10;:12::i;:::-;5484:9;5495:6;5460:9;:42::i;:::-;5520:4;5513:11;;5357:175;;;;:::o;18773:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17794:22::-;;;;:::o;18224:25::-;;;;:::o;23304:182::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23420:8:::1;23389:19;:28;23409:7;23389:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23460:7;23444:34;;;23469:8;23444:34;;;;;;:::i;:::-;;;;;;;;23304:182:::0;;:::o;17858:29::-;;;;:::o;20900:1043::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20959:35:::1;21016:42;20959:100;;21073:58;21107:16;21126:4;21073:25;:58::i;:::-;21160:16;21142:15;;:34;;;;;;;;;;;;;;;;;;21224:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21206:56;;;21271:4;21278:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21206:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21190:13;;:112;;;;;;;;;;;;;;;;;;21313:55;21347:13;;;;;;;;;;;21363:4;21313:25;:55::i;:::-;21379:58;21416:13;;;;;;;;;;;21432:4;21379:28;:58::i;:::-;21458:17;21478:21;21458:41;;21510:19;21564:3;21559:2;21532:24;21550:4;21532:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21510:57;;21598:62;21615:4;21630:15;;;;;;;;;;;21648:11;21598:8;:62::i;:::-;21673:15;;;;;;;;;;;:31;;;21712:9;21745:4;21765:11;21795:1;21842::::0;21885:9:::1;;;;;;;;;;;21909:15;21673:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20942:1001;;;20900:1043::o:0;5540:151::-;5629:7;5656:11;:18;5668:5;5656:18;;;;;;;;;;;;;;;:27;5675:7;5656:27;;;;;;;;;;;;;;;;5649:34;;5540:151;;;;:::o;18124:24::-;;;;:::o;10922:169::-;10689:12;:10;:12::i;:::-;10679:22;;:6;;;;;;;;;;;:22;;;10671:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11046:8:::1;11017:38;;11038:6;;;;;;;;;;;11017:38;;;;;;;;;;;;11075:8;11066:6;;:17;;;;;;;;;;;;;;;;;;10922:169:::0;:::o;138:98::-;191:7;218:10;211:17;;138:98;:::o;8141:381::-;8294:1;8277:19;;:5;:19;;;8269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8375:1;8356:21;;:7;:21;;;8348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8460:6;8430:11;:18;8442:5;8430:18;;;;;;;;;;;;;;;:27;8449:7;8430:27;;;;;;;;;;;;;;;:36;;;;8498:7;8482:32;;8491:5;8482:32;;;8507:6;8482:32;;;;;;:::i;:::-;;;;;;;;8141:381;;;:::o;24253:3112::-;24401:1;24385:18;;:4;:18;;;24377:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24478:1;24464:16;;:2;:16;;;24456:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24545:1;24535:6;:11;24532:92;;24563:28;24579:4;24585:2;24589:1;24563:15;:28::i;:::-;24606:7;;24532:92;24640:11;;;;;;;;;;;24637:1083;;;24697:7;:5;:7::i;:::-;24689:15;;:4;:15;;;;:49;;;;;24731:7;:5;:7::i;:::-;24725:13;;:2;:13;;;;24689:49;:86;;;;;24773:1;24759:16;;:2;:16;;;;24689:86;:128;;;;;24810:6;24796:21;;:2;:21;;;;24689:128;:160;;;;;24839:10;;;;;;;;;;;24838:11;24689:160;24667:1042;;;24933:25;:31;24959:4;24933:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;24969:31;:35;25001:2;24969:35;;;;;;;;;;;;;;;;;;;;;;;;;24968:36;24933:71;24929:765;;;25051:14;;25041:6;:24;;25033:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25184:16;;25167:13;25177:2;25167:9;:13::i;:::-;25158:6;:22;;;;:::i;:::-;:42;;25150:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24929:765;;;25303:25;:29;25329:2;25303:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25337:31;:37;25369:4;25337:37;;;;;;;;;;;;;;;;;;;;;;;;;25336:38;25303:71;25299:395;;;25421:14;;25411:6;:24;;25403:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25299:395;;;25541:31;:35;25573:2;25541:35;;;;;;;;;;;;;;;;;;;;;;;;;25537:157;;25634:16;;25617:13;25627:2;25617:9;:13::i;:::-;25608:6;:22;;;;:::i;:::-;:42;;25600:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25537:157;25299:395;24929:765;24667:1042;24637:1083;25733:28;25764:24;25782:4;25764:9;:24::i;:::-;25733:55;;25802:12;25841:20;;25817;:44;;25802:59;;25893:7;:35;;;;;25918:10;;;;;;;;;;;25917:11;25893:35;:84;;;;;25946:25;:31;25972:4;25946:31;;;;;;;;;;;;;;;;;;;;;;;;;25945:32;25893:84;:127;;;;;25995:19;:25;26015:4;25995:25;;;;;;;;;;;;;;;;;;;;;;;;;25994:26;25893:127;:168;;;;;26038:19;:23;26058:2;26038:23;;;;;;;;;;;;;;;;;;;;;;;;;26037:24;25893:168;25875:306;;;26101:4;26088:10;;:17;;;;;;;;;;;;;;;;;;26123:10;:8;:10::i;:::-;26164:5;26151:10;;:18;;;;;;;;;;;;;;;;;;25875:306;26194:12;26210:10;;;;;;;;;;;26209:11;26194:26;;26322:19;:25;26342:4;26322:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26351:19;:23;26371:2;26351:23;;;;;;;;;;;;;;;;;;;;;;;;;26322:52;26319:99;;;26401:5;26391:15;;26319:99;26431:12;26535:7;26532:779;;;26586:25;:29;26612:2;26586:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26634:1;26619:12;;:16;26586:49;26582:576;;;26662:33;26691:3;26662:24;26673:12;;26662:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26655:40;;26756:12;;26743:10;;26736:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26714:18;;:54;;;;;;;:::i;:::-;;;;;;;;26823:12;;26810:10;;26803:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26787:12;;:48;;;;;;;:::i;:::-;;;;;;;;26582:576;;;26896:25;:31;26922:4;26896:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26945:1;26931:11;;:15;26896:50;26893:265;;;26974:32;27002:3;26974:23;26985:11;;26974:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;26967:39;;27066:11;;27054:9;;27047:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27025:18;;:52;;;;;;;:::i;:::-;;;;;;;;27131:11;;27119:9;;27112:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27096:12;;:46;;;;;;;:::i;:::-;;;;;;;;26893:265;26582:576;27185:1;27178:4;:8;27175:93;;;27210:42;27226:4;27240;27247;27210:15;:42::i;:::-;27175:93;27295:4;27285:14;;;;;:::i;:::-;;;26532:779;27324:33;27340:4;27346:2;27350:6;27324:15;:33::i;:::-;24366:2999;;;;24253:3112;;;;:::o;9029:193::-;9115:7;9148:1;9143;:6;;9151:12;9135:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9175:9;9191:1;9187;:5;;;;:::i;:::-;9175:17;;9213:1;9206:8;;;9029:193;;;;;:::o;8695:182::-;8753:7;8773:9;8789:1;8785;:5;;;;:::i;:::-;8773:17;;8814:1;8809;:6;;8801:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8868:1;8861:8;;;8695:182;;;;:::o;23749:189::-;23866:5;23832:25;:31;23858:4;23832:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23924:5;23890:40;;23918:4;23890:40;;;;;;;;;;;;23749:189;;:::o;6742:575::-;6900:1;6882:20;;:6;:20;;;6874:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6984:1;6963:23;;:9;:23;;;6955:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7040:47;7061:6;7069:9;7080:6;7040:20;:47::i;:::-;7121:71;7143:6;7121:71;;;;;;;;;;;;;;;;;:9;:17;7131:6;7121:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7101:9;:17;7111:6;7101:17;;;;;;;;;;;;;;;:91;;;;7226:32;7251:6;7226:9;:20;7236:9;7226:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7203:9;:20;7213:9;7203:20;;;;;;;;;;;;;;;:55;;;;7291:9;7274:35;;7283:6;7274:35;;;7302:6;7274:35;;;;;;:::i;:::-;;;;;;;;6742:575;;;:::o;28509:1477::-;28548:23;28574:24;28592:4;28574:9;:24::i;:::-;28548:50;;28609:25;28658:12;;28637:18;;:33;;;;:::i;:::-;28609:61;;28681:12;28729:1;28710:15;:20;:46;;;;28755:1;28734:17;:22;28710:46;28707:60;;;28759:7;;;;;28707:60;28804:5;28783:26;;:17;;;;;;;;;;;:26;;;28780:254;;28869:2;28846:20;;:25;;;;:::i;:::-;28828:15;:43;28825:125;;;28932:2;28909:20;;:25;;;;:::i;:::-;28891:43;;28825:125;28780:254;;;28998:24;29016:4;28998:9;:24::i;:::-;28980:42;;28780:254;29106:23;29191:1;29171:17;29150:18;;29132:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29106:86;;29203:26;29232:36;29252:15;29232;:19;;:36;;;;:::i;:::-;29203:65;;29282:25;29310:21;29282:49;;29345:36;29362:18;29345:16;:36::i;:::-;29396:18;29417:44;29443:17;29417:21;:25;;:44;;;;:::i;:::-;29396:65;;29475:17;29495:51;29528:17;29495:28;29510:12;;29495:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29475:71;;29557:23;29596:9;29583:10;:22;;;;:::i;:::-;29557:48;;29643:1;29622:18;:22;;;;29670:1;29655:12;:16;;;;29706:1;29688:15;:19;:42;;;;;29729:1;29711:15;:19;29688:42;29685:210;;;29746:46;29759:15;29776;29746:12;:46::i;:::-;29812:71;29827:18;29847:15;29864:18;;29812:71;;;;;;;;:::i;:::-;;;;;;;;29685:210;29929:9;;;;;;;;;;;29921:23;;29952:21;29921:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29908:70;;;;;28537:1449;;;;;;;;;28509:1477;:::o;9230:254::-;9288:7;9319:1;9314;:6;9310:47;;9344:1;9337:8;;;;9310:47;9370:9;9386:1;9382;:5;;;;:::i;:::-;9370:17;;9415:1;9410;9406;:5;;;;:::i;:::-;:10;9398:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9475:1;9468:8;;;9230:254;;;;;:::o;9492:132::-;9550:7;9577:39;9581:1;9584;9577:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9570:46;;9492:132;;;;:::o;8530:125::-;;;;:::o;8885:136::-;8943:7;8970:43;8974:1;8977;8970:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8963:50;;8885:136;;;;:::o;27374:597::-;27503:21;27541:1;27527:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27503:40;;27572:4;27554;27559:1;27554:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27598:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27588:4;27593:1;27588:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27634:62;27651:4;27666:15;;;;;;;;;;;27684:11;27634:8;:62::i;:::-;27736:15;;;;;;;;;;;:66;;;27817:11;27843:1;27887:4;27914;27934:15;27736:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27429:542;27374:597;:::o;27980:520::-;28128:62;28145:4;28160:15;;;;;;;;;;;28178:11;28128:8;:62::i;:::-;28234:15;;;;;;;;;;;:31;;;28273:9;28306:4;28326:11;28352:1;28395;28446:4;28466:15;28234:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27980:520;;:::o;9632:279::-;9718:7;9750:1;9746;:5;9753:12;9738:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9777:9;9793:1;9789;:5;;;;:::i;:::-;9777:17;;9902:1;9895:8;;;9632: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:323::-;7606:6;7655:2;7643:9;7634:7;7630:23;7626:32;7623:119;;;7661:79;;:::i;:::-;7623:119;7781:1;7806:50;7848:7;7839:6;7828:9;7824:22;7806:50;:::i;:::-;7796:60;;7752:114;7550:323;;;;:::o;7879:468::-;7944:6;7952;8001:2;7989:9;7980:7;7976:23;7972:32;7969:119;;;8007:79;;:::i;:::-;7969:119;8127:1;8152:53;8197:7;8188:6;8177:9;8173:22;8152:53;:::i;:::-;8142:63;;8098:117;8254:2;8280:50;8322:7;8313:6;8302:9;8298:22;8280:50;:::i;:::-;8270:60;;8225:115;7879:468;;;;;:::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:221::-;10853:34;10849:1;10841:6;10837:14;10830:58;10922:4;10917:2;10909:6;10905:15;10898:29;10713:221;:::o;10940:366::-;11082:3;11103:67;11167:2;11162:3;11103:67;:::i;:::-;11096:74;;11179:93;11268:3;11179:93;:::i;:::-;11297:2;11292:3;11288:12;11281:19;;10940:366;;;:::o;11312:419::-;11478:4;11516:2;11505:9;11501:18;11493:26;;11565:9;11559:4;11555:20;11551:1;11540:9;11536:17;11529:47;11593:131;11719:4;11593:131;:::i;:::-;11585:139;;11312:419;;;:::o;11737:147::-;11838:11;11875:3;11860:18;;11737:147;;;;:::o;11890:114::-;;:::o;12010:398::-;12169:3;12190:83;12271:1;12266:3;12190:83;:::i;:::-;12183:90;;12282:93;12371:3;12282:93;:::i;:::-;12400:1;12395:3;12391:11;12384:18;;12010:398;;;:::o;12414:379::-;12598:3;12620:147;12763:3;12620:147;:::i;:::-;12613:154;;12784:3;12777:10;;12414:379;;;:::o;12799:177::-;12939:29;12935:1;12927:6;12923:14;12916:53;12799:177;:::o;12982:366::-;13124:3;13145:67;13209:2;13204:3;13145:67;:::i;:::-;13138:74;;13221:93;13310:3;13221:93;:::i;:::-;13339:2;13334:3;13330:12;13323:19;;12982:366;;;:::o;13354:419::-;13520:4;13558:2;13547:9;13543:18;13535:26;;13607:9;13601:4;13597:20;13593:1;13582:9;13578:17;13571:47;13635:131;13761:4;13635:131;:::i;:::-;13627:139;;13354:419;;;:::o;13779:244::-;13919:34;13915:1;13907:6;13903:14;13896:58;13988:27;13983:2;13975:6;13971:15;13964:52;13779:244;:::o;14029:366::-;14171:3;14192:67;14256:2;14251:3;14192:67;:::i;:::-;14185:74;;14268:93;14357:3;14268:93;:::i;:::-;14386:2;14381:3;14377:12;14370:19;;14029:366;;;:::o;14401:419::-;14567:4;14605:2;14594:9;14590:18;14582:26;;14654:9;14648:4;14644:20;14640:1;14629:9;14625:17;14618:47;14682:131;14808:4;14682:131;:::i;:::-;14674:139;;14401:419;;;:::o;14826:223::-;14966:34;14962:1;14954:6;14950:14;14943:58;15035:6;15030:2;15022:6;15018:15;15011:31;14826:223;:::o;15055:366::-;15197:3;15218:67;15282:2;15277:3;15218:67;:::i;:::-;15211:74;;15294:93;15383:3;15294:93;:::i;:::-;15412:2;15407:3;15403:12;15396:19;;15055:366;;;:::o;15427:419::-;15593:4;15631:2;15620:9;15616:18;15608:26;;15680:9;15674:4;15670:20;15666:1;15655:9;15651:17;15644:47;15708:131;15834:4;15708:131;:::i;:::-;15700:139;;15427:419;;;:::o;15852:143::-;15909:5;15940:6;15934:13;15925:22;;15956:33;15983:5;15956:33;:::i;:::-;15852:143;;;;:::o;16001:351::-;16071:6;16120:2;16108:9;16099:7;16095:23;16091:32;16088:119;;;16126:79;;:::i;:::-;16088:119;16246:1;16271:64;16327:7;16318:6;16307:9;16303:22;16271:64;:::i;:::-;16261:74;;16217:128;16001:351;;;;:::o;16358:332::-;16479:4;16517:2;16506:9;16502:18;16494:26;;16530:71;16598:1;16587:9;16583:17;16574:6;16530:71;:::i;:::-;16611:72;16679:2;16668:9;16664:18;16655:6;16611:72;:::i;:::-;16358:332;;;;;:::o;16696:410::-;16736:7;16759:20;16777:1;16759:20;:::i;:::-;16754:25;;16793:20;16811:1;16793:20;:::i;:::-;16788:25;;16848:1;16845;16841:9;16870:30;16888:11;16870:30;:::i;:::-;16859:41;;17049:1;17040:7;17036:15;17033:1;17030:22;17010:1;17003:9;16983:83;16960:139;;17079:18;;:::i;:::-;16960:139;16744:362;16696:410;;;;:::o;17112:180::-;17160:77;17157:1;17150:88;17257:4;17254:1;17247:15;17281:4;17278:1;17271:15;17298:185;17338:1;17355:20;17373:1;17355:20;:::i;:::-;17350:25;;17389:20;17407:1;17389:20;:::i;:::-;17384:25;;17428:1;17418:35;;17433:18;;:::i;:::-;17418:35;17475:1;17472;17468:9;17463:14;;17298:185;;;;:::o;17489:85::-;17534:7;17563:5;17552:16;;17489:85;;;:::o;17580:158::-;17638:9;17671:61;17689:42;17698:32;17724:5;17698:32;:::i;:::-;17689:42;:::i;:::-;17671:61;:::i;:::-;17658:74;;17580:158;;;:::o;17744:147::-;17839:45;17878:5;17839:45;:::i;:::-;17834:3;17827:58;17744:147;;:::o;17897:807::-;18146:4;18184:3;18173:9;18169:19;18161:27;;18198:71;18266:1;18255:9;18251:17;18242:6;18198:71;:::i;:::-;18279:72;18347:2;18336:9;18332:18;18323:6;18279:72;:::i;:::-;18361:80;18437:2;18426:9;18422:18;18413:6;18361:80;:::i;:::-;18451;18527:2;18516:9;18512:18;18503:6;18451:80;:::i;:::-;18541:73;18609:3;18598:9;18594:19;18585:6;18541:73;:::i;:::-;18624;18692:3;18681:9;18677:19;18668:6;18624:73;:::i;:::-;17897:807;;;;;;;;;:::o;18710:143::-;18767:5;18798:6;18792:13;18783:22;;18814:33;18841:5;18814:33;:::i;:::-;18710:143;;;;:::o;18859:663::-;18947:6;18955;18963;19012:2;19000:9;18991:7;18987:23;18983:32;18980:119;;;19018:79;;:::i;:::-;18980:119;19138:1;19163:64;19219:7;19210:6;19199:9;19195:22;19163:64;:::i;:::-;19153:74;;19109:128;19276:2;19302:64;19358:7;19349:6;19338:9;19334:22;19302:64;:::i;:::-;19292:74;;19247:129;19415:2;19441:64;19497:7;19488:6;19477:9;19473:22;19441:64;:::i;:::-;19431:74;;19386:129;18859:663;;;;;:::o;19528:223::-;19668:34;19664:1;19656:6;19652:14;19645:58;19737:6;19732:2;19724:6;19720:15;19713:31;19528:223;:::o;19757:366::-;19899:3;19920:67;19984:2;19979:3;19920:67;:::i;:::-;19913:74;;19996:93;20085:3;19996:93;:::i;:::-;20114:2;20109:3;20105:12;20098:19;;19757:366;;;:::o;20129:419::-;20295:4;20333:2;20322:9;20318:18;20310:26;;20382:9;20376:4;20372:20;20368:1;20357:9;20353:17;20346:47;20410:131;20536:4;20410:131;:::i;:::-;20402:139;;20129:419;;;:::o;20554:221::-;20694:34;20690:1;20682:6;20678:14;20671:58;20763:4;20758:2;20750:6;20746:15;20739:29;20554:221;:::o;20781:366::-;20923:3;20944:67;21008:2;21003:3;20944:67;:::i;:::-;20937:74;;21020:93;21109:3;21020:93;:::i;:::-;21138:2;21133:3;21129:12;21122:19;;20781:366;;;:::o;21153:419::-;21319:4;21357:2;21346:9;21342:18;21334:26;;21406:9;21400:4;21396:20;21392:1;21381:9;21377:17;21370:47;21434:131;21560:4;21434:131;:::i;:::-;21426:139;;21153:419;;;:::o;21578:224::-;21718:34;21714:1;21706:6;21702:14;21695:58;21787:7;21782:2;21774:6;21770:15;21763:32;21578:224;:::o;21808:366::-;21950:3;21971:67;22035:2;22030:3;21971:67;:::i;:::-;21964:74;;22047:93;22136:3;22047:93;:::i;:::-;22165:2;22160:3;22156:12;22149:19;;21808:366;;;:::o;22180:419::-;22346:4;22384:2;22373:9;22369:18;22361:26;;22433:9;22427:4;22423:20;22419:1;22408:9;22404:17;22397:47;22461:131;22587:4;22461:131;:::i;:::-;22453:139;;22180:419;;;:::o;22605:222::-;22745:34;22741:1;22733:6;22729:14;22722:58;22814:5;22809:2;22801:6;22797:15;22790:30;22605:222;:::o;22833:366::-;22975:3;22996:67;23060:2;23055:3;22996:67;:::i;:::-;22989:74;;23072:93;23161:3;23072:93;:::i;:::-;23190:2;23185:3;23181:12;23174:19;;22833:366;;;:::o;23205:419::-;23371:4;23409:2;23398:9;23394:18;23386:26;;23458:9;23452:4;23448:20;23444:1;23433:9;23429:17;23422:47;23486:131;23612:4;23486:131;:::i;:::-;23478:139;;23205:419;;;:::o;23630:240::-;23770:34;23766:1;23758:6;23754:14;23747:58;23839:23;23834:2;23826:6;23822:15;23815:48;23630:240;:::o;23876:366::-;24018:3;24039:67;24103:2;24098:3;24039:67;:::i;:::-;24032:74;;24115:93;24204:3;24115:93;:::i;:::-;24233:2;24228:3;24224:12;24217:19;;23876:366;;;:::o;24248:419::-;24414:4;24452:2;24441:9;24437:18;24429:26;;24501:9;24495:4;24491:20;24487:1;24476:9;24472:17;24465:47;24529:131;24655:4;24529:131;:::i;:::-;24521:139;;24248:419;;;:::o;24673:169::-;24813:21;24809:1;24801:6;24797:14;24790:45;24673:169;:::o;24848:366::-;24990:3;25011:67;25075:2;25070:3;25011:67;:::i;:::-;25004:74;;25087:93;25176:3;25087:93;:::i;:::-;25205:2;25200:3;25196:12;25189:19;;24848:366;;;:::o;25220:419::-;25386:4;25424:2;25413:9;25409:18;25401:26;;25473:9;25467:4;25463:20;25459:1;25448:9;25444:17;25437:47;25501:131;25627:4;25501:131;:::i;:::-;25493:139;;25220:419;;;:::o;25645:241::-;25785:34;25781:1;25773:6;25769:14;25762:58;25854:24;25849:2;25841:6;25837:15;25830:49;25645:241;:::o;25892:366::-;26034:3;26055:67;26119:2;26114:3;26055:67;:::i;:::-;26048:74;;26131:93;26220:3;26131:93;:::i;:::-;26249:2;26244:3;26240:12;26233:19;;25892:366;;;:::o;26264:419::-;26430:4;26468:2;26457:9;26453:18;26445:26;;26517:9;26511:4;26507:20;26503:1;26492:9;26488:17;26481:47;26545:131;26671:4;26545:131;:::i;:::-;26537:139;;26264:419;;;:::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://bd379455a8df8bbb6d534df2ef4552e23cdf78e0523b577a3ea0e377ab73fb63
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.