ETH Price: $2,631.12 (+1.15%)

Token

Yoda Pepe (YEPE)
 

Overview

Max Total Supply

1,000,000,000 YEPE

Holders

95

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: YEPE 4
Balance
843,911,298.930690848673744349 YEPE

Value
$0.00
0x18d23225349ffe8a231607b17f66092e513c84b8
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:
YodaPepe

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*

https://t.me/YodaPepe
https://twitter.com/YodaPepe_ERC20
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.21;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    
}
 
library SafeMath {

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }

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

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

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

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

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

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

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

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

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


 
contract YodaPepe is ERC20, Ownable {

    string _name = unicode"Yoda Pepe";
    string _symbol = unicode"YEPE";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;


    mapping(address => bool) public isBlacklisted;

    event Blacklisted(address indexed account);
    event Unblacklisted(address indexed account);
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    uint256 public maxTransaction;
    uint256 public contractSellTreshold;
    uint256 public maxWalletHolding;
 
    bool public areLimitsOn = true;
    bool public emptyContractFull = false;

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


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
       
 
        uint256 _devBuyTax = 22;
        uint256 _liqBuyTax = 0;
 
        uint256 _devSellTax = 30;
        uint256 _liqSellTax = 0;
        
        uint256 totalSupply = 1000000000 * 1e18;
 
        maxTransaction = totalSupply * 10 / 1000; // 2%
        maxWalletHolding = totalSupply * 10 / 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
        */

       
     
        
        
        
        uint256 contractAmount = totalSupply * 96 / 100; // 94%
        uint256 senderAmount = totalSupply * 4 / 100; // 6%

        _mint(address(this), contractAmount);
        _mint(msg.sender, senderAmount);

    }
 
    receive() external payable {
 
    }
 

    function openTrading() external onlyOwner{



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

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

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

    
  


    

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

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

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

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

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlacklisted[msg.sender], "Sender is blacklisted");
        
         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 / 3;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Blacklisted","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":"account","type":"address"}],"name":"Unblacklisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableEmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"}],"name":"editFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600981526020017f596f646120506570650000000000000000000000000000000000000000000000815250600690816200004a919062000c23565b506040518060400160405280600481526020017f59455045000000000000000000000000000000000000000000000000000000008152506007908162000091919062000c23565b50600160115f6101000a81548160ff0219169083151502179055505f601160016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e29062000a23565b80601f0160208091040260200160405190810160405280929190818152602001828054620001109062000a23565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b505050505060078054620001739062000a23565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a19062000a23565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000c23565b50806004908162000218919062000c23565b5050505f6200022c6200054a60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f601690505f80601e90505f806b033b2e3c9fd0803ce800000090506103e8600a82620002f7919062000d34565b62000303919062000dab565b600e819055506103e8600a826200031b919062000d34565b62000327919062000dab565b6010819055506103e86001826200033f919062000d34565b6200034b919062000dab565b600f81905550846013819055508360148190555060145460135462000371919062000de2565b601281905550826016819055508160178190555060175460165462000397919062000de2565b60158190555033600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ff620003f16200055160201b60201c565b60016200057960201b60201c565b620004123060016200057960201b60201c565b6200042761dead60016200057960201b60201c565b6200045b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200057960201b60201c565b6200047d6200046f6200055160201b60201c565b6001620006c260201b60201c565b62000490306001620006c260201b60201c565b620004a561dead6001620006c260201b60201c565b620004d9600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006c260201b60201c565b5f6064606083620004eb919062000d34565b620004f7919062000dab565b90505f60646004846200050b919062000d34565b62000517919062000dab565b90506200052b3083620007bb60201b60201c565b6200053d3382620007bb60201b60201c565b5050505050505062000fd9565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005896200054a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200061a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006119062000e7a565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006b6919062000eb6565b60405180910390a25050565b620006d26200054a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000763576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075a9062000e7a565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200082c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008239062000f1f565b60405180910390fd5b6200083f5f83836200095860201b60201c565b62000856816002546200095d60201b90919060201c565b600281905550620008ad815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200095d60201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200094c919062000f50565b60405180910390a35050565b505050565b5f8082846200096d919062000de2565b905083811015620009b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009ac9062000fb9565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a3b57607f821691505b60208210810362000a515762000a50620009f6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ab57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a78565b62000ac1868362000a78565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b0b62000b0562000aff8462000ad9565b62000ae2565b62000ad9565b9050919050565b5f819050919050565b62000b268362000aeb565b62000b3e62000b358262000b12565b84845462000a84565b825550505050565b5f90565b62000b5462000b46565b62000b6181848462000b1b565b505050565b5b8181101562000b885762000b7c5f8262000b4a565b60018101905062000b67565b5050565b601f82111562000bd75762000ba18162000a57565b62000bac8462000a69565b8101602085101562000bbc578190505b62000bd462000bcb8562000a69565b83018262000b66565b50505b505050565b5f82821c905092915050565b5f62000bf95f198460080262000bdc565b1980831691505092915050565b5f62000c13838362000be8565b9150826002028217905092915050565b62000c2e82620009bf565b67ffffffffffffffff81111562000c4a5762000c49620009c9565b5b62000c56825462000a23565b62000c6382828562000b8c565b5f60209050601f83116001811462000c99575f841562000c84578287015190505b62000c90858262000c06565b86555062000cff565b601f19841662000ca98662000a57565b5f5b8281101562000cd25784890151825560018201915060208501945060208101905062000cab565b8683101562000cf2578489015162000cee601f89168262000be8565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000d408262000ad9565b915062000d4d8362000ad9565b925082820262000d5d8162000ad9565b9150828204841483151762000d775762000d7662000d07565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000db78262000ad9565b915062000dc48362000ad9565b92508262000dd75762000dd662000d7e565b5b828204905092915050565b5f62000dee8262000ad9565b915062000dfb8362000ad9565b925082820190508082111562000e165762000e1562000d07565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e6260208362000e1c565b915062000e6f8262000e2c565b602082019050919050565b5f6020820190508181035f83015262000e938162000e54565b9050919050565b5f8115159050919050565b62000eb08162000e9a565b82525050565b5f60208201905062000ecb5f83018462000ea5565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000f07601f8362000e1c565b915062000f148262000ed1565b602082019050919050565b5f6020820190508181035f83015262000f388162000ef9565b9050919050565b62000f4a8162000ad9565b82525050565b5f60208201905062000f655f83018462000f3f565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000fa1601b8362000e1c565b915062000fae8262000f6b565b602082019050919050565b5f6020820190508181035f83015262000fd28162000f93565b9050919050565b6147c58062000fe75f395ff3fe60806040526004361061026a575f3560e01c8063715018a611610143578063a9059cbb116100b5578063c3f70b5211610079578063c3f70b52146108f7578063c9567bf914610921578063dd62ed3e14610937578063df6f93be14610973578063f2fde38b1461099d578063fe575a87146109c557610271565b8063a9059cbb14610803578063b62496f51461083f578063b69ef8a81461087b578063be857504146108a5578063c0246668146108cf57610271565b8063945674fe11610107578063945674fe1461070b57806395d89b41146107355780639a7a23d61461075f5780639ee2e924146107875780639fccce321461079d578063a457c2d7146107c757610271565b8063715018a614610665578063751039fc1461067b5780637571336a14610691578063863cf2cc146106b95780638da5cb5b146106e157610271565b806322eb6631116101dc57806348d79155116101a057806348d791551461054557806349bd5a5e1461056f5780634fbee193146105995780635de0f2a0146105d55780636c7e15c9146105ff57806370a082311461062957610271565b806322eb66311461044f57806323b872dd14610479578063313ce567146104b557806339509351146104df57806346469afb1461051b57610271565b80631694505e1161022e5780631694505e1461035757806318160ddd146103815780631816467f146103ab5780631a8145bb146103d35780631bff7898146103fd5780631d9305bf1461042757610271565b806306fdde0314610275578063095ea7b31461029f5780630e947809146102db5780630f299cf11461030557806310d5de531461031b57610271565b3661027157005b5f80fd5b348015610280575f80fd5b50610289610a01565b60405161029691906136ef565b60405180910390f35b3480156102aa575f80fd5b506102c560048036038101906102c091906137a0565b610a91565b6040516102d291906137f8565b60405180910390f35b3480156102e6575f80fd5b506102ef610aae565b6040516102fc91906137f8565b60405180910390f35b348015610310575f80fd5b50610319610ac0565b005b348015610326575f80fd5b50610341600480360381019061033c9190613811565b610c69565b60405161034e91906137f8565b60405180910390f35b348015610362575f80fd5b5061036b610c86565b6040516103789190613897565b60405180910390f35b34801561038c575f80fd5b50610395610cab565b6040516103a291906138bf565b60405180910390f35b3480156103b6575f80fd5b506103d160048036038101906103cc9190613811565b610cb4565b005b3480156103de575f80fd5b506103e7610e08565b6040516103f491906138bf565b60405180910390f35b348015610408575f80fd5b50610411610e0e565b60405161041e91906138bf565b60405180910390f35b348015610432575f80fd5b5061044d600480360381019061044891906138d8565b610e14565b005b34801561045a575f80fd5b50610463610ef8565b60405161047091906138bf565b60405180910390f35b348015610484575f80fd5b5061049f600480360381019061049a919061393c565b610efe565b6040516104ac91906137f8565b60405180910390f35b3480156104c0575f80fd5b506104c9610fd2565b6040516104d691906139a7565b60405180910390f35b3480156104ea575f80fd5b50610505600480360381019061050091906137a0565b610fda565b60405161051291906137f8565b60405180910390f35b348015610526575f80fd5b5061052f611088565b60405161053c91906138bf565b60405180910390f35b348015610550575f80fd5b5061055961108e565b60405161056691906138bf565b60405180910390f35b34801561057a575f80fd5b50610583611094565b60405161059091906139cf565b60405180910390f35b3480156105a4575f80fd5b506105bf60048036038101906105ba9190613811565b6110b9565b6040516105cc91906137f8565b60405180910390f35b3480156105e0575f80fd5b506105e961110b565b6040516105f691906138bf565b60405180910390f35b34801561060a575f80fd5b50610613611111565b60405161062091906138bf565b60405180910390f35b348015610634575f80fd5b5061064f600480360381019061064a9190613811565b611117565b60405161065c91906138bf565b60405180910390f35b348015610670575f80fd5b5061067961115c565b005b348015610686575f80fd5b5061068f6112af565b005b34801561069c575f80fd5b506106b760048036038101906106b29190613a12565b611360565b005b3480156106c4575f80fd5b506106df60048036038101906106da9190613a50565b61144e565b005b3480156106ec575f80fd5b506106f5611501565b60405161070291906139cf565b60405180910390f35b348015610716575f80fd5b5061071f611529565b60405161072c91906137f8565b60405180910390f35b348015610740575f80fd5b5061074961153c565b60405161075691906136ef565b60405180910390f35b34801561076a575f80fd5b5061078560048036038101906107809190613a12565b6115cc565b005b348015610792575f80fd5b5061079b6116ff565b005b3480156107a8575f80fd5b506107b1611812565b6040516107be91906138bf565b60405180910390f35b3480156107d2575f80fd5b506107ed60048036038101906107e891906137a0565b611818565b6040516107fa91906137f8565b60405180910390f35b34801561080e575f80fd5b50610829600480360381019061082491906137a0565b6118e0565b60405161083691906137f8565b60405180910390f35b34801561084a575f80fd5b5061086560048036038101906108609190613811565b6118fd565b60405161087291906137f8565b60405180910390f35b348015610886575f80fd5b5061088f61191a565b60405161089c91906138bf565b60405180910390f35b3480156108b0575f80fd5b506108b9611920565b6040516108c691906138bf565b60405180910390f35b3480156108da575f80fd5b506108f560048036038101906108f09190613a12565b611926565b005b348015610902575f80fd5b5061090b611a62565b60405161091891906138bf565b60405180910390f35b34801561092c575f80fd5b50610935611a68565b005b348015610942575f80fd5b5061095d60048036038101906109589190613a7b565b611e6e565b60405161096a91906138bf565b60405180910390f35b34801561097e575f80fd5b50610987611ef0565b60405161099491906138bf565b60405180910390f35b3480156109a8575f80fd5b506109c360048036038101906109be9190613811565b611ef6565b005b3480156109d0575f80fd5b506109eb60048036038101906109e69190613811565b61204a565b6040516109f891906137f8565b60405180910390f35b606060038054610a1090613ae6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c90613ae6565b8015610a875780601f10610a5e57610100808354040283529160200191610a87565b820191905f5260205f20905b815481529060010190602001808311610a6a57829003601f168201915b5050505050905090565b5f610aa4610a9d612067565b848461206e565b6001905092915050565b60115f9054906101000a900460ff1681565b610ac8612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613b60565b60405180910390fd5b5f4790505f8111610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613bee565b60405180910390fd5b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610be290613c39565b5f6040518083038185875af1925050503d805f8114610c1c576040519150601f19603f3d011682016040523d82523d5f602084013e610c21565b606091505b5050905080610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c90613c97565b60405180910390fd5b5050565b601c602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610cbc612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4190613b60565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60155481565b610e1c612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613b60565b60405180910390fd5b8360138190555081601481905550601454601354610ec89190613ce2565b6012819055508260168190555080601781905550601754601654610eec9190613ce2565b60158190555050505050565b60165481565b5f610f0a848484612231565b610fc784610f16612067565b610fc2856040518060600160405280602881526020016147436028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f79612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bdb9092919063ffffffff16565b61206e565b600190509392505050565b5f6012905090565b5f61107e610fe6612067565b846110798560015f610ff6612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c3d90919063ffffffff16565b61206e565b6001905092915050565b60125481565b60105481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611164612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e990613b60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112b7612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c90613b60565b60405180910390fd5b5f60115f6101000a81548160ff021916908315150217905550565b611368612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ed90613b60565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611456612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90613b60565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160019054906101000a900460ff1681565b60606004805461154b90613ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461157790613ae6565b80156115c25780601f10611599576101008083540402835291602001916115c2565b820191905f5260205f20905b8154815290600101906020018083116115a557829003601f168201915b5050505050905090565b6115d4612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613b60565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890613d85565b60405180910390fd5b6116fb8282612c9a565b5050565b611707612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c90613b60565b60405180910390fd5b5f61179f30611117565b90505f81116117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90613e13565b60405180910390fd5b61180f30600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612231565b50565b60195481565b5f6118d6611824612067565b846118d18560405180606001604052806025815260200161476b6025913960015f61184d612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bdb9092919063ffffffff16565b61206e565b6001905092915050565b5f6118f36118ec612067565b8484612231565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b60175481565b61192e612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390613b60565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a5691906137f8565b60405180910390a25050565b600e5481565b611a70612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613b60565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050611b21816001611360565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611baa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bce9190613e45565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c579190613e45565b6040518363ffffffff1660e01b8152600401611c74929190613e70565b6020604051808303815f875af1158015611c90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb49190613e45565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d1f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611360565b611d4b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c9a565b5f4790505f60646057611d5d30611117565b611d679190613e97565b611d719190613f05565b9050611d9f3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361206e565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611e2596959493929190613f6e565b60606040518083038185885af1158015611e41573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e669190613fe1565b505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60145481565b611efe612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8390613b60565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d3906140a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361214a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121419061412f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161222491906138bf565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361229f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612296906141bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361230d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123049061424b565b60405180910390fd5b600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e906142b3565b60405180910390fd5b5f81036123ae576123a983835f612d38565b612bd6565b60115f9054906101000a900460ff16156127a2576123ca611501565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124385750612408611501565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561247057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124aa575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124c25750600b5f9054906101000a900460ff16155b156127a157601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125645750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561260b57600e548111156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590614341565b60405180910390fd5b6010546125ba83611117565b826125c59190613ce2565b1115612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd906143a9565b60405180910390fd5b6127a0565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126a85750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126f757600e548111156126f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e990614437565b60405180910390fd5b61279f565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661279e5760105461275183611117565b8261275c9190613ce2565b111561279d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612794906143a9565b60405180910390fd5b5b5b5b5b5b5f6127ac30611117565b90505f600f5482101590508080156127d05750600b5f9054906101000a900460ff16155b80156128235750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128765750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128c95750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561290a576001600b5f6101000a81548160ff0219169083151502179055506128f0612fc1565b5f600b5f6101000a81548160ff0219169083151502179055505b5f600b5f9054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129b85750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156129c1575f90505b5f8115612bc657601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a1f57505f601554115b15612ab757612a4c6064612a3e601554886131e790919063ffffffff16565b61325e90919063ffffffff16565b905060155460175482612a5f9190613e97565b612a699190613f05565b60185f828254612a799190613ce2565b9250508190555060155460165482612a919190613e97565b612a9b9190613f05565b60195f828254612aab9190613ce2565b92505081905550612ba3565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b0e57505f601254115b15612ba257612b3b6064612b2d601254886131e790919063ffffffff16565b61325e90919063ffffffff16565b905060125460145482612b4e9190613e97565b612b589190613f05565b60185f828254612b689190613ce2565b9250508190555060125460135482612b809190613e97565b612b8a9190613f05565b60195f828254612b9a9190613ce2565b925050819055505b5b5f811115612bb757612bb6873083612d38565b5b8085612bc39190614455565b94505b612bd1878787612d38565b505050505b505050565b5f838311158290612c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1991906136ef565b60405180910390fd5b505f8385612c309190614455565b9050809150509392505050565b5f808284612c4b9190613ce2565b905083811015612c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c87906144d2565b60405180910390fd5b8091505092915050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9d906141bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0b9061424b565b60405180910390fd5b612e1f8383836132a7565b612e888160405180606001604052806026815260200161471d602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bdb9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612f17815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c3d90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fb491906138bf565b60405180910390a3505050565b5f612fcb30611117565b90505f601954601854612fde9190613ce2565b90505f80831480612fee57505f82145b15612ffb575050506131e5565b5f1515601160019054906101000a900460ff16151503613042576014600f546130249190613e97565b83111561303d576014600f5461303a9190613e97565b92505b61304e565b61304b30611117565b92505b5f600383601854866130609190613e97565b61306a9190613f05565b6130749190613f05565b90505f61308a82866132ac90919063ffffffff16565b90505f479050613099826132f5565b5f6130ad82476132ac90919063ffffffff16565b90505f6130d7876130c9601954856131e790919063ffffffff16565b61325e90919063ffffffff16565b90505f81836130e69190614455565b90505f6018819055505f6019819055505f8611801561310457505f81115b1561315157613113868261352b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601854604051613148939291906144f0565b60405180910390a15b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161319690613c39565b5f6040518083038185875af1925050503d805f81146131d0576040519150601f19603f3d011682016040523d82523d5f602084013e6131d5565b606091505b5050809750505050505050505050505b565b5f8083036131f7575f9050613258565b5f82846132049190613e97565b90508284826132139190613f05565b14613253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324a90614595565b60405180910390fd5b809150505b92915050565b5f61329f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613604565b905092915050565b505050565b5f6132ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612bdb565b905092915050565b5f600267ffffffffffffffff811115613311576133106145b3565b5b60405190808252806020026020018201604052801561333f5781602001602082028036833780820191505090505b50905030815f81518110613356576133556145e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341e9190613e45565b81600181518110613432576134316145e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134983060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461206e565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016134fa9594939291906146c4565b5f604051808303815f87803b158015613511575f80fd5b505af1158015613523573d5f803e3d5ffd5b505050505050565b6135573060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461206e565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016135bc96959493929190613f6e565b60606040518083038185885af11580156135d8573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135fd9190613fe1565b5050505050565b5f808311829061364a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364191906136ef565b60405180910390fd5b505f83856136589190613f05565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561369c578082015181840152602081019050613681565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6136c182613665565b6136cb818561366f565b93506136db81856020860161367f565b6136e4816136a7565b840191505092915050565b5f6020820190508181035f83015261370781846136b7565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61373c82613713565b9050919050565b61374c81613732565b8114613756575f80fd5b50565b5f8135905061376781613743565b92915050565b5f819050919050565b61377f8161376d565b8114613789575f80fd5b50565b5f8135905061379a81613776565b92915050565b5f80604083850312156137b6576137b561370f565b5b5f6137c385828601613759565b92505060206137d48582860161378c565b9150509250929050565b5f8115159050919050565b6137f2816137de565b82525050565b5f60208201905061380b5f8301846137e9565b92915050565b5f602082840312156138265761382561370f565b5b5f61383384828501613759565b91505092915050565b5f819050919050565b5f61385f61385a61385584613713565b61383c565b613713565b9050919050565b5f61387082613845565b9050919050565b5f61388182613866565b9050919050565b61389181613877565b82525050565b5f6020820190506138aa5f830184613888565b92915050565b6138b98161376d565b82525050565b5f6020820190506138d25f8301846138b0565b92915050565b5f805f80608085870312156138f0576138ef61370f565b5b5f6138fd8782880161378c565b945050602061390e8782880161378c565b935050604061391f8782880161378c565b92505060606139308782880161378c565b91505092959194509250565b5f805f606084860312156139535761395261370f565b5b5f61396086828701613759565b935050602061397186828701613759565b92505060406139828682870161378c565b9150509250925092565b5f60ff82169050919050565b6139a18161398c565b82525050565b5f6020820190506139ba5f830184613998565b92915050565b6139c981613732565b82525050565b5f6020820190506139e25f8301846139c0565b92915050565b6139f1816137de565b81146139fb575f80fd5b50565b5f81359050613a0c816139e8565b92915050565b5f8060408385031215613a2857613a2761370f565b5b5f613a3585828601613759565b9250506020613a46858286016139fe565b9150509250929050565b5f60208284031215613a6557613a6461370f565b5b5f613a72848285016139fe565b91505092915050565b5f8060408385031215613a9157613a9061370f565b5b5f613a9e85828601613759565b9250506020613aaf85828601613759565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613afd57607f821691505b602082108103613b1057613b0f613ab9565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613b4a60208361366f565b9150613b5582613b16565b602082019050919050565b5f6020820190508181035f830152613b7781613b3e565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613bd860228361366f565b9150613be382613b7e565b604082019050919050565b5f6020820190508181035f830152613c0581613bcc565b9050919050565b5f81905092915050565b50565b5f613c245f83613c0c565b9150613c2f82613c16565b5f82019050919050565b5f613c4382613c19565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613c81601b8361366f565b9150613c8c82613c4d565b602082019050919050565b5f6020820190508181035f830152613cae81613c75565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cec8261376d565b9150613cf78361376d565b9250828201905080821115613d0f57613d0e613cb5565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613d6f60398361366f565b9150613d7a82613d15565b604082019050919050565b5f6020820190508181035f830152613d9c81613d63565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613dfd60248361366f565b9150613e0882613da3565b604082019050919050565b5f6020820190508181035f830152613e2a81613df1565b9050919050565b5f81519050613e3f81613743565b92915050565b5f60208284031215613e5a57613e5961370f565b5b5f613e6784828501613e31565b91505092915050565b5f604082019050613e835f8301856139c0565b613e9060208301846139c0565b9392505050565b5f613ea18261376d565b9150613eac8361376d565b9250828202613eba8161376d565b91508282048414831517613ed157613ed0613cb5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f0f8261376d565b9150613f1a8361376d565b925082613f2a57613f29613ed8565b5b828204905092915050565b5f819050919050565b5f613f58613f53613f4e84613f35565b61383c565b61376d565b9050919050565b613f6881613f3e565b82525050565b5f60c082019050613f815f8301896139c0565b613f8e60208301886138b0565b613f9b6040830187613f5f565b613fa86060830186613f5f565b613fb560808301856139c0565b613fc260a08301846138b0565b979650505050505050565b5f81519050613fdb81613776565b92915050565b5f805f60608486031215613ff857613ff761370f565b5b5f61400586828701613fcd565b935050602061401686828701613fcd565b925050604061402786828701613fcd565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61408b60248361366f565b915061409682614031565b604082019050919050565b5f6020820190508181035f8301526140b88161407f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61411960228361366f565b9150614124826140bf565b604082019050919050565b5f6020820190508181035f8301526141468161410d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141a760258361366f565b91506141b28261414d565b604082019050919050565b5f6020820190508181035f8301526141d48161419b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61423560238361366f565b9150614240826141db565b604082019050919050565b5f6020820190508181035f83015261426281614229565b9050919050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f61429d60158361366f565b91506142a882614269565b602082019050919050565b5f6020820190508181035f8301526142ca81614291565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61432b60358361366f565b9150614336826142d1565b604082019050919050565b5f6020820190508181035f8301526143588161431f565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61439360138361366f565b915061439e8261435f565b602082019050919050565b5f6020820190508181035f8301526143c081614387565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61442160368361366f565b915061442c826143c7565b604082019050919050565b5f6020820190508181035f83015261444e81614415565b9050919050565b5f61445f8261376d565b915061446a8361376d565b925082820390508181111561448257614481613cb5565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6144bc601b8361366f565b91506144c782614488565b602082019050919050565b5f6020820190508181035f8301526144e9816144b0565b9050919050565b5f6060820190506145035f8301866138b0565b61451060208301856138b0565b61451d60408301846138b0565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61457f60218361366f565b915061458a82614525565b604082019050919050565b5f6020820190508181035f8301526145ac81614573565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61463f81613732565b82525050565b5f6146508383614636565b60208301905092915050565b5f602082019050919050565b5f6146728261460d565b61467c8185614617565b935061468783614627565b805f5b838110156146b757815161469e8882614645565b97506146a98361465c565b92505060018101905061468a565b5085935050505092915050565b5f60a0820190506146d75f8301886138b0565b6146e46020830187613f5f565b81810360408301526146f68186614668565b905061470560608301856139c0565b61471260808301846138b0565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204e16fae2e363142e1315c9ba8360cc594327a2f4cc61bd6f97ed72a60d2e14dc64736f6c63430008150033

