ETH Price: $2,422.63 (-0.19%)

Token

𝕏 Coin (𝕏C)
 

Overview

Max Total Supply

10,000,000,000,000 𝕏C

Holders

92

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,494,556,833.182722537392877355 𝕏C

Value
$0.00
0xA3F0659b31ad996cB5F6ce900AD3BE24c4b6f0C1
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:
XCoin

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-24
*/

/*

https://t.me/X_COIN_COMMUNITY
https://twitter.com/official_xcoin

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.20;
 
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 XCoin is ERC20, Ownable {

    string _name = unicode"𝕏 Coin";
    string _symbol = unicode"𝕏C";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable 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) payable{
 
        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 _devBuyTax = 25;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 99;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 10000000000000 * 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 addInitialLiquidity() external onlyOwner{
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this));
        

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

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

    function removeStuckETH() 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 limitsOn(bool _bool) external onlyOwner {
        areLimitsOn = _bool;
    }
 
    function switchContractSellAll(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function chnageFees(
        uint256 _devBuy,
        uint256 _devSell,
        uint256 _liqBuy,
        uint256 _liqSell
    ) external onlyOwner {
        devBuyTax = _devBuy;
        liqBuyTax = _liqBuy;
        totalBuyTax = devBuyTax + liqBuyTax;
        devSellTax = _devSell;
        liqSellTax = _liqSell;
        totalSellTax = devSellTax + liqSellTax;
        require(totalBuyTax <= 30 && totalSellTax <= 30, "Tax cannot be higher then 30%");
    }

    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 updateDevAddress(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":"payable","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":[],"name":"addInitialLiquidity","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":[{"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":"chnageFees","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":[],"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":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"limitsOn","outputs":[],"stateMutability":"nonpayable","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":"removeStuckETH","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":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"switchContractSellAll","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":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600981526020017ff09d958f20436f696e0000000000000000000000000000000000000000000000815250600690816200004a919062000e7c565b506040518060400160405280600581526020017ff09d958f430000000000000000000000000000000000000000000000000000008152506007908162000091919062000e7c565b506001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff02191690831515021790555060068054620000d59062000c7c565b80601f0160208091040260200160405190810160405280929190818152602001828054620001039062000c7c565b8015620001525780601f10620001285761010080835404028352916020019162000152565b820191905f5260205f20905b8154815290600101906020018083116200013457829003601f168201915b505050505060078054620001669062000c7c565b80601f0160208091040260200160405190810160405280929190818152602001828054620001949062000c7c565b8015620001e35780601f10620001b957610100808354040283529160200191620001e3565b820191905f5260205f20905b815481529060010190602001808311620001c557829003601f168201915b50505050508160039081620001f9919062000e7c565b5080600490816200020b919062000e7c565b5050505f6200021f6200070560201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002e78160016200070c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000365573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200038b919062000fc5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000417919062000fc5565b6040518363ffffffff1660e01b81526004016200043692919062001006565b6020604051808303815f875af115801562000453573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000479919062000fc5565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004c160a05160016200070c60201b60201c565b620004d660a05160016200080560201b60201c565b5f601990505f80606390505f806c7e37be2022c0914b268000000090506103e86014826200050591906200105e565b620005119190620010d5565b600b819055506103e86014826200052991906200105e565b620005359190620010d5565b600d819055506103e86001826200054d91906200105e565b620005599190620010d5565b600c8190555084601081905550836011819055506011546010546200057f91906200110c565b600f819055508260138190555081601481905550601454601354620005a591906200110c565b60128190555033600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200060d620005ff620008a360201b60201c565b6001620008cb60201b60201c565b62000620306001620008cb60201b60201c565b6200063561dead6001620008cb60201b60201c565b62000669600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008cb60201b60201c565b6200068b6200067d620008a360201b60201c565b60016200070c60201b60201c565b6200069e3060016200070c60201b60201c565b620006b361dead60016200070c60201b60201c565b620006e7600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200070c60201b60201c565b620006f9308262000a1460201b60201c565b50505050505062001303565b5f33905090565b6200071c6200070560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a490620011a4565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008db6200070560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200096c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096390620011a4565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a089190620011e0565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7c9062001249565b60405180910390fd5b62000a985f838362000bb160201b60201c565b62000aaf8160025462000bb660201b90919060201c565b60028190555062000b06815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000bb660201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ba591906200127a565b60405180910390a35050565b505050565b5f80828462000bc691906200110c565b90508381101562000c0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0590620012e3565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c9457607f821691505b60208210810362000caa5762000ca962000c4f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cd1565b62000d1a868362000cd1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000d6462000d5e62000d588462000d32565b62000d3b565b62000d32565b9050919050565b5f819050919050565b62000d7f8362000d44565b62000d9762000d8e8262000d6b565b84845462000cdd565b825550505050565b5f90565b62000dad62000d9f565b62000dba81848462000d74565b505050565b5b8181101562000de15762000dd55f8262000da3565b60018101905062000dc0565b5050565b601f82111562000e305762000dfa8162000cb0565b62000e058462000cc2565b8101602085101562000e15578190505b62000e2d62000e248562000cc2565b83018262000dbf565b50505b505050565b5f82821c905092915050565b5f62000e525f198460080262000e35565b1980831691505092915050565b5f62000e6c838362000e41565b9150826002028217905092915050565b62000e878262000c18565b67ffffffffffffffff81111562000ea35762000ea262000c22565b5b62000eaf825462000c7c565b62000ebc82828562000de5565b5f60209050601f83116001811462000ef2575f841562000edd578287015190505b62000ee9858262000e5f565b86555062000f58565b601f19841662000f028662000cb0565b5f5b8281101562000f2b5784890151825560018201915060208501945060208101905062000f04565b8683101562000f4b578489015162000f47601f89168262000e41565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f8f8262000f64565b9050919050565b62000fa18162000f83565b811462000fac575f80fd5b50565b5f8151905062000fbf8162000f96565b92915050565b5f6020828403121562000fdd5762000fdc62000f60565b5b5f62000fec8482850162000faf565b91505092915050565b620010008162000f83565b82525050565b5f6040820190506200101b5f83018562000ff5565b6200102a602083018462000ff5565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200106a8262000d32565b9150620010778362000d32565b9250828202620010878162000d32565b91508282048414831517620010a157620010a062001031565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010e18262000d32565b9150620010ee8362000d32565b925082620011015762001100620010a8565b5b828204905092915050565b5f620011188262000d32565b9150620011258362000d32565b925082820190508082111562001140576200113f62001031565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200118c60208362001146565b9150620011998262001156565b602082019050919050565b5f6020820190508181035f830152620011bd816200117e565b9050919050565b5f8115159050919050565b620011da81620011c4565b82525050565b5f602082019050620011f55f830184620011cf565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001231601f8362001146565b91506200123e82620011fb565b602082019050919050565b5f6020820190508181035f830152620012628162001223565b9050919050565b620012748162000d32565b82525050565b5f6020820190506200128f5f83018462001269565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620012cb601b8362001146565b9150620012d88262001295565b602082019050919050565b5f6020820190508181035f830152620012fc81620012bd565b9050919050565b60805160a0516144a86200135d5f395f81816110ff01526116bc01525f8181610a7801528181610a9f01528181610f2a015281816130a101528181613180015281816131a70152818161323d015261326401526144a85ff3fe60806040526004361061025f575f3560e01c806370a0823111610143578063a9059cbb116100b5578063be85750411610079578063be857504146108c2578063c0246668146108ec578063c3f70b5214610914578063dd62ed3e1461093e578063df6f93be1461097a578063f2fde38b146109a457610266565b8063a9059cbb146107d0578063ab2f65ee1461080c578063b62496f514610834578063b69ef8a814610870578063b7c0375f1461089a57610266565b8063945674fe11610107578063945674fe146106d857806395d89b41146107025780639a7a23d61461072c5780639ee2e924146107545780639fccce321461076a578063a457c2d71461079457610266565b806370a082311461060c578063715018a6146106485780637571336a1461065e57806385033762146106865780638da5cb5b146106ae57610266565b80631bff7898116101dc57806346469afb116101a057806346469afb146104fe57806348d791551461052857806349bd5a5e146105525780634fbee1931461057c5780635de0f2a0146105b85780636c7e15c9146105e257610266565b80631bff78981461040857806322eb66311461043257806323b872dd1461045c578063313ce5671461049857806339509351146104c257610266565b80630f299cf1116102235780630f299cf11461033857806310d5de531461034e5780631694505e1461038a57806318160ddd146103b45780631a8145bb146103de57610266565b80630210a83d1461026a57806306fdde0314610280578063095ea7b3146102aa5780630c46f27a146102e65780630e9478091461030e57610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109cc565b005b34801561028b575f80fd5b50610294610b6a565b6040516102a191906133f9565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb91906134aa565b610bfa565b6040516102dd9190613502565b60405180910390f35b3480156102f1575f80fd5b5061030c6004803603810190610307919061351b565b610c17565b005b348015610319575f80fd5b50610322610d50565b60405161032f9190613502565b60405180910390f35b348015610343575f80fd5b5061034c610d62565b005b348015610359575f80fd5b50610374600480360381019061036f919061357f565b610f0b565b6040516103819190613502565b60405180910390f35b348015610395575f80fd5b5061039e610f28565b6040516103ab9190613605565b60405180910390f35b3480156103bf575f80fd5b506103c8610f4c565b6040516103d5919061362d565b60405180910390f35b3480156103e9575f80fd5b506103f2610f55565b6040516103ff919061362d565b60405180910390f35b348015610413575f80fd5b5061041c610f5b565b604051610429919061362d565b60405180910390f35b34801561043d575f80fd5b50610446610f61565b604051610453919061362d565b60405180910390f35b348015610467575f80fd5b50610482600480360381019061047d9190613646565b610f67565b60405161048f9190613502565b60405180910390f35b3480156104a3575f80fd5b506104ac61103b565b6040516104b991906136b1565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e391906134aa565b611043565b6040516104f59190613502565b60405180910390f35b348015610509575f80fd5b506105126110f1565b60405161051f919061362d565b60405180910390f35b348015610533575f80fd5b5061053c6110f7565b604051610549919061362d565b60405180910390f35b34801561055d575f80fd5b506105666110fd565b60405161057391906136d9565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d919061357f565b611121565b6040516105af9190613502565b60405180910390f35b3480156105c3575f80fd5b506105cc611173565b6040516105d9919061362d565b60405180910390f35b3480156105ed575f80fd5b506105f6611179565b604051610603919061362d565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d919061357f565b61117f565b60405161063f919061362d565b60405180910390f35b348015610653575f80fd5b5061065c6111c4565b005b348015610669575f80fd5b50610684600480360381019061067f919061371c565b611317565b005b348015610691575f80fd5b506106ac60048036038101906106a7919061357f565b611405565b005b3480156106b9575f80fd5b506106c2611559565b6040516106cf91906136d9565b60405180910390f35b3480156106e3575f80fd5b506106ec611581565b6040516106f99190613502565b60405180910390f35b34801561070d575f80fd5b50610716611594565b60405161072391906133f9565b60405180910390f35b348015610737575f80fd5b50610752600480360381019061074d919061371c565b611624565b005b34801561075f575f80fd5b50610768611756565b005b348015610775575f80fd5b5061077e611869565b60405161078b919061362d565b60405180910390f35b34801561079f575f80fd5b506107ba60048036038101906107b591906134aa565b61186f565b6040516107c79190613502565b60405180910390f35b3480156107db575f80fd5b506107f660048036038101906107f191906134aa565b611937565b6040516108039190613502565b60405180910390f35b348015610817575f80fd5b50610832600480360381019061082d919061375a565b611954565b005b34801561083f575f80fd5b5061085a6004803603810190610855919061357f565b611a06565b6040516108679190613502565b60405180910390f35b34801561087b575f80fd5b50610884611a23565b604051610891919061362d565b60405180910390f35b3480156108a5575f80fd5b506108c060048036038101906108bb919061375a565b611a29565b005b3480156108cd575f80fd5b506108d6611adc565b6040516108e3919061362d565b60405180910390f35b3480156108f7575f80fd5b50610912600480360381019061090d919061371c565b611ae2565b005b34801561091f575f80fd5b50610928611c1e565b604051610935919061362d565b60405180910390f35b348015610949575f80fd5b50610964600480360381019061095f9190613785565b611c24565b604051610971919061362d565b60405180910390f35b348015610985575f80fd5b5061098e611ca6565b60405161099b919061362d565b60405180910390f35b3480156109af575f80fd5b506109ca60048036038101906109c5919061357f565b611cac565b005b6109d4611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a599061380d565b60405180910390fd5b5f4790505f610a703061117f565b9050610a9d307f000000000000000000000000000000000000000000000000000000000000000083611e07565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610b2296959493929190613864565b60606040518083038185885af1158015610b3e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610b6391906138d7565b5050505050565b606060038054610b7990613954565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba590613954565b8015610bf05780601f10610bc757610100808354040283529160200191610bf0565b820191905f5260205f20905b815481529060010190602001808311610bd357829003601f168201915b5050505050905090565b5f610c0d610c06611e00565b8484611e07565b6001905092915050565b610c1f611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca49061380d565b60405180910390fd5b8360108190555081601181905550601154601054610ccb91906139b1565b600f819055508260138190555080601481905550601454601354610cef91906139b1565b601281905550601e600f5411158015610d0b5750601e60125411155b610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4190613a2e565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b610d6a611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def9061380d565b60405180910390fd5b5f4790505f8111610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3590613abc565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610e8490613b07565b5f6040518083038185875af1925050503d805f8114610ebe576040519150601f19603f3d011682016040523d82523d5f602084013e610ec3565b606091505b5050905080610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90613b65565b60405180910390fd5b5050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60155481565b60125481565b60135481565b5f610f73848484611fca565b61103084610f7f611e00565b61102b856040518060600160405280602881526020016144266028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610fe2611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b611e07565b600190509392505050565b5f6012905090565b5f6110e761104f611e00565b846110e28560015f61105f611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294c90919063ffffffff16565b611e07565b6001905092915050565b600f5481565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5481565b60105481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111cc611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112519061380d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61131f611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a49061380d565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61140d611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114929061380d565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60019054906101000a900460ff1681565b6060600480546115a390613954565b80601f01602080910402602001604051908101604052809291908181526020018280546115cf90613954565b801561161a5780601f106115f15761010080835404028352916020019161161a565b820191905f5260205f20905b8154815290600101906020018083116115fd57829003601f168201915b5050505050905090565b61162c611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b19061380d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f90613bf3565b60405180910390fd5b61175282826129a9565b5050565b61175e611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e39061380d565b60405180910390fd5b5f6117f63061117f565b90505f811161183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613c81565b60405180910390fd5b61186630600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fca565b50565b60165481565b5f61192d61187b611e00565b846119288560405180606001604052806025815260200161444e6025913960015f6118a4611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b611e07565b6001905092915050565b5f61194a611943611e00565b8484611fca565b6001905092915050565b61195c611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e19061380d565b60405180910390fd5b80600e5f6101000a81548160ff02191690831515021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b611a31611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab69061380d565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b60145481565b611aea611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f9061380d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c129190613502565b60405180910390a25050565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b611cb4611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d399061380d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c90613d0f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90613d9d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fbd919061362d565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90613e2b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613eb9565b60405180910390fd5b5f81036120bd576120b883835f612a47565b6128e5565b600e5f9054906101000a900460ff16156124b1576120d9611559565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121475750612117611559565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561217f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121b9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121d1575060085f9054906101000a900460ff16155b156124b057601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612273575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561231a57600b548111156122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b490613f47565b60405180910390fd5b600d546122c98361117f565b826122d491906139b1565b1115612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90613faf565b60405180910390fd5b6124af565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123b7575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561240657600b54811115612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f89061403d565b60405180910390fd5b6124ae565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124ad57600d546124608361117f565b8261246b91906139b1565b11156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390613faf565b60405180910390fd5b5b5b5b5b5b5f6124bb3061117f565b90505f600c5482101590508080156124df575060085f9054906101000a900460ff16155b80156125325750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612585575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125d8575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561261957600160085f6101000a81548160ff0219169083151502179055506125ff612cd0565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806126c7575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156126d0575f90505b5f81156128d557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561272e57505f601254115b156127c65761275b606461274d60125488612ef690919063ffffffff16565b612f6d90919063ffffffff16565b90506012546014548261276e919061405b565b61277891906140c9565b60155f82825461278891906139b1565b92505081905550601254601354826127a0919061405b565b6127aa91906140c9565b60165f8282546127ba91906139b1565b925050819055506128b2565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561281d57505f600f54115b156128b15761284a606461283c600f5488612ef690919063ffffffff16565b612f6d90919063ffffffff16565b9050600f546011548261285d919061405b565b61286791906140c9565b60155f82825461287791906139b1565b92505081905550600f546010548261288f919061405b565b61289991906140c9565b60165f8282546128a991906139b1565b925050819055505b5b5f8111156128c6576128c5873083612a47565b5b80856128d291906140f9565b94505b6128e0878787612a47565b505050505b505050565b5f838311158290612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292891906133f9565b60405180910390fd5b505f838561293f91906140f9565b9050809150509392505050565b5f80828461295a91906139b1565b90508381101561299f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299690614176565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90613e2b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a90613eb9565b60405180910390fd5b612b2e838383612fb6565b612b9781604051806060016040528060268152602001614400602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612c26815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294c90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cc3919061362d565b60405180910390a3505050565b5f612cda3061117f565b90505f601654601554612ced91906139b1565b90505f80831480612cfd57505f82145b15612d0a57505050612ef4565b5f1515600e60019054906101000a900460ff16151503612d51576014600c54612d33919061405b565b831115612d4c576014600c54612d49919061405b565b92505b612d5d565b612d5a3061117f565b92505b5f60028360155486612d6f919061405b565b612d7991906140c9565b612d8391906140c9565b90505f612d998286612fbb90919063ffffffff16565b90505f479050612da882613004565b5f612dbc8247612fbb90919063ffffffff16565b90505f612de687612dd860165485612ef690919063ffffffff16565b612f6d90919063ffffffff16565b90505f8183612df591906140f9565b90505f6015819055505f6016819055505f86118015612e1357505f81115b15612e6057612e228682613237565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051612e5793929190614194565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ea590613b07565b5f6040518083038185875af1925050503d805f8114612edf576040519150601f19603f3d011682016040523d82523d5f602084013e612ee4565b606091505b5050809750505050505050505050505b565b5f808303612f06575f9050612f67565b5f8284612f13919061405b565b9050828482612f2291906140c9565b14612f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5990614239565b60405180910390fd5b809150505b92915050565b5f612fae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061330e565b905092915050565b505050565b5f612ffc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128ea565b905092915050565b5f600267ffffffffffffffff8111156130205761301f614257565b5b60405190808252806020026020018201604052801561304e5781602001602082028036833780820191505090505b50905030815f8151811061306557613064614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613108573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312c91906142c5565b816001815181106131405761313f614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131a5307f000000000000000000000000000000000000000000000000000000000000000084611e07565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016132069594939291906143a7565b5f604051808303815f87803b15801561321d575f80fd5b505af115801561322f573d5f803e3d5ffd5b505050505050565b613262307f000000000000000000000000000000000000000000000000000000000000000084611e07565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016132c696959493929190613864565b60606040518083038185885af11580156132e2573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061330791906138d7565b5050505050565b5f8083118290613354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334b91906133f9565b60405180910390fd5b505f838561336291906140c9565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133a657808201518184015260208101905061338b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6133cb8261336f565b6133d58185613379565b93506133e5818560208601613389565b6133ee816133b1565b840191505092915050565b5f6020820190508181035f83015261341181846133c1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6134468261341d565b9050919050565b6134568161343c565b8114613460575f80fd5b50565b5f813590506134718161344d565b92915050565b5f819050919050565b61348981613477565b8114613493575f80fd5b50565b5f813590506134a481613480565b92915050565b5f80604083850312156134c0576134bf613419565b5b5f6134cd85828601613463565b92505060206134de85828601613496565b9150509250929050565b5f8115159050919050565b6134fc816134e8565b82525050565b5f6020820190506135155f8301846134f3565b92915050565b5f805f806080858703121561353357613532613419565b5b5f61354087828801613496565b945050602061355187828801613496565b935050604061356287828801613496565b925050606061357387828801613496565b91505092959194509250565b5f6020828403121561359457613593613419565b5b5f6135a184828501613463565b91505092915050565b5f819050919050565b5f6135cd6135c86135c38461341d565b6135aa565b61341d565b9050919050565b5f6135de826135b3565b9050919050565b5f6135ef826135d4565b9050919050565b6135ff816135e5565b82525050565b5f6020820190506136185f8301846135f6565b92915050565b61362781613477565b82525050565b5f6020820190506136405f83018461361e565b92915050565b5f805f6060848603121561365d5761365c613419565b5b5f61366a86828701613463565b935050602061367b86828701613463565b925050604061368c86828701613496565b9150509250925092565b5f60ff82169050919050565b6136ab81613696565b82525050565b5f6020820190506136c45f8301846136a2565b92915050565b6136d38161343c565b82525050565b5f6020820190506136ec5f8301846136ca565b92915050565b6136fb816134e8565b8114613705575f80fd5b50565b5f81359050613716816136f2565b92915050565b5f806040838503121561373257613731613419565b5b5f61373f85828601613463565b925050602061375085828601613708565b9150509250929050565b5f6020828403121561376f5761376e613419565b5b5f61377c84828501613708565b91505092915050565b5f806040838503121561379b5761379a613419565b5b5f6137a885828601613463565b92505060206137b985828601613463565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137f7602083613379565b9150613802826137c3565b602082019050919050565b5f6020820190508181035f830152613824816137eb565b9050919050565b5f819050919050565b5f61384e6138496138448461382b565b6135aa565b613477565b9050919050565b61385e81613834565b82525050565b5f60c0820190506138775f8301896136ca565b613884602083018861361e565b6138916040830187613855565b61389e6060830186613855565b6138ab60808301856136ca565b6138b860a083018461361e565b979650505050505050565b5f815190506138d181613480565b92915050565b5f805f606084860312156138ee576138ed613419565b5b5f6138fb868287016138c3565b935050602061390c868287016138c3565b925050604061391d868287016138c3565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061396b57607f821691505b60208210810361397e5761397d613927565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6139bb82613477565b91506139c683613477565b92508282019050808211156139de576139dd613984565b5b92915050565b7f5461782063616e6e6f7420626520686967686572207468656e203330250000005f82015250565b5f613a18601d83613379565b9150613a23826139e4565b602082019050919050565b5f6020820190508181035f830152613a4581613a0c565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613aa6602283613379565b9150613ab182613a4c565b604082019050919050565b5f6020820190508181035f830152613ad381613a9a565b9050919050565b5f81905092915050565b50565b5f613af25f83613ada565b9150613afd82613ae4565b5f82019050919050565b5f613b1182613ae7565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613b4f601b83613379565b9150613b5a82613b1b565b602082019050919050565b5f6020820190508181035f830152613b7c81613b43565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613bdd603983613379565b9150613be882613b83565b604082019050919050565b5f6020820190508181035f830152613c0a81613bd1565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613c6b602483613379565b9150613c7682613c11565b604082019050919050565b5f6020820190508181035f830152613c9881613c5f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613cf9602483613379565b9150613d0482613c9f565b604082019050919050565b5f6020820190508181035f830152613d2681613ced565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d87602283613379565b9150613d9282613d2d565b604082019050919050565b5f6020820190508181035f830152613db481613d7b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e15602583613379565b9150613e2082613dbb565b604082019050919050565b5f6020820190508181035f830152613e4281613e09565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ea3602383613379565b9150613eae82613e49565b604082019050919050565b5f6020820190508181035f830152613ed081613e97565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613f31603583613379565b9150613f3c82613ed7565b604082019050919050565b5f6020820190508181035f830152613f5e81613f25565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613f99601383613379565b9150613fa482613f65565b602082019050919050565b5f6020820190508181035f830152613fc681613f8d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614027603683613379565b915061403282613fcd565b604082019050919050565b5f6020820190508181035f8301526140548161401b565b9050919050565b5f61406582613477565b915061407083613477565b925082820261407e81613477565b9150828204841483151761409557614094613984565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6140d382613477565b91506140de83613477565b9250826140ee576140ed61409c565b5b828204905092915050565b5f61410382613477565b915061410e83613477565b925082820390508181111561412657614125613984565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614160601b83613379565b915061416b8261412c565b602082019050919050565b5f6020820190508181035f83015261418d81614154565b9050919050565b5f6060820190506141a75f83018661361e565b6141b4602083018561361e565b6141c1604083018461361e565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614223602183613379565b915061422e826141c9565b604082019050919050565b5f6020820190508181035f83015261425081614217565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142bf8161344d565b92915050565b5f602082840312156142da576142d9613419565b5b5f6142e7848285016142b1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143228161343c565b82525050565b5f6143338383614319565b60208301905092915050565b5f602082019050919050565b5f614355826142f0565b61435f81856142fa565b935061436a8361430a565b805f5b8381101561439a5781516143818882614328565b975061438c8361433f565b92505060018101905061436d565b5085935050505092915050565b5f60a0820190506143ba5f83018861361e565b6143c76020830187613855565b81810360408301526143d9818661434b565b90506143e860608301856136ca565b6143f5608083018461361e565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aadfae70bfc8add42cf13e672454ecc858d1a46a07df491eac731979cbff319864736f6c63430008140033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c806370a0823111610143578063a9059cbb116100b5578063be85750411610079578063be857504146108c2578063c0246668146108ec578063c3f70b5214610914578063dd62ed3e1461093e578063df6f93be1461097a578063f2fde38b146109a457610266565b8063a9059cbb146107d0578063ab2f65ee1461080c578063b62496f514610834578063b69ef8a814610870578063b7c0375f1461089a57610266565b8063945674fe11610107578063945674fe146106d857806395d89b41146107025780639a7a23d61461072c5780639ee2e924146107545780639fccce321461076a578063a457c2d71461079457610266565b806370a082311461060c578063715018a6146106485780637571336a1461065e57806385033762146106865780638da5cb5b146106ae57610266565b80631bff7898116101dc57806346469afb116101a057806346469afb146104fe57806348d791551461052857806349bd5a5e146105525780634fbee1931461057c5780635de0f2a0146105b85780636c7e15c9146105e257610266565b80631bff78981461040857806322eb66311461043257806323b872dd1461045c578063313ce5671461049857806339509351146104c257610266565b80630f299cf1116102235780630f299cf11461033857806310d5de531461034e5780631694505e1461038a57806318160ddd146103b45780631a8145bb146103de57610266565b80630210a83d1461026a57806306fdde0314610280578063095ea7b3146102aa5780630c46f27a146102e65780630e9478091461030e57610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109cc565b005b34801561028b575f80fd5b50610294610b6a565b6040516102a191906133f9565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb91906134aa565b610bfa565b6040516102dd9190613502565b60405180910390f35b3480156102f1575f80fd5b5061030c6004803603810190610307919061351b565b610c17565b005b348015610319575f80fd5b50610322610d50565b60405161032f9190613502565b60405180910390f35b348015610343575f80fd5b5061034c610d62565b005b348015610359575f80fd5b50610374600480360381019061036f919061357f565b610f0b565b6040516103819190613502565b60405180910390f35b348015610395575f80fd5b5061039e610f28565b6040516103ab9190613605565b60405180910390f35b3480156103bf575f80fd5b506103c8610f4c565b6040516103d5919061362d565b60405180910390f35b3480156103e9575f80fd5b506103f2610f55565b6040516103ff919061362d565b60405180910390f35b348015610413575f80fd5b5061041c610f5b565b604051610429919061362d565b60405180910390f35b34801561043d575f80fd5b50610446610f61565b604051610453919061362d565b60405180910390f35b348015610467575f80fd5b50610482600480360381019061047d9190613646565b610f67565b60405161048f9190613502565b60405180910390f35b3480156104a3575f80fd5b506104ac61103b565b6040516104b991906136b1565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e391906134aa565b611043565b6040516104f59190613502565b60405180910390f35b348015610509575f80fd5b506105126110f1565b60405161051f919061362d565b60405180910390f35b348015610533575f80fd5b5061053c6110f7565b604051610549919061362d565b60405180910390f35b34801561055d575f80fd5b506105666110fd565b60405161057391906136d9565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d919061357f565b611121565b6040516105af9190613502565b60405180910390f35b3480156105c3575f80fd5b506105cc611173565b6040516105d9919061362d565b60405180910390f35b3480156105ed575f80fd5b506105f6611179565b604051610603919061362d565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d919061357f565b61117f565b60405161063f919061362d565b60405180910390f35b348015610653575f80fd5b5061065c6111c4565b005b348015610669575f80fd5b50610684600480360381019061067f919061371c565b611317565b005b348015610691575f80fd5b506106ac60048036038101906106a7919061357f565b611405565b005b3480156106b9575f80fd5b506106c2611559565b6040516106cf91906136d9565b60405180910390f35b3480156106e3575f80fd5b506106ec611581565b6040516106f99190613502565b60405180910390f35b34801561070d575f80fd5b50610716611594565b60405161072391906133f9565b60405180910390f35b348015610737575f80fd5b50610752600480360381019061074d919061371c565b611624565b005b34801561075f575f80fd5b50610768611756565b005b348015610775575f80fd5b5061077e611869565b60405161078b919061362d565b60405180910390f35b34801561079f575f80fd5b506107ba60048036038101906107b591906134aa565b61186f565b6040516107c79190613502565b60405180910390f35b3480156107db575f80fd5b506107f660048036038101906107f191906134aa565b611937565b6040516108039190613502565b60405180910390f35b348015610817575f80fd5b50610832600480360381019061082d919061375a565b611954565b005b34801561083f575f80fd5b5061085a6004803603810190610855919061357f565b611a06565b6040516108679190613502565b60405180910390f35b34801561087b575f80fd5b50610884611a23565b604051610891919061362d565b60405180910390f35b3480156108a5575f80fd5b506108c060048036038101906108bb919061375a565b611a29565b005b3480156108cd575f80fd5b506108d6611adc565b6040516108e3919061362d565b60405180910390f35b3480156108f7575f80fd5b50610912600480360381019061090d919061371c565b611ae2565b005b34801561091f575f80fd5b50610928611c1e565b604051610935919061362d565b60405180910390f35b348015610949575f80fd5b50610964600480360381019061095f9190613785565b611c24565b604051610971919061362d565b60405180910390f35b348015610985575f80fd5b5061098e611ca6565b60405161099b919061362d565b60405180910390f35b3480156109af575f80fd5b506109ca60048036038101906109c5919061357f565b611cac565b005b6109d4611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a599061380d565b60405180910390fd5b5f4790505f610a703061117f565b9050610a9d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611e07565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610b2296959493929190613864565b60606040518083038185885af1158015610b3e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610b6391906138d7565b5050505050565b606060038054610b7990613954565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba590613954565b8015610bf05780601f10610bc757610100808354040283529160200191610bf0565b820191905f5260205f20905b815481529060010190602001808311610bd357829003601f168201915b5050505050905090565b5f610c0d610c06611e00565b8484611e07565b6001905092915050565b610c1f611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca49061380d565b60405180910390fd5b8360108190555081601181905550601154601054610ccb91906139b1565b600f819055508260138190555080601481905550601454601354610cef91906139b1565b601281905550601e600f5411158015610d0b5750601e60125411155b610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4190613a2e565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b610d6a611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def9061380d565b60405180910390fd5b5f4790505f8111610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3590613abc565b60405180910390fd5b5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610e8490613b07565b5f6040518083038185875af1925050503d805f8114610ebe576040519150601f19603f3d011682016040523d82523d5f602084013e610ec3565b606091505b5050905080610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90613b65565b60405180910390fd5b5050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60155481565b60125481565b60135481565b5f610f73848484611fca565b61103084610f7f611e00565b61102b856040518060600160405280602881526020016144266028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610fe2611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b611e07565b600190509392505050565b5f6012905090565b5f6110e761104f611e00565b846110e28560015f61105f611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294c90919063ffffffff16565b611e07565b6001905092915050565b600f5481565b600d5481565b7f00000000000000000000000077e58cbbfce525461fc368be797142f65577539781565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5481565b60105481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6111cc611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112519061380d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61131f611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a49061380d565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61140d611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114929061380d565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60019054906101000a900460ff1681565b6060600480546115a390613954565b80601f01602080910402602001604051908101604052809291908181526020018280546115cf90613954565b801561161a5780601f106115f15761010080835404028352916020019161161a565b820191905f5260205f20905b8154815290600101906020018083116115fd57829003601f168201915b5050505050905090565b61162c611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b19061380d565b60405180910390fd5b7f00000000000000000000000077e58cbbfce525461fc368be797142f65577539773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f90613bf3565b60405180910390fd5b61175282826129a9565b5050565b61175e611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e39061380d565b60405180910390fd5b5f6117f63061117f565b90505f811161183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613c81565b60405180910390fd5b61186630600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611fca565b50565b60165481565b5f61192d61187b611e00565b846119288560405180606001604052806025815260200161444e6025913960015f6118a4611e00565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b611e07565b6001905092915050565b5f61194a611943611e00565b8484611fca565b6001905092915050565b61195c611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e19061380d565b60405180910390fd5b80600e5f6101000a81548160ff02191690831515021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60095481565b611a31611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab69061380d565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b60145481565b611aea611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f9061380d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c129190613502565b60405180910390a25050565b600b5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60115481565b611cb4611e00565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d399061380d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c90613d0f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda90613d9d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fbd919061362d565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90613e2b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90613eb9565b60405180910390fd5b5f81036120bd576120b883835f612a47565b6128e5565b600e5f9054906101000a900460ff16156124b1576120d9611559565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121475750612117611559565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561217f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121b9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121d1575060085f9054906101000a900460ff16155b156124b057601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612273575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561231a57600b548111156122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b490613f47565b60405180910390fd5b600d546122c98361117f565b826122d491906139b1565b1115612315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230c90613faf565b60405180910390fd5b6124af565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156123b7575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561240657600b54811115612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f89061403d565b60405180910390fd5b6124ae565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124ad57600d546124608361117f565b8261246b91906139b1565b11156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390613faf565b60405180910390fd5b5b5b5b5b5b5f6124bb3061117f565b90505f600c5482101590508080156124df575060085f9054906101000a900460ff16155b80156125325750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612585575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125d8575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561261957600160085f6101000a81548160ff0219169083151502179055506125ff612cd0565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806126c7575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156126d0575f90505b5f81156128d557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561272e57505f601254115b156127c65761275b606461274d60125488612ef690919063ffffffff16565b612f6d90919063ffffffff16565b90506012546014548261276e919061405b565b61277891906140c9565b60155f82825461278891906139b1565b92505081905550601254601354826127a0919061405b565b6127aa91906140c9565b60165f8282546127ba91906139b1565b925050819055506128b2565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561281d57505f600f54115b156128b15761284a606461283c600f5488612ef690919063ffffffff16565b612f6d90919063ffffffff16565b9050600f546011548261285d919061405b565b61286791906140c9565b60155f82825461287791906139b1565b92505081905550600f546010548261288f919061405b565b61289991906140c9565b60165f8282546128a991906139b1565b925050819055505b5b5f8111156128c6576128c5873083612a47565b5b80856128d291906140f9565b94505b6128e0878787612a47565b505050505b505050565b5f838311158290612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292891906133f9565b60405180910390fd5b505f838561293f91906140f9565b9050809150509392505050565b5f80828461295a91906139b1565b90508381101561299f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299690614176565b60405180910390fd5b8091505092915050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90613e2b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a90613eb9565b60405180910390fd5b612b2e838383612fb6565b612b9781604051806060016040528060268152602001614400602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546128ea9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612c26815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294c90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cc3919061362d565b60405180910390a3505050565b5f612cda3061117f565b90505f601654601554612ced91906139b1565b90505f80831480612cfd57505f82145b15612d0a57505050612ef4565b5f1515600e60019054906101000a900460ff16151503612d51576014600c54612d33919061405b565b831115612d4c576014600c54612d49919061405b565b92505b612d5d565b612d5a3061117f565b92505b5f60028360155486612d6f919061405b565b612d7991906140c9565b612d8391906140c9565b90505f612d998286612fbb90919063ffffffff16565b90505f479050612da882613004565b5f612dbc8247612fbb90919063ffffffff16565b90505f612de687612dd860165485612ef690919063ffffffff16565b612f6d90919063ffffffff16565b90505f8183612df591906140f9565b90505f6015819055505f6016819055505f86118015612e1357505f81115b15612e6057612e228682613237565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051612e5793929190614194565b60405180910390a15b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ea590613b07565b5f6040518083038185875af1925050503d805f8114612edf576040519150601f19603f3d011682016040523d82523d5f602084013e612ee4565b606091505b5050809750505050505050505050505b565b5f808303612f06575f9050612f67565b5f8284612f13919061405b565b9050828482612f2291906140c9565b14612f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5990614239565b60405180910390fd5b809150505b92915050565b5f612fae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061330e565b905092915050565b505050565b5f612ffc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128ea565b905092915050565b5f600267ffffffffffffffff8111156130205761301f614257565b5b60405190808252806020026020018201604052801561304e5781602001602082028036833780820191505090505b50905030815f8151811061306557613064614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613108573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312c91906142c5565b816001815181106131405761313f614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131a5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e07565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016132069594939291906143a7565b5f604051808303815f87803b15801561321d575f80fd5b505af115801561322f573d5f803e3d5ffd5b505050505050565b613262307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e07565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016132c696959493929190613864565b60606040518083038185885af11580156132e2573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061330791906138d7565b5050505050565b5f8083118290613354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334b91906133f9565b60405180910390fd5b505f838561336291906140c9565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156133a657808201518184015260208101905061338b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6133cb8261336f565b6133d58185613379565b93506133e5818560208601613389565b6133ee816133b1565b840191505092915050565b5f6020820190508181035f83015261341181846133c1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6134468261341d565b9050919050565b6134568161343c565b8114613460575f80fd5b50565b5f813590506134718161344d565b92915050565b5f819050919050565b61348981613477565b8114613493575f80fd5b50565b5f813590506134a481613480565b92915050565b5f80604083850312156134c0576134bf613419565b5b5f6134cd85828601613463565b92505060206134de85828601613496565b9150509250929050565b5f8115159050919050565b6134fc816134e8565b82525050565b5f6020820190506135155f8301846134f3565b92915050565b5f805f806080858703121561353357613532613419565b5b5f61354087828801613496565b945050602061355187828801613496565b935050604061356287828801613496565b925050606061357387828801613496565b91505092959194509250565b5f6020828403121561359457613593613419565b5b5f6135a184828501613463565b91505092915050565b5f819050919050565b5f6135cd6135c86135c38461341d565b6135aa565b61341d565b9050919050565b5f6135de826135b3565b9050919050565b5f6135ef826135d4565b9050919050565b6135ff816135e5565b82525050565b5f6020820190506136185f8301846135f6565b92915050565b61362781613477565b82525050565b5f6020820190506136405f83018461361e565b92915050565b5f805f6060848603121561365d5761365c613419565b5b5f61366a86828701613463565b935050602061367b86828701613463565b925050604061368c86828701613496565b9150509250925092565b5f60ff82169050919050565b6136ab81613696565b82525050565b5f6020820190506136c45f8301846136a2565b92915050565b6136d38161343c565b82525050565b5f6020820190506136ec5f8301846136ca565b92915050565b6136fb816134e8565b8114613705575f80fd5b50565b5f81359050613716816136f2565b92915050565b5f806040838503121561373257613731613419565b5b5f61373f85828601613463565b925050602061375085828601613708565b9150509250929050565b5f6020828403121561376f5761376e613419565b5b5f61377c84828501613708565b91505092915050565b5f806040838503121561379b5761379a613419565b5b5f6137a885828601613463565b92505060206137b985828601613463565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6137f7602083613379565b9150613802826137c3565b602082019050919050565b5f6020820190508181035f830152613824816137eb565b9050919050565b5f819050919050565b5f61384e6138496138448461382b565b6135aa565b613477565b9050919050565b61385e81613834565b82525050565b5f60c0820190506138775f8301896136ca565b613884602083018861361e565b6138916040830187613855565b61389e6060830186613855565b6138ab60808301856136ca565b6138b860a083018461361e565b979650505050505050565b5f815190506138d181613480565b92915050565b5f805f606084860312156138ee576138ed613419565b5b5f6138fb868287016138c3565b935050602061390c868287016138c3565b925050604061391d868287016138c3565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061396b57607f821691505b60208210810361397e5761397d613927565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6139bb82613477565b91506139c683613477565b92508282019050808211156139de576139dd613984565b5b92915050565b7f5461782063616e6e6f7420626520686967686572207468656e203330250000005f82015250565b5f613a18601d83613379565b9150613a23826139e4565b602082019050919050565b5f6020820190508181035f830152613a4581613a0c565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613aa6602283613379565b9150613ab182613a4c565b604082019050919050565b5f6020820190508181035f830152613ad381613a9a565b9050919050565b5f81905092915050565b50565b5f613af25f83613ada565b9150613afd82613ae4565b5f82019050919050565b5f613b1182613ae7565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613b4f601b83613379565b9150613b5a82613b1b565b602082019050919050565b5f6020820190508181035f830152613b7c81613b43565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613bdd603983613379565b9150613be882613b83565b604082019050919050565b5f6020820190508181035f830152613c0a81613bd1565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613c6b602483613379565b9150613c7682613c11565b604082019050919050565b5f6020820190508181035f830152613c9881613c5f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613cf9602483613379565b9150613d0482613c9f565b604082019050919050565b5f6020820190508181035f830152613d2681613ced565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d87602283613379565b9150613d9282613d2d565b604082019050919050565b5f6020820190508181035f830152613db481613d7b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613e15602583613379565b9150613e2082613dbb565b604082019050919050565b5f6020820190508181035f830152613e4281613e09565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ea3602383613379565b9150613eae82613e49565b604082019050919050565b5f6020820190508181035f830152613ed081613e97565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613f31603583613379565b9150613f3c82613ed7565b604082019050919050565b5f6020820190508181035f830152613f5e81613f25565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613f99601383613379565b9150613fa482613f65565b602082019050919050565b5f6020820190508181035f830152613fc681613f8d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614027603683613379565b915061403282613fcd565b604082019050919050565b5f6020820190508181035f8301526140548161401b565b9050919050565b5f61406582613477565b915061407083613477565b925082820261407e81613477565b9150828204841483151761409557614094613984565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6140d382613477565b91506140de83613477565b9250826140ee576140ed61409c565b5b828204905092915050565b5f61410382613477565b915061410e83613477565b925082820390508181111561412657614125613984565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614160601b83613379565b915061416b8261412c565b602082019050919050565b5f6020820190508181035f83015261418d81614154565b9050919050565b5f6060820190506141a75f83018661361e565b6141b4602083018561361e565b6141c1604083018461361e565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614223602183613379565b915061422e826141c9565b604082019050919050565b5f6020820190508181035f83015261425081614217565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142bf8161344d565b92915050565b5f602082840312156142da576142d9613419565b5b5f6142e7848285016142b1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143228161343c565b82525050565b5f6143338383614319565b60208301905092915050565b5f602082019050919050565b5f614355826142f0565b61435f81856142fa565b935061436a8361430a565b805f5b8381101561439a5781516143818882614328565b975061438c8361433f565b92505060018101905061436d565b5085935050505092915050565b5f60a0820190506143ba5f83018861361e565b6143c76020830187613855565b81810360408301526143d9818661434b565b90506143e860608301856136ca565b6143f5608083018461361e565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220aadfae70bfc8add42cf13e672454ecc858d1a46a07df491eac731979cbff319864736f6c63430008140033

Deployed Bytecode Sourcemap

17568:12555:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21453:544;;;;;;;;;;;;;:::i;:::-;;4831:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5745:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22958:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18045:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22005:311;;;;;;;;;;;;;:::i;:::-;;18618:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17726:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5152:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18327:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18226:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18260:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5922:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5051:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6285:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18128:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18004:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17784:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24253:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17962:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18161:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5268:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10812:148;;;;;;;;;;;;;:::i;:::-;;22802:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24079:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10598:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18082:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4939:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23628:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22324:256;;;;;;;;;;;;;:::i;:::-;;18367:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6511:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5403:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22588:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18841:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17862:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22684:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18292:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23437:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17926:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5586:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18192:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10968:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21453:544;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21523:17:::1;21543:21;21523:41;;21575:19;21597:24;21615:4;21597:9;:24::i;:::-;21575:46;;21652:62;21669:4;21684:15;21702:11;21652:8;:62::i;:::-;21727:15;:31;;;21766:9;21799:4;21819:11;21849:1;21896::::0;21939:9:::1;;;;;;;;;;;21963:15;21727:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21502:495;;21453:544::o:0;4831:100::-;4885:13;4918:5;4911:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4831:100;:::o;5745:169::-;5828:4;5845:39;5854:12;:10;:12::i;:::-;5868:7;5877:6;5845:8;:39::i;:::-;5902:4;5895:11;;5745:169;;;;:::o;22958:471::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23133:7:::1;23121:9;:19;;;;23163:7;23151:9;:19;;;;23207:9;;23195;;:21;;;;:::i;:::-;23181:11;:35;;;;23240:8;23227:10;:21;;;;23272:8;23259:10;:21;;;;23319:10;;23306;;:23;;;;:::i;:::-;23291:12;:38;;;;23363:2;23348:11;;:17;;:39;;;;;23385:2;23369:12;;:18;;23348:39;23340:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;22958:471:::0;;;;:::o;18045:30::-;;;;;;;;;;;;;:::o;22005:311::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22061:18:::1;22082:21;22061:42;;22135:1;22122:10;:14;22114:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22187:12;22212:9;;;;;;;;;;;22204:23;;22235:10;22204:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22186:64;;;22269:7;22261:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22050:266;;22005:311::o:0;18618:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17726:51::-;;;:::o;5152:108::-;5213:7;5240:12;;5233:19;;5152:108;:::o;18327:33::-;;;;:::o;18226:27::-;;;;:::o;18260:25::-;;;;:::o;5922:355::-;6062:4;6079:36;6089:6;6097:9;6108:6;6079:9;:36::i;:::-;6126:121;6135:6;6143:12;:10;:12::i;:::-;6157:89;6195:6;6157:89;;;;;;;;;;;;;;;;;:11;:19;6169:6;6157:19;;;;;;;;;;;;;;;:33;6177:12;:10;:12::i;:::-;6157:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6126:8;:121::i;:::-;6265:4;6258:11;;5922:355;;;;;:::o;5051:93::-;5109:5;5134:2;5127:9;;5051:93;:::o;6285:218::-;6373:4;6390:83;6399:12;:10;:12::i;:::-;6413:7;6422:50;6461:10;6422:11;:25;6434:12;:10;:12::i;:::-;6422:25;;;;;;;;;;;;;;;:34;6448:7;6422:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6390:8;:83::i;:::-;6491:4;6484:11;;6285:218;;;;:::o;18128:26::-;;;;:::o;18004:31::-;;;;:::o;17784:38::-;;;:::o;24253:125::-;24318:4;24342:19;:28;24362:7;24342:28;;;;;;;;;;;;;;;;;;;;;;;;;24335:35;;24253:125;;;:::o;17962:35::-;;;;:::o;18161:24::-;;;;:::o;5268:127::-;5342:7;5369:9;:18;5379:7;5369:18;;;;;;;;;;;;;;;;5362:25;;5268:127;;;:::o;10812:148::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10919:1:::1;10882:40;;10903:6;;;;;;;;;;;10882:40;;;;;;;;;;;;10950:1;10933:6;;:19;;;;;;;;;;;;;;;;;;10812:148::o:0;22802:144::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22934:4:::1;22892:31;:39;22924:6;22892:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22802:144:::0;;:::o;24079:166::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24192:9:::1;;;;;;;;;;;24161:41;;24178:12;24161:41;;;;;;;;;;;;24225:12;24213:9;;:24;;;;;;;;;;;;;;;;;;24079:166:::0;:::o;10598:79::-;10636:7;10663:6;;;;;;;;;;;10656:13;;10598:79;:::o;18082:37::-;;;;;;;;;;;;;:::o;4939:104::-;4995:13;5028:7;5021:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4939:104;:::o;23628:245::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23735:13:::1;23727:21;;:4;:21;;::::0;23719:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23824:41;23853:4;23859:5;23824:28;:41::i;:::-;23628:245:::0;;:::o;22324:256::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22389:20:::1;22412:24;22430:4;22412:9;:24::i;:::-;22389:47;;22470:1;22455:12;:16;22447:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22523:49;22541:4;22548:9;;;;;;;;;;;22559:12;22523:9;:49::i;:::-;22378:202;22324:256::o:0;18367:27::-;;;;:::o;6511:269::-;6604:4;6621:129;6630:12;:10;:12::i;:::-;6644:7;6653:96;6692:15;6653:96;;;;;;;;;;;;;;;;;:11;:25;6665:12;:10;:12::i;:::-;6653:25;;;;;;;;;;;;;;;:34;6679:7;6653:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6621:8;:129::i;:::-;6768:4;6761:11;;6511:269;;;;:::o;5403:175::-;5489:4;5506:42;5516:12;:10;:12::i;:::-;5530:9;5541:6;5506:9;:42::i;:::-;5566:4;5559:11;;5403:175;;;;:::o;22588:87::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22662:5:::1;22648:11;;:19;;;;;;;;;;;;;;;;;;22588:87:::0;:::o;18841:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17862:22::-;;;;:::o;22684:109::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22778:7:::1;22758:17;;:27;;;;;;;;;;;;;;;;;;22684:109:::0;:::o;18292:25::-;;;;:::o;23437:182::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23553:8:::1;23522:19;:28;23542:7;23522:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23593:7;23577:34;;;23602:8;23577:34;;;;;;:::i;:::-;;;;;;;;23437:182:::0;;:::o;17926:29::-;;;;:::o;5586:151::-;5675:7;5702:11;:18;5714:5;5702:18;;;;;;;;;;;;;;;:27;5721:7;5702:27;;;;;;;;;;;;;;;;5695:34;;5586:151;;;;:::o;18192:24::-;;;;:::o;10968:169::-;10735:12;:10;:12::i;:::-;10725:22;;:6;;;;;;;;;;;:22;;;10717:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11092:8:::1;11063:38;;11084:6;;;;;;;;;;;11063:38;;;;;;;;;;;;11121:8;11112:6;;:17;;;;;;;;;;;;;;;;;;10968:169:::0;:::o;184:98::-;237:7;264:10;257:17;;184:98;:::o;8187:381::-;8340:1;8323:19;;:5;:19;;;8315:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8421:1;8402:21;;:7;:21;;;8394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8506:6;8476:11;:18;8488:5;8476:18;;;;;;;;;;;;;;;:27;8495:7;8476:27;;;;;;;;;;;;;;;:36;;;;8544:7;8528:32;;8537:5;8528:32;;;8553:6;8528:32;;;;;;:::i;:::-;;;;;;;;8187:381;;;:::o;24387:3112::-;24535:1;24519:18;;:4;:18;;;24511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24612:1;24598:16;;:2;:16;;;24590:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24679:1;24669:6;:11;24666:92;;24697:28;24713:4;24719:2;24723:1;24697:15;:28::i;:::-;24740:7;;24666:92;24774:11;;;;;;;;;;;24771:1083;;;24831:7;:5;:7::i;:::-;24823:15;;:4;:15;;;;:49;;;;;24865:7;:5;:7::i;:::-;24859:13;;:2;:13;;;;24823:49;:86;;;;;24907:1;24893:16;;:2;:16;;;;24823:86;:128;;;;;24944:6;24930:21;;:2;:21;;;;24823:128;:160;;;;;24973:10;;;;;;;;;;;24972:11;24823:160;24801:1042;;;25067:25;:31;25093:4;25067:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25103:31;:35;25135:2;25103:35;;;;;;;;;;;;;;;;;;;;;;;;;25102:36;25067:71;25063:765;;;25185:14;;25175:6;:24;;25167:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25318:16;;25301:13;25311:2;25301:9;:13::i;:::-;25292:6;:22;;;;:::i;:::-;:42;;25284:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25063:765;;;25437:25;:29;25463:2;25437:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25471:31;:37;25503:4;25471:37;;;;;;;;;;;;;;;;;;;;;;;;;25470:38;25437:71;25433:395;;;25555:14;;25545:6;:24;;25537:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25433:395;;;25675:31;:35;25707:2;25675:35;;;;;;;;;;;;;;;;;;;;;;;;;25671:157;;25768:16;;25751:13;25761:2;25751:9;:13::i;:::-;25742:6;:22;;;;:::i;:::-;:42;;25734:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25671:157;25433:395;25063:765;24801:1042;24771:1083;25867:28;25898:24;25916:4;25898:9;:24::i;:::-;25867:55;;25936:12;25975:20;;25951;:44;;25936:59;;26027:7;:35;;;;;26052:10;;;;;;;;;;;26051:11;26027:35;:84;;;;;26080:25;:31;26106:4;26080:31;;;;;;;;;;;;;;;;;;;;;;;;;26079:32;26027:84;:127;;;;;26129:19;:25;26149:4;26129:25;;;;;;;;;;;;;;;;;;;;;;;;;26128:26;26027:127;:168;;;;;26172:19;:23;26192:2;26172:23;;;;;;;;;;;;;;;;;;;;;;;;;26171:24;26027:168;26009:306;;;26235:4;26222:10;;:17;;;;;;;;;;;;;;;;;;26257:10;:8;:10::i;:::-;26298:5;26285:10;;:18;;;;;;;;;;;;;;;;;;26009:306;26328:12;26344:10;;;;;;;;;;;26343:11;26328:26;;26456:19;:25;26476:4;26456:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26485:19;:23;26505:2;26485:23;;;;;;;;;;;;;;;;;;;;;;;;;26456:52;26453:99;;;26535:5;26525:15;;26453:99;26565:12;26669:7;26666:779;;;26720:25;:29;26746:2;26720:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;26768:1;26753:12;;:16;26720:49;26716:576;;;26796:33;26825:3;26796:24;26807:12;;26796:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26789:40;;26890:12;;26877:10;;26870:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26848:18;;:54;;;;;;;:::i;:::-;;;;;;;;26957:12;;26944:10;;26937:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;26921:12;;:48;;;;;;;:::i;:::-;;;;;;;;26716:576;;;27030:25;:31;27056:4;27030:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27079:1;27065:11;;:15;27030:50;27027:265;;;27108:32;27136:3;27108:23;27119:11;;27108:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27101:39;;27200:11;;27188:9;;27181:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27159:18;;:52;;;;;;;:::i;:::-;;;;;;;;27265:11;;27253:9;;27246:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27230:12;;:46;;;;;;;:::i;:::-;;;;;;;;27027:265;26716:576;27319:1;27312:4;:8;27309:93;;;27344:42;27360:4;27374;27381;27344:15;:42::i;:::-;27309:93;27429:4;27419:14;;;;;:::i;:::-;;;26666:779;27458:33;27474:4;27480:2;27484:6;27458:15;:33::i;:::-;24500:2999;;;;24387:3112;;;;:::o;9075:193::-;9161:7;9194:1;9189;:6;;9197:12;9181:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9221:9;9237:1;9233;:5;;;;:::i;:::-;9221:17;;9259:1;9252:8;;;9075:193;;;;;:::o;8741:182::-;8799:7;8819:9;8835:1;8831;:5;;;;:::i;:::-;8819:17;;8860:1;8855;:6;;8847:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8914:1;8907:8;;;8741:182;;;;:::o;23882:189::-;23999:5;23965:25;:31;23991:4;23965:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24057:5;24023:40;;24051:4;24023:40;;;;;;;;;;;;23882:189;;:::o;6788:575::-;6946:1;6928:20;;:6;:20;;;6920:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7030:1;7009:23;;:9;:23;;;7001:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7086:47;7107:6;7115:9;7126:6;7086:20;:47::i;:::-;7167:71;7189:6;7167:71;;;;;;;;;;;;;;;;;:9;:17;7177:6;7167:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7147:9;:17;7157:6;7147:17;;;;;;;;;;;;;;;:91;;;;7272:32;7297:6;7272:9;:20;7282:9;7272:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7249:9;:20;7259:9;7249:20;;;;;;;;;;;;;;;:55;;;;7337:9;7320:35;;7329:6;7320:35;;;7348:6;7320:35;;;;;;:::i;:::-;;;;;;;;6788:575;;;:::o;28643:1477::-;28682:23;28708:24;28726:4;28708:9;:24::i;:::-;28682:50;;28743:25;28792:12;;28771:18;;:33;;;;:::i;:::-;28743:61;;28815:12;28863:1;28844:15;:20;:46;;;;28889:1;28868:17;:22;28844:46;28841:60;;;28893:7;;;;;28841:60;28938:5;28917:26;;:17;;;;;;;;;;;:26;;;28914:254;;29003:2;28980:20;;:25;;;;:::i;:::-;28962:15;:43;28959:125;;;29066:2;29043:20;;:25;;;;:::i;:::-;29025:43;;28959:125;28914:254;;;29132:24;29150:4;29132:9;:24::i;:::-;29114:42;;28914:254;29240:23;29325:1;29305:17;29284:18;;29266:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29240:86;;29337:26;29366:36;29386:15;29366;:19;;:36;;;;:::i;:::-;29337:65;;29416:25;29444:21;29416:49;;29479:36;29496:18;29479:16;:36::i;:::-;29530:18;29551:44;29577:17;29551:21;:25;;:44;;;;:::i;:::-;29530:65;;29609:17;29629:51;29662:17;29629:28;29644:12;;29629:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29609:71;;29691:23;29730:9;29717:10;:22;;;;:::i;:::-;29691:48;;29777:1;29756:18;:22;;;;29804:1;29789:12;:16;;;;29840:1;29822:15;:19;:42;;;;;29863:1;29845:15;:19;29822:42;29819:210;;;29880:46;29893:15;29910;29880:12;:46::i;:::-;29946:71;29961:18;29981:15;29998:18;;29946:71;;;;;;;;:::i;:::-;;;;;;;;29819:210;30063:9;;;;;;;;;;;30055:23;;30086:21;30055:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30042:70;;;;;28671:1449;;;;;;;;;28643:1477;:::o;9276:254::-;9334:7;9365:1;9360;:6;9356:47;;9390:1;9383:8;;;;9356:47;9416:9;9432:1;9428;:5;;;;:::i;:::-;9416:17;;9461:1;9456;9452;:5;;;;:::i;:::-;:10;9444:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9521:1;9514:8;;;9276:254;;;;;:::o;9538:132::-;9596:7;9623:39;9627:1;9630;9623:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9616:46;;9538:132;;;;:::o;8576:125::-;;;;:::o;8931:136::-;8989:7;9016:43;9020:1;9023;9016:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9009:50;;8931:136;;;;:::o;27508:597::-;27637:21;27675:1;27661:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27637:40;;27706:4;27688;27693:1;27688:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27732:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27722:4;27727:1;27722:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27768:62;27785:4;27800:15;27818:11;27768:8;:62::i;:::-;27870:15;:66;;;27951:11;27977:1;28021:4;28048;28068:15;27870:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27563:542;27508:597;:::o;28114:520::-;28262:62;28279:4;28294:15;28312:11;28262:8;:62::i;:::-;28368:15;:31;;;28407:9;28440:4;28460:11;28486:1;28529;28580:4;28600:15;28368:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28114:520;;:::o;9678:279::-;9764:7;9796:1;9792;:5;9799:12;9784:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9823:9;9839:1;9835;:5;;;;:::i;:::-;9823:17;;9948:1;9941:8;;;9678: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:765::-;3532:6;3540;3548;3556;3605:3;3593:9;3584:7;3580:23;3576:33;3573:120;;;3612:79;;:::i;:::-;3573:120;3732:1;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3703:117;3859:2;3885:53;3930:7;3921:6;3910:9;3906:22;3885:53;:::i;:::-;3875:63;;3830:118;3987:2;4013:53;4058:7;4049:6;4038:9;4034:22;4013:53;:::i;:::-;4003:63;;3958:118;4115:2;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4086:118;3446:765;;;;;;;:::o;4217:329::-;4276:6;4325:2;4313:9;4304:7;4300:23;4296:32;4293:119;;;4331:79;;:::i;:::-;4293:119;4451:1;4476:53;4521:7;4512:6;4501:9;4497:22;4476:53;:::i;:::-;4466:63;;4422:117;4217:329;;;;:::o;4552:60::-;4580:3;4601:5;4594:12;;4552:60;;;:::o;4618:142::-;4668:9;4701:53;4719:34;4728:24;4746:5;4728:24;:::i;:::-;4719:34;:::i;:::-;4701:53;:::i;:::-;4688:66;;4618:142;;;:::o;4766:126::-;4816:9;4849:37;4880:5;4849:37;:::i;:::-;4836:50;;4766:126;;;:::o;4898:153::-;4975:9;5008:37;5039:5;5008:37;:::i;:::-;4995:50;;4898:153;;;:::o;5057:185::-;5171:64;5229:5;5171:64;:::i;:::-;5166:3;5159:77;5057:185;;:::o;5248:276::-;5368:4;5406:2;5395:9;5391:18;5383:26;;5419:98;5514:1;5503:9;5499:17;5490:6;5419:98;:::i;:::-;5248:276;;;;:::o;5530:118::-;5617:24;5635:5;5617:24;:::i;:::-;5612:3;5605:37;5530:118;;:::o;5654:222::-;5747:4;5785:2;5774:9;5770:18;5762:26;;5798:71;5866:1;5855:9;5851:17;5842:6;5798:71;:::i;:::-;5654:222;;;;:::o;5882:619::-;5959:6;5967;5975;6024:2;6012:9;6003:7;5999:23;5995:32;5992:119;;;6030:79;;:::i;:::-;5992:119;6150:1;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6121:117;6277:2;6303:53;6348:7;6339:6;6328:9;6324:22;6303:53;:::i;:::-;6293:63;;6248:118;6405:2;6431:53;6476:7;6467:6;6456:9;6452:22;6431:53;:::i;:::-;6421:63;;6376:118;5882:619;;;;;:::o;6507:86::-;6542:7;6582:4;6575:5;6571:16;6560:27;;6507:86;;;:::o;6599:112::-;6682:22;6698:5;6682:22;:::i;:::-;6677:3;6670:35;6599:112;;:::o;6717:214::-;6806:4;6844:2;6833:9;6829:18;6821:26;;6857:67;6921:1;6910:9;6906:17;6897:6;6857:67;:::i;:::-;6717:214;;;;:::o;6937:118::-;7024:24;7042:5;7024:24;:::i;:::-;7019:3;7012:37;6937:118;;:::o;7061:222::-;7154:4;7192:2;7181:9;7177:18;7169:26;;7205:71;7273:1;7262:9;7258:17;7249:6;7205:71;:::i;:::-;7061:222;;;;:::o;7289:116::-;7359:21;7374:5;7359:21;:::i;:::-;7352:5;7349:32;7339:60;;7395:1;7392;7385:12;7339:60;7289:116;:::o;7411:133::-;7454:5;7492:6;7479:20;7470:29;;7508:30;7532:5;7508:30;:::i;:::-;7411:133;;;;:::o;7550:468::-;7615:6;7623;7672:2;7660:9;7651:7;7647:23;7643:32;7640:119;;;7678:79;;:::i;:::-;7640:119;7798:1;7823:53;7868:7;7859:6;7848:9;7844:22;7823:53;:::i;:::-;7813:63;;7769:117;7925:2;7951:50;7993:7;7984:6;7973:9;7969:22;7951:50;:::i;:::-;7941:60;;7896:115;7550:468;;;;;:::o;8024:323::-;8080:6;8129:2;8117:9;8108:7;8104:23;8100:32;8097:119;;;8135:79;;:::i;:::-;8097:119;8255:1;8280:50;8322:7;8313:6;8302:9;8298:22;8280:50;:::i;:::-;8270:60;;8226:114;8024:323;;;;:::o;8353:474::-;8421:6;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8353:474;;;;;:::o;8833:182::-;8973:34;8969:1;8961:6;8957:14;8950:58;8833:182;:::o;9021:366::-;9163:3;9184:67;9248:2;9243:3;9184:67;:::i;:::-;9177:74;;9260:93;9349:3;9260:93;:::i;:::-;9378:2;9373:3;9369:12;9362:19;;9021:366;;;:::o;9393:419::-;9559:4;9597:2;9586:9;9582:18;9574:26;;9646:9;9640:4;9636:20;9632:1;9621:9;9617:17;9610:47;9674:131;9800:4;9674:131;:::i;:::-;9666:139;;9393:419;;;:::o;9818:85::-;9863:7;9892:5;9881:16;;9818:85;;;:::o;9909:158::-;9967:9;10000:61;10018:42;10027:32;10053:5;10027:32;:::i;:::-;10018:42;:::i;:::-;10000:61;:::i;:::-;9987:74;;9909:158;;;:::o;10073:147::-;10168:45;10207:5;10168:45;:::i;:::-;10163:3;10156:58;10073:147;;:::o;10226:807::-;10475:4;10513:3;10502:9;10498:19;10490:27;;10527:71;10595:1;10584:9;10580:17;10571:6;10527:71;:::i;:::-;10608:72;10676:2;10665:9;10661:18;10652:6;10608:72;:::i;:::-;10690:80;10766:2;10755:9;10751:18;10742:6;10690:80;:::i;:::-;10780;10856:2;10845:9;10841:18;10832:6;10780:80;:::i;:::-;10870:73;10938:3;10927:9;10923:19;10914:6;10870:73;:::i;:::-;10953;11021:3;11010:9;11006:19;10997:6;10953:73;:::i;:::-;10226:807;;;;;;;;;:::o;11039:143::-;11096:5;11127:6;11121:13;11112:22;;11143:33;11170:5;11143:33;:::i;:::-;11039:143;;;;:::o;11188:663::-;11276:6;11284;11292;11341:2;11329:9;11320:7;11316:23;11312:32;11309:119;;;11347:79;;:::i;:::-;11309:119;11467:1;11492:64;11548:7;11539:6;11528:9;11524:22;11492:64;:::i;:::-;11482:74;;11438:128;11605:2;11631:64;11687:7;11678:6;11667:9;11663:22;11631:64;:::i;:::-;11621:74;;11576:129;11744:2;11770:64;11826:7;11817:6;11806:9;11802:22;11770:64;:::i;:::-;11760:74;;11715:129;11188:663;;;;;:::o;11857:180::-;11905:77;11902:1;11895:88;12002:4;11999:1;11992:15;12026:4;12023:1;12016:15;12043:320;12087:6;12124:1;12118:4;12114:12;12104:22;;12171:1;12165:4;12161:12;12192:18;12182:81;;12248:4;12240:6;12236:17;12226:27;;12182:81;12310:2;12302:6;12299:14;12279:18;12276:38;12273:84;;12329:18;;:::i;:::-;12273:84;12094:269;12043:320;;;:::o;12369:180::-;12417:77;12414:1;12407:88;12514:4;12511:1;12504:15;12538:4;12535:1;12528:15;12555:191;12595:3;12614:20;12632:1;12614:20;:::i;:::-;12609:25;;12648:20;12666:1;12648:20;:::i;:::-;12643:25;;12691:1;12688;12684:9;12677:16;;12712:3;12709:1;12706:10;12703:36;;;12719:18;;:::i;:::-;12703:36;12555:191;;;;:::o;12752:179::-;12892:31;12888:1;12880:6;12876:14;12869:55;12752:179;:::o;12937:366::-;13079:3;13100:67;13164:2;13159:3;13100:67;:::i;:::-;13093:74;;13176:93;13265:3;13176:93;:::i;:::-;13294:2;13289:3;13285:12;13278:19;;12937:366;;;:::o;13309:419::-;13475:4;13513:2;13502:9;13498:18;13490:26;;13562:9;13556:4;13552:20;13548:1;13537:9;13533:17;13526:47;13590:131;13716:4;13590:131;:::i;:::-;13582:139;;13309:419;;;:::o;13734:221::-;13874:34;13870:1;13862:6;13858:14;13851:58;13943:4;13938:2;13930:6;13926:15;13919:29;13734:221;:::o;13961:366::-;14103:3;14124:67;14188:2;14183:3;14124:67;:::i;:::-;14117:74;;14200:93;14289:3;14200:93;:::i;:::-;14318:2;14313:3;14309:12;14302:19;;13961:366;;;:::o;14333:419::-;14499:4;14537:2;14526:9;14522:18;14514:26;;14586:9;14580:4;14576:20;14572:1;14561:9;14557:17;14550:47;14614:131;14740:4;14614:131;:::i;:::-;14606:139;;14333:419;;;:::o;14758:147::-;14859:11;14896:3;14881:18;;14758:147;;;;:::o;14911:114::-;;:::o;15031:398::-;15190:3;15211:83;15292:1;15287:3;15211:83;:::i;:::-;15204:90;;15303:93;15392:3;15303:93;:::i;:::-;15421:1;15416:3;15412:11;15405:18;;15031:398;;;:::o;15435:379::-;15619:3;15641:147;15784:3;15641:147;:::i;:::-;15634:154;;15805:3;15798:10;;15435:379;;;:::o;15820:177::-;15960:29;15956:1;15948:6;15944:14;15937:53;15820:177;:::o;16003:366::-;16145:3;16166:67;16230:2;16225:3;16166:67;:::i;:::-;16159:74;;16242:93;16331:3;16242:93;:::i;:::-;16360:2;16355:3;16351:12;16344:19;;16003:366;;;:::o;16375:419::-;16541:4;16579:2;16568:9;16564:18;16556:26;;16628:9;16622:4;16618:20;16614:1;16603:9;16599:17;16592:47;16656:131;16782:4;16656:131;:::i;:::-;16648:139;;16375:419;;;:::o;16800:244::-;16940:34;16936:1;16928:6;16924:14;16917:58;17009:27;17004:2;16996:6;16992:15;16985:52;16800:244;:::o;17050:366::-;17192:3;17213:67;17277:2;17272:3;17213:67;:::i;:::-;17206:74;;17289:93;17378:3;17289:93;:::i;:::-;17407:2;17402:3;17398:12;17391:19;;17050:366;;;:::o;17422:419::-;17588:4;17626:2;17615:9;17611:18;17603:26;;17675:9;17669:4;17665:20;17661:1;17650:9;17646:17;17639:47;17703:131;17829:4;17703:131;:::i;:::-;17695:139;;17422:419;;;:::o;17847:223::-;17987:34;17983:1;17975:6;17971:14;17964:58;18056:6;18051:2;18043:6;18039:15;18032:31;17847:223;:::o;18076:366::-;18218:3;18239:67;18303:2;18298:3;18239:67;:::i;:::-;18232:74;;18315:93;18404:3;18315:93;:::i;:::-;18433:2;18428:3;18424:12;18417:19;;18076:366;;;:::o;18448:419::-;18614:4;18652:2;18641:9;18637:18;18629:26;;18701:9;18695:4;18691:20;18687:1;18676:9;18672:17;18665:47;18729:131;18855:4;18729:131;:::i;:::-;18721:139;;18448:419;;;:::o;18873:223::-;19013:34;19009:1;19001:6;18997:14;18990:58;19082:6;19077:2;19069:6;19065:15;19058:31;18873:223;:::o;19102:366::-;19244:3;19265:67;19329:2;19324:3;19265:67;:::i;:::-;19258:74;;19341:93;19430:3;19341:93;:::i;:::-;19459:2;19454:3;19450:12;19443:19;;19102:366;;;:::o;19474:419::-;19640:4;19678:2;19667:9;19663:18;19655:26;;19727:9;19721:4;19717:20;19713:1;19702:9;19698:17;19691:47;19755:131;19881:4;19755:131;:::i;:::-;19747:139;;19474:419;;;:::o;19899:221::-;20039:34;20035:1;20027:6;20023:14;20016:58;20108:4;20103:2;20095:6;20091:15;20084:29;19899:221;:::o;20126:366::-;20268:3;20289:67;20353:2;20348:3;20289:67;:::i;:::-;20282:74;;20365:93;20454:3;20365:93;:::i;:::-;20483:2;20478:3;20474:12;20467:19;;20126:366;;;:::o;20498:419::-;20664:4;20702:2;20691:9;20687:18;20679:26;;20751:9;20745:4;20741:20;20737:1;20726:9;20722:17;20715:47;20779:131;20905:4;20779:131;:::i;:::-;20771:139;;20498:419;;;:::o;20923:224::-;21063:34;21059:1;21051:6;21047:14;21040:58;21132:7;21127:2;21119:6;21115:15;21108:32;20923:224;:::o;21153:366::-;21295:3;21316:67;21380:2;21375:3;21316:67;:::i;:::-;21309:74;;21392:93;21481:3;21392:93;:::i;:::-;21510:2;21505:3;21501:12;21494:19;;21153:366;;;:::o;21525:419::-;21691:4;21729:2;21718:9;21714:18;21706:26;;21778:9;21772:4;21768:20;21764:1;21753:9;21749:17;21742:47;21806:131;21932:4;21806:131;:::i;:::-;21798:139;;21525:419;;;:::o;21950:222::-;22090:34;22086:1;22078:6;22074:14;22067:58;22159:5;22154:2;22146:6;22142:15;22135:30;21950:222;:::o;22178:366::-;22320:3;22341:67;22405:2;22400:3;22341:67;:::i;:::-;22334:74;;22417:93;22506:3;22417:93;:::i;:::-;22535:2;22530:3;22526:12;22519:19;;22178:366;;;:::o;22550:419::-;22716:4;22754:2;22743:9;22739:18;22731:26;;22803:9;22797:4;22793:20;22789:1;22778:9;22774:17;22767:47;22831:131;22957:4;22831:131;:::i;:::-;22823:139;;22550:419;;;:::o;22975:240::-;23115:34;23111:1;23103:6;23099:14;23092:58;23184:23;23179:2;23171:6;23167:15;23160:48;22975:240;:::o;23221:366::-;23363:3;23384:67;23448:2;23443:3;23384:67;:::i;:::-;23377:74;;23460:93;23549:3;23460:93;:::i;:::-;23578:2;23573:3;23569:12;23562:19;;23221:366;;;:::o;23593:419::-;23759:4;23797:2;23786:9;23782:18;23774:26;;23846:9;23840:4;23836:20;23832:1;23821:9;23817:17;23810:47;23874:131;24000:4;23874:131;:::i;:::-;23866:139;;23593:419;;;:::o;24018:169::-;24158:21;24154:1;24146:6;24142:14;24135:45;24018:169;:::o;24193:366::-;24335:3;24356:67;24420:2;24415:3;24356:67;:::i;:::-;24349:74;;24432:93;24521:3;24432:93;:::i;:::-;24550:2;24545:3;24541:12;24534:19;;24193:366;;;:::o;24565:419::-;24731:4;24769:2;24758:9;24754:18;24746:26;;24818:9;24812:4;24808:20;24804:1;24793:9;24789:17;24782:47;24846:131;24972:4;24846:131;:::i;:::-;24838:139;;24565:419;;;:::o;24990:241::-;25130:34;25126:1;25118:6;25114:14;25107:58;25199:24;25194:2;25186:6;25182:15;25175:49;24990:241;:::o;25237:366::-;25379:3;25400:67;25464:2;25459:3;25400:67;:::i;:::-;25393:74;;25476:93;25565:3;25476:93;:::i;:::-;25594:2;25589:3;25585:12;25578:19;;25237:366;;;:::o;25609:419::-;25775:4;25813:2;25802:9;25798:18;25790:26;;25862:9;25856:4;25852:20;25848:1;25837:9;25833:17;25826:47;25890:131;26016:4;25890:131;:::i;:::-;25882:139;;25609:419;;;:::o;26034:410::-;26074:7;26097:20;26115:1;26097:20;:::i;:::-;26092:25;;26131:20;26149:1;26131:20;:::i;:::-;26126:25;;26186:1;26183;26179:9;26208:30;26226:11;26208:30;:::i;:::-;26197:41;;26387:1;26378:7;26374:15;26371:1;26368:22;26348:1;26341:9;26321:83;26298:139;;26417:18;;:::i;:::-;26298:139;26082:362;26034:410;;;;:::o;26450:180::-;26498:77;26495:1;26488:88;26595:4;26592:1;26585:15;26619:4;26616:1;26609:15;26636:185;26676:1;26693:20;26711:1;26693:20;:::i;:::-;26688:25;;26727:20;26745:1;26727:20;:::i;:::-;26722:25;;26766:1;26756:35;;26771:18;;:::i;:::-;26756:35;26813:1;26810;26806:9;26801:14;;26636:185;;;;:::o;26827:194::-;26867:4;26887:20;26905:1;26887:20;:::i;:::-;26882:25;;26921:20;26939:1;26921:20;:::i;:::-;26916:25;;26965:1;26962;26958:9;26950:17;;26989:1;26983:4;26980:11;26977:37;;;26994:18;;:::i;:::-;26977:37;26827:194;;;;:::o;27027:177::-;27167:29;27163:1;27155:6;27151:14;27144:53;27027:177;:::o;27210:366::-;27352:3;27373:67;27437:2;27432:3;27373:67;:::i;:::-;27366:74;;27449:93;27538:3;27449:93;:::i;:::-;27567:2;27562:3;27558:12;27551:19;;27210:366;;;:::o;27582:419::-;27748:4;27786:2;27775:9;27771:18;27763:26;;27835:9;27829:4;27825:20;27821:1;27810:9;27806:17;27799:47;27863:131;27989:4;27863:131;:::i;:::-;27855:139;;27582:419;;;:::o;28007:442::-;28156:4;28194:2;28183:9;28179:18;28171:26;;28207:71;28275:1;28264:9;28260:17;28251:6;28207:71;:::i;:::-;28288:72;28356:2;28345:9;28341:18;28332:6;28288:72;:::i;:::-;28370;28438:2;28427:9;28423:18;28414:6;28370:72;:::i;:::-;28007:442;;;;;;:::o;28455:220::-;28595:34;28591:1;28583:6;28579:14;28572:58;28664:3;28659:2;28651:6;28647:15;28640:28;28455:220;:::o;28681:366::-;28823:3;28844:67;28908:2;28903:3;28844:67;:::i;:::-;28837:74;;28920:93;29009:3;28920:93;:::i;:::-;29038:2;29033:3;29029:12;29022:19;;28681:366;;;:::o;29053:419::-;29219:4;29257:2;29246:9;29242:18;29234:26;;29306:9;29300:4;29296:20;29292:1;29281:9;29277:17;29270:47;29334:131;29460:4;29334:131;:::i;:::-;29326:139;;29053:419;;;:::o;29478:180::-;29526:77;29523:1;29516:88;29623:4;29620:1;29613:15;29647:4;29644:1;29637:15;29664:180;29712:77;29709:1;29702:88;29809:4;29806:1;29799:15;29833:4;29830:1;29823:15;29850:143;29907:5;29938:6;29932:13;29923:22;;29954:33;29981:5;29954:33;:::i;:::-;29850:143;;;;:::o;29999:351::-;30069:6;30118:2;30106:9;30097:7;30093:23;30089:32;30086:119;;;30124:79;;:::i;:::-;30086:119;30244:1;30269:64;30325:7;30316:6;30305:9;30301:22;30269:64;:::i;:::-;30259:74;;30215:128;29999:351;;;;:::o;30356:114::-;30423:6;30457:5;30451:12;30441:22;;30356:114;;;:::o;30476:184::-;30575:11;30609:6;30604:3;30597:19;30649:4;30644:3;30640:14;30625:29;;30476:184;;;;:::o;30666:132::-;30733:4;30756:3;30748:11;;30786:4;30781:3;30777:14;30769:22;;30666:132;;;:::o;30804:108::-;30881:24;30899:5;30881:24;:::i;:::-;30876:3;30869:37;30804:108;;:::o;30918:179::-;30987:10;31008:46;31050:3;31042:6;31008:46;:::i;:::-;31086:4;31081:3;31077:14;31063:28;;30918:179;;;;:::o;31103:113::-;31173:4;31205;31200:3;31196:14;31188:22;;31103:113;;;:::o;31252:732::-;31371:3;31400:54;31448:5;31400:54;:::i;:::-;31470:86;31549:6;31544:3;31470:86;:::i;:::-;31463:93;;31580:56;31630:5;31580:56;:::i;:::-;31659:7;31690:1;31675:284;31700:6;31697:1;31694:13;31675:284;;;31776:6;31770:13;31803:63;31862:3;31847:13;31803:63;:::i;:::-;31796:70;;31889:60;31942:6;31889:60;:::i;:::-;31879:70;;31735:224;31722:1;31719;31715:9;31710:14;;31675:284;;;31679:14;31975:3;31968:10;;31376:608;;;31252:732;;;;:::o;31990:831::-;32253:4;32291:3;32280:9;32276:19;32268:27;;32305:71;32373:1;32362:9;32358:17;32349:6;32305:71;:::i;:::-;32386:80;32462:2;32451:9;32447:18;32438:6;32386:80;:::i;:::-;32513:9;32507:4;32503:20;32498:2;32487:9;32483:18;32476:48;32541:108;32644:4;32635:6;32541:108;:::i;:::-;32533:116;;32659:72;32727:2;32716:9;32712:18;32703:6;32659:72;:::i;:::-;32741:73;32809:3;32798:9;32794:19;32785:6;32741:73;:::i;:::-;31990:831;;;;;;;;:::o

Swarm Source

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