Deployed Bytecode

0x60806040526004361061026a575f3560e01c8063715018a611610143578063a9059cbb116100b5578063c3f70b5211610079578063c3f70b52146108f7578063c9567bf914610921578063dd62ed3e14610937578063df6f93be14610973578063f2fde38b1461099d578063fe575a87146109c557610271565b8063a9059cbb14610803578063b62496f51461083f578063b69ef8a81461087b578063be857504146108a5578063c0246668146108cf57610271565b8063945674fe11610107578063945674fe1461070b57806395d89b41146107355780639a7a23d61461075f5780639ee2e924146107875780639fccce321461079d578063a457c2d7146107c757610271565b8063715018a614610665578063751039fc1461067b5780637571336a14610691578063863cf2cc146106b95780638da5cb5b146106e157610271565b806322eb6631116101dc57806348d79155116101a057806348d791551461054557806349bd5a5e1461056f5780634fbee193146105995780635de0f2a0146105d55780636c7e15c9146105ff57806370a082311461062957610271565b806322eb66311461044f57806323b872dd14610479578063313ce567146104b557806339509351146104df57806346469afb1461051b57610271565b80631694505e1161022e5780631694505e1461035757806318160ddd146103815780631816467f146103ab5780631a8145bb146103d35780631bff7898146103fd5780631d9305bf1461042757610271565b806306fdde0314610275578063095ea7b31461029f5780630e947809146102db5780630f299cf11461030557806310d5de531461031b57610271565b3661027157005b5f80fd5b348015610280575f80fd5b50610289610a01565b60405161029691906136ef565b60405180910390f35b3480156102aa575f80fd5b506102c560048036038101906102c091906137a0565b610a91565b6040516102d291906137f8565b60405180910390f35b3480156102e6575f80fd5b506102ef610aae565b6040516102fc91906137f8565b60405180910390f35b348015610310575f80fd5b50610319610ac0565b005b348015610326575f80fd5b50610341600480360381019061033c9190613811565b610c69565b60405161034e91906137f8565b60405180910390f35b348015610362575f80fd5b5061036b610c86565b6040516103789190613897565b60405180910390f35b34801561038c575f80fd5b50610395610cab565b6040516103a291906138bf565b60405180910390f35b3480156103b6575f80fd5b506103d160048036038101906103cc9190613811565b610cb4565b005b3480156103de575f80fd5b506103e7610e08565b6040516103f491906138bf565b60405180910390f35b348015610408575f80fd5b50610411610e0e565b60405161041e91906138bf565b60405180910390f35b348015610432575f80fd5b5061044d600480360381019061044891906138d8565b610e14565b005b34801561045a575f80fd5b50610463610ef8565b60405161047091906138bf565b60405180910390f35b348015610484575f80fd5b5061049f600480360381019061049a919061393c565b610efe565b6040516104ac91906137f8565b60405180910390f35b3480156104c0575f80fd5b506104c9610fd2565b6040516104d691906139a7565b60405180910390f35b3480156104ea575f80fd5b50610505600480360381019061050091906137a0565b610fda565b60405161051291906137f8565b60405180910390f35b348015610526575f80fd5b5061052f611088565b60405161053c91906138bf565b60405180910390f35b348015610550575f80fd5b5061055961108e565b60405161056691906138bf565b60405180910390f35b34801561057a575f80fd5b50610583611094565b60405161059091906139cf565b60405180910390f35b3480156105a4575f80fd5b506105bf60048036038101906105ba9190613811565b6110b9565b6040516105cc91906137f8565b60405180910390f35b3480156105e0575f80fd5b506105e961110b565b6040516105f691906138bf565b60405180910390f35b34801561060a575f80fd5b50610613611111565b60405161062091906138bf565b60405180910390f35b348015610634575f80fd5b5061064f600480360381019061064a9190613811565b611117565b60405161065c91906138bf565b60405180910390f35b348015610670575f80fd5b5061067961115c565b005b348015610686575f80fd5b5061068f6112af565b005b34801561069c575f80fd5b506106b760048036038101906106b29190613a12565b611360565b005b3480156106c4575f80fd5b506106df60048036038101906106da9190613a50565b61144e565b005b3480156106ec575f80fd5b506106f5611501565b60405161070291906139cf565b60405180910390f35b348015610716575f80fd5b5061071f611529565b60405161072c91906137f8565b60405180910390f35b348015610740575f80fd5b5061074961153c565b60405161075691906136ef565b60405180910390f35b34801561076a575f80fd5b5061078560048036038101906107809190613a12565b6115cc565b005b348015610792575f80fd5b5061079b6116ff565b005b3480156107a8575f80fd5b506107b1611812565b6040516107be91906138bf565b60405180910390f35b3480156107d2575f80fd5b506107ed60048036038101906107e891906137a0565b611818565b6040516107fa91906137f8565b60405180910390f35b34801561080e575f80fd5b50610829600480360381019061082491906137a0565b6118e0565b60405161083691906137f8565b60405180910390f35b34801561084a575f80fd5b5061086560048036038101906108609190613811565b6118fd565b60405161087291906137f8565b60405180910390f35b348015610886575f80fd5b5061088f61191a565b60405161089c91906138bf565b60405180910390f35b3480156108b0575f80fd5b506108b9611920565b6040516108c691906138bf565b60405180910390f35b3480156108da575f80fd5b506108f560048036038101906108f09190613a12565b611926565b005b348015610902575f80fd5b5061090b611a62565b60405161091891906138bf565b60405180910390f35b34801561092c575f80fd5b50610935611a68565b005b348015610942575f80fd5b5061095d60048036038101906109589190613a7b565b611e6e565b60405161096a91906138bf565b60405180910390f35b34801561097e575f80fd5b50610987611ef0565b60405161099491906138bf565b60405180910390f35b3480156109a8575f80fd5b506109c360048036038101906109be9190613811565b611ef6565b005b3480156109d0575f80fd5b506109eb60048036038101906109e69190613811565b61204a565b6040516109f891906137f8565b60405180910390f35b606060038054610a1090613ae6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c90613ae6565b8015610a875780601f10610a5e57610100808354040283529160200191610a87565b820191905f5260205f20905b815481529060010190602001808311610a6a57829003601f168201915b5050505050905090565b5f610aa4610a9d612067565b848461206e565b6001905092915050565b60115f9054906101000a900460ff1681565b610ac8612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613b60565b60405180910390fd5b5f4790505f8111610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613bee565b60405180910390fd5b5f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610be290613c39565b5f6040518083038185875af1925050503d805f8114610c1c576040519150601f19603f3d011682016040523d82523d5f602084013e610c21565b606091505b5050905080610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c90613c97565b60405180910390fd5b5050565b601c602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610cbc612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4190613b60565b60405180910390fd5b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60155481565b610e1c612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613b60565b60405180910390fd5b8360138190555081601481905550601454601354610ec89190613ce2565b6012819055508260168190555080601781905550601754601654610eec9190613ce2565b60158190555050505050565b60165481565b5f610f0a848484612231565b610fc784610f16612067565b610fc2856040518060600160405280602881526020016147436028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f79612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bdb9092919063ffffffff16565b61206e565b600190509392505050565b5f6012905090565b5f61107e610fe6612067565b846110798560015f610ff6612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c3d90919063ffffffff16565b61206e565b6001905092915050565b60125481565b60105481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f5481565b60135481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611164612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e990613b60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112b7612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c90613b60565b60405180910390fd5b5f60115f6101000a81548160ff021916908315150217905550565b611368612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ed90613b60565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611456612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90613b60565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160019054906101000a900460ff1681565b60606004805461154b90613ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461157790613ae6565b80156115c25780601f10611599576101008083540402835291602001916115c2565b820191905f5260205f20905b8154815290600101906020018083116115a557829003601f168201915b5050505050905090565b6115d4612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613b60565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890613d85565b60405180910390fd5b6116fb8282612c9a565b5050565b611707612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c90613b60565b60405180910390fd5b5f61179f30611117565b90505f81116117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90613e13565b60405180910390fd5b61180f30600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612231565b50565b60195481565b5f6118d6611824612067565b846118d18560405180606001604052806025815260200161476b6025913960015f61184d612067565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bdb9092919063ffffffff16565b61206e565b6001905092915050565b5f6118f36118ec612067565b8484612231565b6001905092915050565b601d602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b60175481565b61192e612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390613b60565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a5691906137f8565b60405180910390a25050565b600e5481565b611a70612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613b60565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050611b21816001611360565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611baa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bce9190613e45565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c579190613e45565b6040518363ffffffff1660e01b8152600401611c74929190613e70565b6020604051808303815f875af1158015611c90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb49190613e45565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611d1f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611360565b611d4b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c9a565b5f4790505f60646057611d5d30611117565b611d679190613e97565b611d719190613f05565b9050611d9f3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361206e565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611e2596959493929190613f6e565b60606040518083038185885af1158015611e41573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e669190613fe1565b505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60145481565b611efe612067565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8390613b60565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d3906140a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361214a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121419061412f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161222491906138bf565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361229f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612296906141bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361230d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123049061424b565b60405180910390fd5b600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e906142b3565b60405180910390fd5b5f81036123ae576123a983835f612d38565b612bd6565b60115f9054906101000a900460ff16156127a2576123ca611501565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124385750612408611501565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561247057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124aa575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124c25750600b5f9054906101000a900460ff16155b156127a157601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125645750601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561260b57600e548111156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590614341565b60405180910390fd5b6010546125ba83611117565b826125c59190613ce2565b1115612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd906143a9565b60405180910390fd5b6127a0565b601d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126a85750601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156126f757600e548111156126f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e990614437565b60405180910390fd5b61279f565b601c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661279e5760105461275183611117565b8261275c9190613ce2565b111561279d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612794906143a9565b60405180910390fd5b5b5b5b5b5b5f6127ac30611117565b90505f600f5482101590508080156127d05750600b5f9054906101000a900460ff16155b80156128235750601d5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128765750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128c95750601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561290a576001600b5f6101000a81548160ff0219169083151502179055506128f0612fc1565b5f600b5f6101000a81548160ff0219169083151502179055505b5f600b5f9054906101000a900460ff16159050601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129b85750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156129c1575f90505b5f8115612bc657601d5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a1f57505f601554115b15612ab757612a4c6064612a3e601554886131e790919063ffffffff16565b61325e90919063ffffffff16565b905060155460175482612a5f9190613e97565b612a699190613f05565b60185f828254612a799190613ce2565b9250508190555060155460165482612a919190613e97565b612a9b9190613f05565b60195f828254612aab9190613ce2565b92505081905550612ba3565b601d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b0e57505f601254115b15612ba257612b3b6064612b2d601254886131e790919063ffffffff16565b61325e90919063ffffffff16565b905060125460145482612b4e9190613e97565b612b589190613f05565b60185f828254612b689190613ce2565b9250508190555060125460135482612b809190613e97565b612b8a9190613f05565b60195f828254612b9a9190613ce2565b925050819055505b5b5f811115612bb757612bb6873083612d38565b5b8085612bc39190614455565b94505b612bd1878787612d38565b505050505b505050565b5f838311158290612c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1991906136ef565b60405180910390fd5b505f8385612c309190614455565b9050809150509392505050565b5f808284612c4b9190613ce2565b905083811015612c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c87906144d2565b60405180910390fd5b8091505092915050565b80601d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9d906141bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0b9061424b565b60405180910390fd5b612e1f8383836132a7565b612e888160405180606001604052806026815260200161471d602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612bdb9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612f17815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c3d90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fb491906138bf565b60405180910390a3505050565b5f612fcb30611117565b90505f601954601854612fde9190613ce2565b90505f80831480612fee57505f82145b15612ffb575050506131e5565b5f1515601160019054906101000a900460ff16151503613042576014600f546130249190613e97565b83111561303d576014600f5461303a9190613e97565b92505b61304e565b61304b30611117565b92505b5f600383601854866130609190613e97565b61306a9190613f05565b6130749190613f05565b90505f61308a82866132ac90919063ffffffff16565b90505f479050613099826132f5565b5f6130ad82476132ac90919063ffffffff16565b90505f6130d7876130c9601954856131e790919063ffffffff16565b61325e90919063ffffffff16565b90505f81836130e69190614455565b90505f6018819055505f6019819055505f8611801561310457505f81115b1561315157613113868261352b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601854604051613148939291906144f0565b60405180910390a15b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161319690613c39565b5f6040518083038185875af1925050503d805f81146131d0576040519150601f19603f3d011682016040523d82523d5f602084013e6131d5565b606091505b5050809750505050505050505050505b565b5f8083036131f7575f9050613258565b5f82846132049190613e97565b90508284826132139190613f05565b14613253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324a90614595565b60405180910390fd5b809150505b92915050565b5f61329f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613604565b905092915050565b505050565b5f6132ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612bdb565b905092915050565b5f600267ffffffffffffffff811115613311576133106145b3565b5b60405190808252806020026020018201604052801561333f5781602001602082028036833780820191505090505b50905030815f81518110613356576133556145e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341e9190613e45565b81600181518110613432576134316145e0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134983060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461206e565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016134fa9594939291906146c4565b5f604051808303815f87803b158015613511575f80fd5b505af1158015613523573d5f803e3d5ffd5b505050505050565b6135573060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461206e565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016135bc96959493929190613f6e565b60606040518083038185885af11580156135d8573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135fd9190613fe1565b5050505050565b5f808311829061364a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364191906136ef565b60405180910390fd5b505f83856136589190613f05565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561369c578082015181840152602081019050613681565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6136c182613665565b6136cb818561366f565b93506136db81856020860161367f565b6136e4816136a7565b840191505092915050565b5f6020820190508181035f83015261370781846136b7565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61373c82613713565b9050919050565b61374c81613732565b8114613756575f80fd5b50565b5f8135905061376781613743565b92915050565b5f819050919050565b61377f8161376d565b8114613789575f80fd5b50565b5f8135905061379a81613776565b92915050565b5f80604083850312156137b6576137b561370f565b5b5f6137c385828601613759565b92505060206137d48582860161378c565b9150509250929050565b5f8115159050919050565b6137f2816137de565b82525050565b5f60208201905061380b5f8301846137e9565b92915050565b5f602082840312156138265761382561370f565b5b5f61383384828501613759565b91505092915050565b5f819050919050565b5f61385f61385a61385584613713565b61383c565b613713565b9050919050565b5f61387082613845565b9050919050565b5f61388182613866565b9050919050565b61389181613877565b82525050565b5f6020820190506138aa5f830184613888565b92915050565b6138b98161376d565b82525050565b5f6020820190506138d25f8301846138b0565b92915050565b5f805f80608085870312156138f0576138ef61370f565b5b5f6138fd8782880161378c565b945050602061390e8782880161378c565b935050604061391f8782880161378c565b92505060606139308782880161378c565b91505092959194509250565b5f805f606084860312156139535761395261370f565b5b5f61396086828701613759565b935050602061397186828701613759565b92505060406139828682870161378c565b9150509250925092565b5f60ff82169050919050565b6139a18161398c565b82525050565b5f6020820190506139ba5f830184613998565b92915050565b6139c981613732565b82525050565b5f6020820190506139e25f8301846139c0565b92915050565b6139f1816137de565b81146139fb575f80fd5b50565b5f81359050613a0c816139e8565b92915050565b5f8060408385031215613a2857613a2761370f565b5b5f613a3585828601613759565b9250506020613a46858286016139fe565b9150509250929050565b5f60208284031215613a6557613a6461370f565b5b5f613a72848285016139fe565b91505092915050565b5f8060408385031215613a9157613a9061370f565b5b5f613a9e85828601613759565b9250506020613aaf85828601613759565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613afd57607f821691505b602082108103613b1057613b0f613ab9565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613b4a60208361366f565b9150613b5582613b16565b602082019050919050565b5f6020820190508181035f830152613b7781613b3e565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613bd860228361366f565b9150613be382613b7e565b604082019050919050565b5f6020820190508181035f830152613c0581613bcc565b9050919050565b5f81905092915050565b50565b5f613c245f83613c0c565b9150613c2f82613c16565b5f82019050919050565b5f613c4382613c19565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613c81601b8361366f565b9150613c8c82613c4d565b602082019050919050565b5f6020820190508181035f830152613cae81613c75565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cec8261376d565b9150613cf78361376d565b9250828201905080821115613d0f57613d0e613cb5565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613d6f60398361366f565b9150613d7a82613d15565b604082019050919050565b5f6020820190508181035f830152613d9c81613d63565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613dfd60248361366f565b9150613e0882613da3565b604082019050919050565b5f6020820190508181035f830152613e2a81613df1565b9050919050565b5f81519050613e3f81613743565b92915050565b5f60208284031215613e5a57613e5961370f565b5b5f613e6784828501613e31565b91505092915050565b5f604082019050613e835f8301856139c0565b613e9060208301846139c0565b9392505050565b5f613ea18261376d565b9150613eac8361376d565b9250828202613eba8161376d565b91508282048414831517613ed157613ed0613cb5565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f0f8261376d565b9150613f1a8361376d565b925082613f2a57613f29613ed8565b5b828204905092915050565b5f819050919050565b5f613f58613f53613f4e84613f35565b61383c565b61376d565b9050919050565b613f6881613f3e565b82525050565b5f60c082019050613f815f8301896139c0565b613f8e60208301886138b0565b613f9b6040830187613f5f565b613fa86060830186613f5f565b613fb560808301856139c0565b613fc260a08301846138b0565b979650505050505050565b5f81519050613fdb81613776565b92915050565b5f805f60608486031215613ff857613ff761370f565b5b5f61400586828701613fcd565b935050602061401686828701613fcd565b925050604061402786828701613fcd565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61408b60248361366f565b915061409682614031565b604082019050919050565b5f6020820190508181035f8301526140b88161407f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61411960228361366f565b9150614124826140bf565b604082019050919050565b5f6020820190508181035f8301526141468161410d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141a760258361366f565b91506141b28261414d565b604082019050919050565b5f6020820190508181035f8301526141d48161419b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61423560238361366f565b9150614240826141db565b604082019050919050565b5f6020820190508181035f83015261426281614229565b9050919050565b7f53656e64657220697320626c61636b6c697374656400000000000000000000005f82015250565b5f61429d60158361366f565b91506142a882614269565b602082019050919050565b5f6020820190508181035f8301526142ca81614291565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61432b60358361366f565b9150614336826142d1565b604082019050919050565b5f6020820190508181035f8301526143588161431f565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61439360138361366f565b915061439e8261435f565b602082019050919050565b5f6020820190508181035f8301526143c081614387565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61442160368361366f565b915061442c826143c7565b604082019050919050565b5f6020820190508181035f83015261444e81614415565b9050919050565b5f61445f8261376d565b915061446a8361376d565b925082820390508181111561448257614481613cb5565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6144bc601b8361366f565b91506144c782614488565b602082019050919050565b5f6020820190508181035f8301526144e9816144b0565b9050919050565b5f6060820190506145035f8301866138b0565b61451060208301856138b0565b61451d60408301846138b0565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61457f60218361366f565b915061458a82614525565b604082019050919050565b5f6020820190508181035f8301526145ac81614573565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61463f81613732565b82525050565b5f6146508383614636565b60208301905092915050565b5f602082019050919050565b5f6146728261460d565b61467c8185614617565b935061468783614627565b805f5b838110156146b757815161469e8882614645565b97506146a98361465c565b92505060018101905061468a565b5085935050505092915050565b5f60a0820190506146d75f8301886138b0565b6146e46020830187613f5f565b81810360408301526146f68186614668565b905061470560608301856139c0565b61471260808301846138b0565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204e16fae2e363142e1315c9ba8360cc594327a2f4cc61bd6f97ed72a60d2e14dc64736f6c63430008150033

Deployed Bytecode Sourcemap

17558:12912:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4821:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5735:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18175:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22365:311;;;;;;;;;;;;;:::i;:::-;;18748:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17718:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5142:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24346:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18457:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18356:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23310:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18390:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5912:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5041:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6275:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18258:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18134:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17766:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24519:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18092:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18291:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5258:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10802:148;;;;;;;;;;;;;:::i;:::-;;22948:81;;;;;;;;;;;;;:::i;:::-;;23154:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23038:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10588:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18212:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23895:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22684:256;;;;;;;;;;;;;:::i;:::-;;18497:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6501:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5393:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18971:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17992:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18422:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23704:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18056:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21293:1042;;;;;;;;;;;;;:::i;:::-;;5576:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18322:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10958:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17805:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4821:100;4875:13;4908:5;4901:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4821:100;:::o;5735:169::-;5818:4;5835:39;5844:12;:10;:12::i;:::-;5858:7;5867:6;5835:8;:39::i;:::-;5892:4;5885:11;;5735:169;;;;:::o;18175:30::-;;;;;;;;;;;;;:::o;22365:311::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22421:18:::1;22442:21;22421:42;;22495:1;22482:10;:14;22474:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22547:12;22572:9;;;;;;;;;;;22564:23;;22595:10;22564:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22546:64;;;22629:7;22621:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22410:266;;22365:311::o:0;18748:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;17718:41::-;;;;;;;;;;;;;:::o;5142:108::-;5203:7;5230:12;;5223:19;;5142:108;:::o;24346:165::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24458:9:::1;;;;;;;;;;;24427:41;;24444:12;24427:41;;;;;;;;;;;;24491:12;24479:9;;:24;;;;;;;;;;;;;;;;;;24346:165:::0;:::o;18457:33::-;;;;:::o;18356:27::-;;;;:::o;23310:386::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23483:7:::1;23471:9;:19;;;;23513:7;23501:9;:19;;;;23557:9;;23545;;:21;;;;:::i;:::-;23531:11;:35;;;;23590:8;23577:10;:21;;;;23622:8;23609:10;:21;;;;23669:10;;23656;;:23;;;;:::i;:::-;23641:12;:38;;;;23310:386:::0;;;;:::o;18390:25::-;;;;:::o;5912:355::-;6052:4;6069:36;6079:6;6087:9;6098:6;6069:9;:36::i;:::-;6116:121;6125:6;6133:12;:10;:12::i;:::-;6147:89;6185:6;6147:89;;;;;;;;;;;;;;;;;:11;:19;6159:6;6147:19;;;;;;;;;;;;;;;:33;6167:12;:10;:12::i;:::-;6147:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6116:8;:121::i;:::-;6255:4;6248:11;;5912:355;;;;;:::o;5041:93::-;5099:5;5124:2;5117:9;;5041:93;:::o;6275:218::-;6363:4;6380:83;6389:12;:10;:12::i;:::-;6403:7;6412:50;6451:10;6412:11;:25;6424:12;:10;:12::i;:::-;6412:25;;;;;;;;;;;;;;;:34;6438:7;6412:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6380:8;:83::i;:::-;6481:4;6474:11;;6275:218;;;;:::o;18258:26::-;;;;:::o;18134:31::-;;;;:::o;17766:28::-;;;;;;;;;;;;;:::o;24519:125::-;24584:4;24608:19;:28;24628:7;24608:28;;;;;;;;;;;;;;;;;;;;;;;;;24601:35;;24519:125;;;:::o;18092:35::-;;;;:::o;18291:24::-;;;;:::o;5258:127::-;5332:7;5359:9;:18;5369:7;5359:18;;;;;;;;;;;;;;;;5352:25;;5258:127;;;:::o;10802:148::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10909:1:::1;10872:40;;10893:6;;;;;;;;;;;10872:40;;;;;;;;;;;;10940:1;10923:6;;:19;;;;;;;;;;;;;;;;;;10802:148::o:0;22948:81::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23016:5:::1;23002:11;;:19;;;;;;;;;;;;;;;;;;22948:81::o:0;23154:144::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23286:4:::1;23244:31;:39;23276:6;23244:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23154:144:::0;;:::o;23038:107::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23130:7:::1;23110:17;;:27;;;;;;;;;;;;;;;;;;23038:107:::0;:::o;10588:79::-;10626:7;10653:6;;;;;;;;;;;10646:13;;10588:79;:::o;18212:37::-;;;;;;;;;;;;;:::o;4929:104::-;4985:13;5018:7;5011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4929:104;:::o;23895:245::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24002:13:::1;;;;;;;;;;;23994:21;;:4;:21;;::::0;23986:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24091:41;24120:4;24126:5;24091:28;:41::i;:::-;23895:245:::0;;:::o;22684:256::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22749:20:::1;22772:24;22790:4;22772:9;:24::i;:::-;22749:47;;22830:1;22815:12;:16;22807:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22883:49;22901:4;22908:9;;;;;;;;;;;22919:12;22883:9;:49::i;:::-;22738:202;22684:256::o:0;18497:27::-;;;;:::o;6501:269::-;6594:4;6611:129;6620:12;:10;:12::i;:::-;6634:7;6643:96;6682:15;6643:96;;;;;;;;;;;;;;;;;:11;:25;6655:12;:10;:12::i;:::-;6643:25;;;;;;;;;;;;;;;:34;6669:7;6643:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6611:8;:129::i;:::-;6758:4;6751:11;;6501:269;;;;:::o;5393:175::-;5479:4;5496:42;5506:12;:10;:12::i;:::-;5520:9;5531:6;5496:9;:42::i;:::-;5556:4;5549:11;;5393:175;;;;:::o;18971:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;17992:22::-;;;;:::o;18422:25::-;;;;:::o;23704:182::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23820:8:::1;23789:19;:28;23809:7;23789:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23860:7;23844:34;;;23869:8;23844:34;;;;;;:::i;:::-;;;;;;;;23704:182:::0;;:::o;18056:29::-;;;;:::o;21293:1042::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21351:35:::1;21408:42;21351:100;;21465:58;21499:16;21518:4;21465:25;:58::i;:::-;21552:16;21534:15;;:34;;;;;;;;;;;;;;;;;;21616:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21598:56;;;21663:4;21670:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21598:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21582:13;;:112;;;;;;;;;;;;;;;;;;21705:55;21739:13;;;;;;;;;;;21755:4;21705:25;:55::i;:::-;21771:58;21808:13;;;;;;;;;;;21824:4;21771:28;:58::i;:::-;21850:17;21870:21;21850:41;;21902:19;21956:3;21951:2;21924:24;21942:4;21924:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;21902:57;;21990:62;22007:4;22022:15;;;;;;;;;;;22040:11;21990:8;:62::i;:::-;22065:15;;;;;;;;;;;:31;;;22104:9;22137:4;22157:11;22187:1;22234::::0;22277:9:::1;;;;;;;;;;;22301:15;22065:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21334:1001;;;21293:1042::o:0;5576:151::-;5665:7;5692:11;:18;5704:5;5692:18;;;;;;;;;;;;;;;:27;5711:7;5692:27;;;;;;;;;;;;;;;;5685:34;;5576:151;;;;:::o;18322:24::-;;;;:::o;10958:169::-;10725:12;:10;:12::i;:::-;10715:22;;:6;;;;;;;;;;;:22;;;10707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11082:8:::1;11053:38;;11074:6;;;;;;;;;;;11053:38;;;;;;;;;;;;11111:8;11102:6;;:17;;;;;;;;;;;;;;;;;;10958:169:::0;:::o;17805:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;174:98::-;227:7;254:10;247:17;;174:98;:::o;8177:381::-;8330:1;8313:19;;:5;:19;;;8305:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8411:1;8392:21;;:7;:21;;;8384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8496:6;8466:11;:18;8478:5;8466:18;;;;;;;;;;;;;;;:27;8485:7;8466:27;;;;;;;;;;;;;;;:36;;;;8534:7;8518:32;;8527:5;8518:32;;;8543:6;8518:32;;;;;;:::i;:::-;;;;;;;;8177:381;;;:::o;24653:3193::-;24801:1;24785:18;;:4;:18;;;24777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24878:1;24864:16;;:2;:16;;;24856:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24940:13;:25;24954:10;24940:25;;;;;;;;;;;;;;;;;;;;;;;;;24939:26;24931:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25026:1;25016:6;:11;25013:92;;25044:28;25060:4;25066:2;25070:1;25044:15;:28::i;:::-;25087:7;;25013:92;25121:11;;;;;;;;;;;25118:1083;;;25178:7;:5;:7::i;:::-;25170:15;;:4;:15;;;;:49;;;;;25212:7;:5;:7::i;:::-;25206:13;;:2;:13;;;;25170:49;:86;;;;;25254:1;25240:16;;:2;:16;;;;25170:86;:128;;;;;25291:6;25277:21;;:2;:21;;;;25170:128;:160;;;;;25320:10;;;;;;;;;;;25319:11;25170:160;25148:1042;;;25414:25;:31;25440:4;25414:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25450:31;:35;25482:2;25450:35;;;;;;;;;;;;;;;;;;;;;;;;;25449:36;25414:71;25410:765;;;25532:14;;25522:6;:24;;25514:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25665:16;;25648:13;25658:2;25648:9;:13::i;:::-;25639:6;:22;;;;:::i;:::-;:42;;25631:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25410:765;;;25784:25;:29;25810:2;25784:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;25818:31;:37;25850:4;25818:37;;;;;;;;;;;;;;;;;;;;;;;;;25817:38;25784:71;25780:395;;;25902:14;;25892:6;:24;;25884:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25780:395;;;26022:31;:35;26054:2;26022:35;;;;;;;;;;;;;;;;;;;;;;;;;26018:157;;26115:16;;26098:13;26108:2;26098:9;:13::i;:::-;26089:6;:22;;;;:::i;:::-;:42;;26081:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26018:157;25780:395;25410:765;25148:1042;25118:1083;26214:28;26245:24;26263:4;26245:9;:24::i;:::-;26214:55;;26283:12;26322:20;;26298;:44;;26283:59;;26374:7;:35;;;;;26399:10;;;;;;;;;;;26398:11;26374:35;:84;;;;;26427:25;:31;26453:4;26427:31;;;;;;;;;;;;;;;;;;;;;;;;;26426:32;26374:84;:127;;;;;26476:19;:25;26496:4;26476:25;;;;;;;;;;;;;;;;;;;;;;;;;26475:26;26374:127;:168;;;;;26519:19;:23;26539:2;26519:23;;;;;;;;;;;;;;;;;;;;;;;;;26518:24;26374:168;26356:306;;;26582:4;26569:10;;:17;;;;;;;;;;;;;;;;;;26604:10;:8;:10::i;:::-;26645:5;26632:10;;:18;;;;;;;;;;;;;;;;;;26356:306;26675:12;26691:10;;;;;;;;;;;26690:11;26675:26;;26803:19;:25;26823:4;26803:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26832:19;:23;26852:2;26832:23;;;;;;;;;;;;;;;;;;;;;;;;;26803:52;26800:99;;;26882:5;26872:15;;26800:99;26912:12;27016:7;27013:779;;;27067:25;:29;27093:2;27067:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;27115:1;27100:12;;:16;27067:49;27063:576;;;27143:33;27172:3;27143:24;27154:12;;27143:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27136:40;;27237:12;;27224:10;;27217:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27195:18;;:54;;;;;;;:::i;:::-;;;;;;;;27304:12;;27291:10;;27284:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;27268:12;;:48;;;;;;;:::i;:::-;;;;;;;;27063:576;;;27377:25;:31;27403:4;27377:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27426:1;27412:11;;:15;27377:50;27374:265;;;27455:32;27483:3;27455:23;27466:11;;27455:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;27448:39;;27547:11;;27535:9;;27528:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27506:18;;:52;;;;;;;:::i;:::-;;;;;;;;27612:11;;27600:9;;27593:4;:16;;;;:::i;:::-;:30;;;;:::i;:::-;27577:12;;:46;;;;;;;:::i;:::-;;;;;;;;27374:265;27063:576;27666:1;27659:4;:8;27656:93;;;27691:42;27707:4;27721;27728;27691:15;:42::i;:::-;27656:93;27776:4;27766:14;;;;;:::i;:::-;;;27013:779;27805:33;27821:4;27827:2;27831:6;27805:15;:33::i;:::-;24766:3080;;;;24653:3193;;;;:::o;9065:193::-;9151:7;9184:1;9179;:6;;9187:12;9171:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9211:9;9227:1;9223;:5;;;;:::i;:::-;9211:17;;9249:1;9242:8;;;9065:193;;;;;:::o;8731:182::-;8789:7;8809:9;8825:1;8821;:5;;;;:::i;:::-;8809:17;;8850:1;8845;:6;;8837:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8904:1;8897:8;;;8731:182;;;;:::o;24149:189::-;24266:5;24232:25;:31;24258:4;24232:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24324:5;24290:40;;24318:4;24290:40;;;;;;;;;;;;24149:189;;:::o;6778:575::-;6936:1;6918:20;;:6;:20;;;6910:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7020:1;6999:23;;:9;:23;;;6991:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7076:47;7097:6;7105:9;7116:6;7076:20;:47::i;:::-;7157:71;7179:6;7157:71;;;;;;;;;;;;;;;;;:9;:17;7167:6;7157:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7137:9;:17;7147:6;7137:17;;;;;;;;;;;;;;;:91;;;;7262:32;7287:6;7262:9;:20;7272:9;7262:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7239:9;:20;7249:9;7239:20;;;;;;;;;;;;;;;:55;;;;7327:9;7310:35;;7319:6;7310:35;;;7338:6;7310:35;;;;;;:::i;:::-;;;;;;;;6778:575;;;:::o;28990:1477::-;29029:23;29055:24;29073:4;29055:9;:24::i;:::-;29029:50;;29090:25;29139:12;;29118:18;;:33;;;;:::i;:::-;29090:61;;29162:12;29210:1;29191:15;:20;:46;;;;29236:1;29215:17;:22;29191:46;29188:60;;;29240:7;;;;;29188:60;29285:5;29264:26;;:17;;;;;;;;;;;:26;;;29261:254;;29350:2;29327:20;;:25;;;;:::i;:::-;29309:15;:43;29306:125;;;29413:2;29390:20;;:25;;;;:::i;:::-;29372:43;;29306:125;29261:254;;;29479:24;29497:4;29479:9;:24::i;:::-;29461:42;;29261:254;29587:23;29672:1;29652:17;29631:18;;29613:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;29587:86;;29684:26;29713:36;29733:15;29713;:19;;:36;;;;:::i;:::-;29684:65;;29763:25;29791:21;29763:49;;29826:36;29843:18;29826:16;:36::i;:::-;29877:18;29898:44;29924:17;29898:21;:25;;:44;;;;:::i;:::-;29877:65;;29956:17;29976:51;30009:17;29976:28;29991:12;;29976:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29956:71;;30038:23;30077:9;30064:10;:22;;;;:::i;:::-;30038:48;;30124:1;30103:18;:22;;;;30151:1;30136:12;:16;;;;30187:1;30169:15;:19;:42;;;;;30210:1;30192:15;:19;30169:42;30166:210;;;30227:46;30240:15;30257;30227:12;:46::i;:::-;30293:71;30308:18;30328:15;30345:18;;30293:71;;;;;;;;:::i;:::-;;;;;;;;30166:210;30410:9;;;;;;;;;;;30402:23;;30433:21;30402:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30389:70;;;;;29018:1449;;;;;;;;;28990:1477;:::o;9266:254::-;9324:7;9355:1;9350;:6;9346:47;;9380:1;9373:8;;;;9346:47;9406:9;9422:1;9418;:5;;;;:::i;:::-;9406:17;;9451:1;9446;9442;:5;;;;:::i;:::-;:10;9434:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9511:1;9504:8;;;9266:254;;;;;:::o;9528:132::-;9586:7;9613:39;9617:1;9620;9613:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9606:46;;9528:132;;;;:::o;8566:125::-;;;;:::o;8921:136::-;8979:7;9006:43;9010:1;9013;9006:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8999:50;;8921:136;;;;:::o;27855:597::-;27984:21;28022:1;28008:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27984:40;;28053:4;28035;28040:1;28035:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28079:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28069:4;28074:1;28069:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28115:62;28132:4;28147:15;;;;;;;;;;;28165:11;28115:8;:62::i;:::-;28217:15;;;;;;;;;;;:66;;;28298:11;28324:1;28368:4;28395;28415:15;28217:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27910:542;27855:597;:::o;28461:520::-;28609:62;28626:4;28641:15;;;;;;;;;;;28659:11;28609:8;:62::i;:::-;28715:15;;;;;;;;;;;:31;;;28754:9;28787:4;28807:11;28833:1;28876;28927:4;28947:15;28715:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28461:520;;:::o;9668:279::-;9754:7;9786:1;9782;:5;9789:12;9774:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9813:9;9829:1;9825;:5;;;;:::i;:::-;9813:17;;9938:1;9931:8;;;9668:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:765::-;5197:6;5205;5213;5221;5270:3;5258:9;5249:7;5245:23;5241:33;5238:120;;;5277:79;;:::i;:::-;5238:120;5397:1;5422:53;5467:7;5458:6;5447:9;5443:22;5422:53;:::i;:::-;5412:63;;5368:117;5524:2;5550:53;5595:7;5586:6;5575:9;5571:22;5550:53;:::i;:::-;5540:63;;5495:118;5652:2;5678:53;5723:7;5714:6;5703:9;5699:22;5678:53;:::i;:::-;5668:63;;5623:118;5780:2;5806:53;5851:7;5842:6;5831:9;5827:22;5806:53;:::i;:::-;5796:63;;5751:118;5111:765;;;;;;;:::o;5882:619::-;5959:6;5967;5975;6024:2;6012:9;6003:7;5999:23;5995:32;5992:119;;;6030:79;;:::i;:::-;5992:119;6150:1;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6121:117;6277:2;6303:53;6348:7;6339:6;6328:9;6324:22;6303:53;:::i;:::-;6293:63;;6248:118;6405:2;6431:53;6476:7;6467:6;6456:9;6452:22;6431:53;:::i;:::-;6421:63;;6376:118;5882:619;;;;;:::o;6507:86::-;6542:7;6582:4;6575:5;6571:16;6560:27;;6507:86;;;:::o;6599:112::-;6682:22;6698:5;6682:22;:::i;:::-;6677:3;6670:35;6599:112;;:::o;6717:214::-;6806:4;6844:2;6833:9;6829:18;6821:26;;6857:67;6921:1;6910:9;6906:17;6897:6;6857:67;:::i;:::-;6717:214;;;;:::o;6937:118::-;7024:24;7042:5;7024:24;:::i;:::-;7019:3;7012:37;6937:118;;:::o;7061:222::-;7154:4;7192:2;7181:9;7177:18;7169:26;;7205:71;7273:1;7262:9;7258:17;7249:6;7205:71;:::i;:::-;7061:222;;;;:::o;7289:116::-;7359:21;7374:5;7359:21;:::i;:::-;7352:5;7349:32;7339:60;;7395:1;7392;7385:12;7339:60;7289:116;:::o;7411:133::-;7454:5;7492:6;7479:20;7470:29;;7508:30;7532:5;7508:30;:::i;:::-;7411:133;;;;:::o;7550:468::-;7615:6;7623;7672:2;7660:9;7651:7;7647:23;7643:32;7640:119;;;7678:79;;:::i;:::-;7640:119;7798:1;7823:53;7868:7;7859:6;7848:9;7844:22;7823:53;:::i;:::-;7813:63;;7769:117;7925:2;7951:50;7993:7;7984:6;7973:9;7969:22;7951:50;:::i;:::-;7941:60;;7896:115;7550:468;;;;;:::o;8024:323::-;8080:6;8129:2;8117:9;8108:7;8104:23;8100:32;8097:119;;;8135:79;;:::i;:::-;8097:119;8255:1;8280:50;8322:7;8313:6;8302:9;8298:22;8280:50;:::i;:::-;8270:60;;8226:114;8024:323;;;;:::o;8353:474::-;8421:6;8429;8478:2;8466:9;8457:7;8453:23;8449:32;8446:119;;;8484:79;;:::i;:::-;8446:119;8604:1;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8575:117;8731:2;8757:53;8802:7;8793:6;8782:9;8778:22;8757:53;:::i;:::-;8747:63;;8702:118;8353:474;;;;;:::o;8833:180::-;8881:77;8878:1;8871:88;8978:4;8975:1;8968:15;9002:4;8999:1;8992:15;9019:320;9063:6;9100:1;9094:4;9090:12;9080:22;;9147:1;9141:4;9137:12;9168:18;9158:81;;9224:4;9216:6;9212:17;9202:27;;9158:81;9286:2;9278:6;9275:14;9255:18;9252:38;9249:84;;9305:18;;:::i;:::-;9249:84;9070:269;9019:320;;;:::o;9345:182::-;9485:34;9481:1;9473:6;9469:14;9462:58;9345:182;:::o;9533:366::-;9675:3;9696:67;9760:2;9755:3;9696:67;:::i;:::-;9689:74;;9772:93;9861:3;9772:93;:::i;:::-;9890:2;9885:3;9881:12;9874:19;;9533:366;;;:::o;9905:419::-;10071:4;10109:2;10098:9;10094:18;10086:26;;10158:9;10152:4;10148:20;10144:1;10133:9;10129:17;10122:47;10186:131;10312:4;10186:131;:::i;:::-;10178:139;;9905:419;;;:::o;10330:221::-;10470:34;10466:1;10458:6;10454:14;10447:58;10539:4;10534:2;10526:6;10522:15;10515:29;10330:221;:::o;10557:366::-;10699:3;10720:67;10784:2;10779:3;10720:67;:::i;:::-;10713:74;;10796:93;10885:3;10796:93;:::i;:::-;10914:2;10909:3;10905:12;10898:19;;10557:366;;;:::o;10929:419::-;11095:4;11133:2;11122:9;11118:18;11110:26;;11182:9;11176:4;11172:20;11168:1;11157:9;11153:17;11146:47;11210:131;11336:4;11210:131;:::i;:::-;11202:139;;10929:419;;;:::o;11354:147::-;11455:11;11492:3;11477:18;;11354:147;;;;:::o;11507:114::-;;:::o;11627:398::-;11786:3;11807:83;11888:1;11883:3;11807:83;:::i;:::-;11800:90;;11899:93;11988:3;11899:93;:::i;:::-;12017:1;12012:3;12008:11;12001:18;;11627:398;;;:::o;12031:379::-;12215:3;12237:147;12380:3;12237:147;:::i;:::-;12230:154;;12401:3;12394:10;;12031:379;;;:::o;12416:177::-;12556:29;12552:1;12544:6;12540:14;12533:53;12416:177;:::o;12599:366::-;12741:3;12762:67;12826:2;12821:3;12762:67;:::i;:::-;12755:74;;12838:93;12927:3;12838:93;:::i;:::-;12956:2;12951:3;12947:12;12940:19;;12599:366;;;:::o;12971:419::-;13137:4;13175:2;13164:9;13160:18;13152:26;;13224:9;13218:4;13214:20;13210:1;13199:9;13195:17;13188:47;13252:131;13378:4;13252:131;:::i;:::-;13244:139;;12971:419;;;:::o;13396:180::-;13444:77;13441:1;13434:88;13541:4;13538:1;13531:15;13565:4;13562:1;13555:15;13582:191;13622:3;13641:20;13659:1;13641:20;:::i;:::-;13636:25;;13675:20;13693:1;13675:20;:::i;:::-;13670:25;;13718:1;13715;13711:9;13704:16;;13739:3;13736:1;13733:10;13730:36;;;13746:18;;:::i;:::-;13730:36;13582:191;;;;:::o;13779:244::-;13919:34;13915:1;13907:6;13903:14;13896:58;13988:27;13983:2;13975:6;13971:15;13964:52;13779:244;:::o;14029:366::-;14171:3;14192:67;14256:2;14251:3;14192:67;:::i;:::-;14185:74;;14268:93;14357:3;14268:93;:::i;:::-;14386:2;14381:3;14377:12;14370:19;;14029:366;;;:::o;14401:419::-;14567:4;14605:2;14594:9;14590:18;14582:26;;14654:9;14648:4;14644:20;14640:1;14629:9;14625:17;14618:47;14682:131;14808:4;14682:131;:::i;:::-;14674:139;;14401:419;;;:::o;14826:223::-;14966:34;14962:1;14954:6;14950:14;14943:58;15035:6;15030:2;15022:6;15018:15;15011:31;14826:223;:::o;15055:366::-;15197:3;15218:67;15282:2;15277:3;15218:67;:::i;:::-;15211:74;;15294:93;15383:3;15294:93;:::i;:::-;15412:2;15407:3;15403:12;15396:19;;15055:366;;;:::o;15427:419::-;15593:4;15631:2;15620:9;15616:18;15608:26;;15680:9;15674:4;15670:20;15666:1;15655:9;15651:17;15644:47;15708:131;15834:4;15708:131;:::i;:::-;15700:139;;15427:419;;;:::o;15852:143::-;15909:5;15940:6;15934:13;15925:22;;15956:33;15983:5;15956:33;:::i;:::-;15852:143;;;;:::o;16001:351::-;16071:6;16120:2;16108:9;16099:7;16095:23;16091:32;16088:119;;;16126:79;;:::i;:::-;16088:119;16246:1;16271:64;16327:7;16318:6;16307:9;16303:22;16271:64;:::i;:::-;16261:74;;16217:128;16001:351;;;;:::o;16358:332::-;16479:4;16517:2;16506:9;16502:18;16494:26;;16530:71;16598:1;16587:9;16583:17;16574:6;16530:71;:::i;:::-;16611:72;16679:2;16668:9;16664:18;16655:6;16611:72;:::i;:::-;16358:332;;;;;:::o;16696:410::-;16736:7;16759:20;16777:1;16759:20;:::i;:::-;16754:25;;16793:20;16811:1;16793:20;:::i;:::-;16788:25;;16848:1;16845;16841:9;16870:30;16888:11;16870:30;:::i;:::-;16859:41;;17049:1;17040:7;17036:15;17033:1;17030:22;17010:1;17003:9;16983:83;16960:139;;17079:18;;:::i;:::-;16960:139;16744:362;16696:410;;;;:::o;17112:180::-;17160:77;17157:1;17150:88;17257:4;17254:1;17247:15;17281:4;17278:1;17271:15;17298:185;17338:1;17355:20;17373:1;17355:20;:::i;:::-;17350:25;;17389:20;17407:1;17389:20;:::i;:::-;17384:25;;17428:1;17418:35;;17433:18;;:::i;:::-;17418:35;17475:1;17472;17468:9;17463:14;;17298:185;;;;:::o;17489:85::-;17534:7;17563:5;17552:16;;17489:85;;;:::o;17580:158::-;17638:9;17671:61;17689:42;17698:32;17724:5;17698:32;:::i;:::-;17689:42;:::i;:::-;17671:61;:::i;:::-;17658:74;;17580:158;;;:::o;17744:147::-;17839:45;17878:5;17839:45;:::i;:::-;17834:3;17827:58;17744:147;;:::o;17897:807::-;18146:4;18184:3;18173:9;18169:19;18161:27;;18198:71;18266:1;18255:9;18251:17;18242:6;18198:71;:::i;:::-;18279:72;18347:2;18336:9;18332:18;18323:6;18279:72;:::i;:::-;18361:80;18437:2;18426:9;18422:18;18413:6;18361:80;:::i;:::-;18451;18527:2;18516:9;18512:18;18503:6;18451:80;:::i;:::-;18541:73;18609:3;18598:9;18594:19;18585:6;18541:73;:::i;:::-;18624;18692:3;18681:9;18677:19;18668:6;18624:73;:::i;:::-;17897:807;;;;;;;;;:::o;18710:143::-;18767:5;18798:6;18792:13;18783:22;;18814:33;18841:5;18814:33;:::i;:::-;18710:143;;;;:::o;18859:663::-;18947:6;18955;18963;19012:2;19000:9;18991:7;18987:23;18983:32;18980:119;;;19018:79;;:::i;:::-;18980:119;19138:1;19163:64;19219:7;19210:6;19199:9;19195:22;19163:64;:::i;:::-;19153:74;;19109:128;19276:2;19302:64;19358:7;19349:6;19338:9;19334:22;19302:64;:::i;:::-;19292:74;;19247:129;19415:2;19441:64;19497:7;19488:6;19477:9;19473:22;19441:64;:::i;:::-;19431:74;;19386:129;18859:663;;;;;:::o;19528:223::-;19668:34;19664:1;19656:6;19652:14;19645:58;19737:6;19732:2;19724:6;19720:15;19713:31;19528:223;:::o;19757:366::-;19899:3;19920:67;19984:2;19979:3;19920:67;:::i;:::-;19913:74;;19996:93;20085:3;19996:93;:::i;:::-;20114:2;20109:3;20105:12;20098:19;;19757:366;;;:::o;20129:419::-;20295:4;20333:2;20322:9;20318:18;20310:26;;20382:9;20376:4;20372:20;20368:1;20357:9;20353:17;20346:47;20410:131;20536:4;20410:131;:::i;:::-;20402:139;;20129:419;;;:::o;20554:221::-;20694:34;20690:1;20682:6;20678:14;20671:58;20763:4;20758:2;20750:6;20746:15;20739:29;20554:221;:::o;20781:366::-;20923:3;20944:67;21008:2;21003:3;20944:67;:::i;:::-;20937:74;;21020:93;21109:3;21020:93;:::i;:::-;21138:2;21133:3;21129:12;21122:19;;20781:366;;;:::o;21153:419::-;21319:4;21357:2;21346:9;21342:18;21334:26;;21406:9;21400:4;21396:20;21392:1;21381:9;21377:17;21370:47;21434:131;21560:4;21434:131;:::i;:::-;21426:139;;21153:419;;;:::o;21578:224::-;21718:34;21714:1;21706:6;21702:14;21695:58;21787:7;21782:2;21774:6;21770:15;21763:32;21578:224;:::o;21808:366::-;21950:3;21971:67;22035:2;22030:3;21971:67;:::i;:::-;21964:74;;22047:93;22136:3;22047:93;:::i;:::-;22165:2;22160:3;22156:12;22149:19;;21808:366;;;:::o;22180:419::-;22346:4;22384:2;22373:9;22369:18;22361:26;;22433:9;22427:4;22423:20;22419:1;22408:9;22404:17;22397:47;22461:131;22587:4;22461:131;:::i;:::-;22453:139;;22180:419;;;:::o;22605:222::-;22745:34;22741:1;22733:6;22729:14;22722:58;22814:5;22809:2;22801:6;22797:15;22790:30;22605:222;:::o;22833:366::-;22975:3;22996:67;23060:2;23055:3;22996:67;:::i;:::-;22989:74;;23072:93;23161:3;23072:93;:::i;:::-;23190:2;23185:3;23181:12;23174:19;;22833:366;;;:::o;23205:419::-;23371:4;23409:2;23398:9;23394:18;23386:26;;23458:9;23452:4;23448:20;23444:1;23433:9;23429:17;23422:47;23486:131;23612:4;23486:131;:::i;:::-;23478:139;;23205:419;;;:::o;23630:171::-;23770:23;23766:1;23758:6;23754:14;23747:47;23630:171;:::o;23807:366::-;23949:3;23970:67;24034:2;24029:3;23970:67;:::i;:::-;23963:74;;24046:93;24135:3;24046:93;:::i;:::-;24164:2;24159:3;24155:12;24148:19;;23807:366;;;:::o;24179:419::-;24345:4;24383:2;24372:9;24368:18;24360:26;;24432:9;24426:4;24422:20;24418:1;24407:9;24403:17;24396:47;24460:131;24586:4;24460:131;:::i;:::-;24452:139;;24179:419;;;:::o;24604:240::-;24744:34;24740:1;24732:6;24728:14;24721:58;24813:23;24808:2;24800:6;24796:15;24789:48;24604:240;:::o;24850:366::-;24992:3;25013:67;25077:2;25072:3;25013:67;:::i;:::-;25006:74;;25089:93;25178:3;25089:93;:::i;:::-;25207:2;25202:3;25198:12;25191:19;;24850:366;;;:::o;25222:419::-;25388:4;25426:2;25415:9;25411:18;25403:26;;25475:9;25469:4;25465:20;25461:1;25450:9;25446:17;25439:47;25503:131;25629:4;25503:131;:::i;:::-;25495:139;;25222:419;;;:::o;25647:169::-;25787:21;25783:1;25775:6;25771:14;25764:45;25647:169;:::o;25822:366::-;25964:3;25985:67;26049:2;26044:3;25985:67;:::i;:::-;25978:74;;26061:93;26150:3;26061:93;:::i;:::-;26179:2;26174:3;26170:12;26163:19;;25822:366;;;:::o;26194:419::-;26360:4;26398:2;26387:9;26383:18;26375:26;;26447:9;26441:4;26437:20;26433:1;26422:9;26418:17;26411:47;26475:131;26601:4;26475:131;:::i;:::-;26467:139;;26194:419;;;:::o;26619:241::-;26759:34;26755:1;26747:6;26743:14;26736:58;26828:24;26823:2;26815:6;26811:15;26804:49;26619:241;:::o;26866:366::-;27008:3;27029:67;27093:2;27088:3;27029:67;:::i;:::-;27022:74;;27105:93;27194:3;27105:93;:::i;:::-;27223:2;27218:3;27214:12;27207:19;;26866:366;;;:::o;27238:419::-;27404:4;27442:2;27431:9;27427:18;27419:26;;27491:9;27485:4;27481:20;27477:1;27466:9;27462:17;27455:47;27519:131;27645:4;27519:131;:::i;:::-;27511:139;;27238:419;;;:::o;27663:194::-;27703:4;27723:20;27741:1;27723:20;:::i;:::-;27718:25;;27757:20;27775:1;27757:20;:::i;:::-;27752:25;;27801:1;27798;27794:9;27786:17;;27825:1;27819:4;27816:11;27813:37;;;27830:18;;:::i;:::-;27813:37;27663:194;;;;:::o;27863:177::-;28003:29;27999:1;27991:6;27987:14;27980:53;27863:177;:::o;28046:366::-;28188:3;28209:67;28273:2;28268:3;28209:67;:::i;:::-;28202:74;;28285:93;28374:3;28285:93;:::i;:::-;28403:2;28398:3;28394:12;28387:19;;28046:366;;;:::o;28418:419::-;28584:4;28622:2;28611:9;28607:18;28599:26;;28671:9;28665:4;28661:20;28657:1;28646:9;28642:17;28635:47;28699:131;28825:4;28699:131;:::i;:::-;28691:139;;28418:419;;;:::o;28843:442::-;28992:4;29030:2;29019:9;29015:18;29007:26;;29043:71;29111:1;29100:9;29096:17;29087:6;29043:71;:::i;:::-;29124:72;29192:2;29181:9;29177:18;29168:6;29124:72;:::i;:::-;29206;29274:2;29263:9;29259:18;29250:6;29206:72;:::i;:::-;28843:442;;;;;;:::o;29291:220::-;29431:34;29427:1;29419:6;29415:14;29408:58;29500:3;29495:2;29487:6;29483:15;29476:28;29291:220;:::o;29517:366::-;29659:3;29680:67;29744:2;29739:3;29680:67;:::i;:::-;29673:74;;29756:93;29845:3;29756:93;:::i;:::-;29874:2;29869:3;29865:12;29858:19;;29517:366;;;:::o;29889:419::-;30055:4;30093:2;30082:9;30078:18;30070:26;;30142:9;30136:4;30132:20;30128:1;30117:9;30113:17;30106:47;30170:131;30296:4;30170:131;:::i;:::-;30162:139;;29889:419;;;:::o;30314:180::-;30362:77;30359:1;30352:88;30459:4;30456:1;30449:15;30483:4;30480:1;30473:15;30500:180;30548:77;30545:1;30538:88;30645:4;30642:1;30635:15;30669:4;30666:1;30659:15;30686:114;30753:6;30787:5;30781:12;30771:22;;30686:114;;;:::o;30806:184::-;30905:11;30939:6;30934:3;30927:19;30979:4;30974:3;30970:14;30955:29;;30806:184;;;;:::o;30996:132::-;31063:4;31086:3;31078:11;;31116:4;31111:3;31107:14;31099:22;;30996:132;;;:::o;31134:108::-;31211:24;31229:5;31211:24;:::i;:::-;31206:3;31199:37;31134:108;;:::o;31248:179::-;31317:10;31338:46;31380:3;31372:6;31338:46;:::i;:::-;31416:4;31411:3;31407:14;31393:28;;31248:179;;;;:::o;31433:113::-;31503:4;31535;31530:3;31526:14;31518:22;;31433:113;;;:::o;31582:732::-;31701:3;31730:54;31778:5;31730:54;:::i;:::-;31800:86;31879:6;31874:3;31800:86;:::i;:::-;31793:93;;31910:56;31960:5;31910:56;:::i;:::-;31989:7;32020:1;32005:284;32030:6;32027:1;32024:13;32005:284;;;32106:6;32100:13;32133:63;32192:3;32177:13;32133:63;:::i;:::-;32126:70;;32219:60;32272:6;32219:60;:::i;:::-;32209:70;;32065:224;32052:1;32049;32045:9;32040:14;;32005:284;;;32009:14;32305:3;32298:10;;31706:608;;;31582:732;;;;:::o;32320:831::-;32583:4;32621:3;32610:9;32606:19;32598:27;;32635:71;32703:1;32692:9;32688:17;32679:6;32635:71;:::i;:::-;32716:80;32792:2;32781:9;32777:18;32768:6;32716:80;:::i;:::-;32843:9;32837:4;32833:20;32828:2;32817:9;32813:18;32806:48;32871:108;32974:4;32965:6;32871:108;:::i;:::-;32863:116;;32989:72;33057:2;33046:9;33042:18;33033:6;32989:72;:::i;:::-;33071:73;33139:3;33128:9;33124:19;33115:6;33071:73;:::i;:::-;32320:831;;;;;;;;:::o

Swarm Source

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