ETH Price: $3,467.93 (+2.18%)
Gas: 13 Gwei

Token

Azalea Neko (AZALEA)
 

Overview

Max Total Supply

1,000,000,000 AZALEA

Holders

24

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
629,078.48279685821826444 AZALEA

Value
$0.00
0x5b10c7ea7c186495c84c2266a7f1f775afce342a
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:
AZALEA

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// Kabosu's best cat friend. The new memecoin.
// https://twitter.com/AzaleaToken

pragma solidity ^0.8.0;

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 IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from,
        address to,
        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 {
    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 to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/*
    * @dev Contract starts here
*/

contract AZALEA is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    mapping (address => bool) private _isBlacklisted;
    bool private _swapping;
    uint256 private _liveBlock;

    address private _fundingWallet;
    address public burnAddress = address(0x000000000000000000000000000000000000dEaD);
    
    uint256 public maxTransactionAmount;
    uint256 public maxWallet;

    uint256 public swapTokensThreshold;
        
    bool public limitsInEffect = true;
    bool public feesDisabled = false;
    bool public tradingLive = false;

    uint256 private _fundingFee = 4;
    uint256 private _liquidityFee = 0;
    uint256 private _burnFee = 0;
    uint256 private _tokensForFunding;
    uint256 private _tokensForLiquidity;

    uint256 public totalFees = _fundingFee + _liquidityFee + _burnFee;
    
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _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) private _automatedMarketMakerPairs;

    // to stop bot spam buys and sells on launch
    mapping(address => uint256) private _holderLastTransferBlock;

    /**
     * @dev Throws if called by any account other than the _fundingWallet
     */
    modifier teamOROwner() {
        require(_fundingWallet == _msgSender() || owner() == _msgSender(), "Caller is not the _fundingWallet address nor owner.");
        _;
    }

    constructor() ERC20("Azalea Neko", "AZALEA") payable {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true;
        uniswapV2Router = _uniswapV2Router;
                        
        uint256 totalSupply = 1e9 * 1e18;

        maxTransactionAmount = totalSupply * 3 / 100;
        maxWallet = totalSupply * 3 / 100;
        swapTokensThreshold = totalSupply * 2 / 1000;
        
        _fundingWallet = owner();

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

        _mint(burnAddress, totalSupply / 100 * 50);
        _mint(address(this), totalSupply / 100 * 50);
    }

    /**
    * @dev Once live, can never be switched off
    */
    function startTrading(uint256 number, uint256 supplyPercentToLP) external teamOROwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _automatedMarketMakerPairs[address(uniswapV2Pair)] = true;

        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Router.addLiquidityETH{value: address(this).balance} (
            address(this),
            totalSupply() / 100 * supplyPercentToLP,
            0,
            0,
            owner(),
            block.timestamp
        );

        _liveBlock = block.number.add(number);
        tradingLive = true;
    }

    /**
    * @dev Remove limits after token is somewhat stable
    */
    function removeLimits() external teamOROwner {
        limitsInEffect = false;
    }

    /**
    * @dev Exclude from fee calculation
    */
    function excludeFromFees(address account, bool excluded) public teamOROwner {
        _isExcludedFromFees[account] = excluded;
    }
    
    /**
    * @dev Update token fees (max set to initial fee)
    */
    function updateFees(uint256 fundingFee, uint256 liquidityFee, uint256 burnFee) external teamOROwner {
        require(fundingFee.add(liquidityFee).add(burnFee) <= 10);

        _fundingFee = fundingFee;
        _liquidityFee = liquidityFee;
        _burnFee = burnFee;

        totalFees = fundingFee.add(liquidityFee).add(burnFee);
    }
    
    /**
    * @dev Enable and disable backend fees
    */
    function setFeeState(bool state) external teamOROwner {
        feesDisabled = state;
    }

    /**
    * @dev Update wallet that receives fees and newly added LP
    */
    function updateTeamWallet(address newWallet) external teamOROwner {
        _fundingWallet = newWallet;
    }

    /**
    * @dev Very important function. 
    * Updates the threshold of how many tokens that must be in the contract calculation for fees to be taken
    */
    function updateSwapTokensThreshold(uint256 newThreshold) external teamOROwner returns (bool) {
  	    require(newThreshold >= totalSupply() * 1 / 100000, "Swap threshold cannot be lower than 0.001% total supply.");
  	    require(newThreshold <= totalSupply() * 5 / 1000, "Swap threshold cannot be higher than 0.5% total supply.");
  	    swapTokensThreshold = newThreshold;
  	    return true;
  	}

    /**
    * @dev Check if an address is excluded from the fee calculation
    */
    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    /**
    * @dev Can be used to block certain addresses (mainly for trading bots and sniping bots)
    */
    function blacklist(address[] memory addresses) public onlyOwner {
        for (uint i = 0; i < addresses.length; i++) {
            if (addresses[i] != uniswapV2Pair && addresses[i] != address(uniswapV2Router)) {
                _isBlacklisted[addresses[i]] = true;
            }
        }
    }
    
    /**
    * @dev Remove blacklisted addresses
    */
    function removeBlacklist(address[] memory addresses) public onlyOwner {
        for (uint i = 0; i < addresses.length; i++) {
            _isBlacklisted[addresses[i]] = false;
        }
    }
    
    /**
    * @dev Check if an address is blacklisted
    */
    function blacklisted(address addr) public view returns (bool) {
        return _isBlacklisted[addr];
    }

    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[from], "You have been blacklisted, you are unable to transfer or swap.");
        
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        // burn
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 burnAmount = amount.div(100) * _burnFee;
            _transfer(from, burnAddress, burnAmount);
            amount -= burnAmount;
        }

        // all to secure a smooth launch
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingLive) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "_transfer:: Trading is not active.");
                if (_liveBlock >= block.number) _isBlacklisted[to] = true;

                if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                    require(_holderLastTransferBlock[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                    _holderLastTransferBlock[tx.origin] = block.number;
                }

                // on buy
                if (_automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "_transfer:: Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded");
                }
                
                // on sell
                else if (_automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "_transfer:: Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "_transfer:: Max wallet exceeded");
                }
            }
        }
        
        if (
            !_swapping &&
            !_automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee
        if (
            feesDisabled ||
            _isExcludedFromFees[from] || 
            _isExcludedFromFees[to] || 
            (!_automatedMarketMakerPairs[from] && !_automatedMarketMakerPairs[to])
        ) takeFee = false;
        
        uint256 fees = 0;
        if (takeFee) {
            fees = amount.mul(totalFees).div(100);

            _tokensForLiquidity += fees * _liquidityFee / totalFees;
            _tokensForFunding += fees * _fundingFee / totalFees;

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function _swapTokensForETH(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            _fundingWallet,
            block.timestamp
        );
    }

    function swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForFunding;

        if (contractBalance == 0) return;
        if (contractBalance > swapTokensThreshold) contractBalance = swapTokensThreshold;

        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForETH(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForFunding = ethBalance.mul(_tokensForFunding).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForFunding;

        _tokensForFunding = 0;
        _tokensForLiquidity = 0;

        payable(_fundingWallet).transfer(ethForFunding);

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
        }
    }

    /**
    * @dev Transfer funds stuck in contract
    */
    function withdrawContractFunds() external {
        payable(_fundingWallet).transfer(address(this).balance);
    }

    /**
    * @dev In case swap wont do it and sells/buys might be blocked
    */
    function forceSwap() external teamOROwner {
        _swapTokensForETH(balanceOf(address(this)));
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setFeeState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"supplyPercentToLP","type":"uint256"}],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"uint256","name":"fundingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateSwapTokensThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawContractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff021916908315150217905550600460115560006012556000601355601354601254601154620000bc919062000a9b565b620000c8919062000a9b565b6016556040518060400160405280600b81526020017f417a616c6561204e656b6f0000000000000000000000000000000000000000008152506040518060400160405280600681526020017f415a414c4541000000000000000000000000000000000000000000000000000081525081600390805190602001906200014f929190620008be565b50806004908051906020019062000168929190620008be565b5050506200018b6200017f620004f160201b60201c565b620004f960201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006b033b2e3c9fd0803ce8000000905060646003826200025f919062000b30565b6200026b919062000af8565b600d81905550606460038262000282919062000b30565b6200028e919062000af8565b600e819055506103e8600282620002a6919062000b30565b620002b2919062000af8565b600f81905550620002c8620005bf60201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200032a6200031c620005bf60201b60201c565b6001620005e960201b60201c565b6200033d306001620005e960201b60201c565b6200035261dead6001620005e960201b60201c565b60016018600062000368620005bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004bb600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166032606484620004a3919062000af8565b620004af919062000b30565b6200073b60201b60201c565b620004e9306032606484620004d1919062000af8565b620004dd919062000b30565b6200073b60201b60201c565b505062000c5e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005f9620004f160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806200069e575062000660620004f160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000686620005bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b620006e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d79062000a29565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a59062000a4b565b60405180910390fd5b620007c260008383620008b460201b60201c565b8060026000828254620007d6919062000a9b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200082d919062000a9b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000894919062000a6d565b60405180910390a3620008b060008383620008b960201b60201c565b5050565b505050565b505050565b828054620008cc9062000b9b565b90600052602060002090601f016020900481019282620008f057600085556200093c565b82601f106200090b57805160ff19168380011785556200093c565b828001600101855582156200093c579182015b828111156200093b5782518255916020019190600101906200091e565b5b5090506200094b91906200094f565b5090565b5b808211156200096a57600081600090555060010162000950565b5090565b60006200097d60338362000a8a565b91507f43616c6c6572206973206e6f7420746865205f66756e64696e6757616c6c657460008301527f2061646472657373206e6f72206f776e65722e000000000000000000000000006020830152604082019050919050565b6000620009e5601f8362000a8a565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b62000a238162000b91565b82525050565b6000602082019050818103600083015262000a44816200096e565b9050919050565b6000602082019050818103600083015262000a6681620009d6565b9050919050565b600060208201905062000a84600083018462000a18565b92915050565b600082825260208201905092915050565b600062000aa88262000b91565b915062000ab58362000b91565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000aed5762000aec62000bd1565b5b828201905092915050565b600062000b058262000b91565b915062000b128362000b91565b92508262000b255762000b2462000c00565b5b828204905092915050565b600062000b3d8262000b91565b915062000b4a8362000b91565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000b865762000b8562000bd1565b5b828202905092915050565b6000819050919050565b6000600282049050600182168062000bb457607f821691505b6020821081141562000bcb5762000bca62000c2f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614d098062000c6e6000396000f3fe6080604052600436106102085760003560e01c8063751039fc11610118578063c0246668116100a0578063dbac26e91161006f578063dbac26e914610764578063dd62ed3e146107a1578063df778d26146107de578063f2fde38b146107f5578063f8b45b051461081e5761020f565b8063c0246668146106bc578063c8c8ebe4146106e5578063cef8513914610710578063d691a7341461073b5761020f565b80638da5cb5b116100e75780638da5cb5b146105c357806395d89b41146105ee578063a457c2d714610619578063a9059cbb14610656578063bb5e048a146106935761020f565b8063751039fc1461051d5780637911ef9d146105345780637cb332bb1461055d5780638baa63b2146105865761020f565b806323b872dd1161019b5780634fbee1931161016a5780634fbee1931461043657806365cffb1e1461047357806370a082311461049e57806370d5ae05146104db578063715018a6146105065761020f565b806323b872dd14610366578063313ce567146103a357806339509351146103ce5780634a62bb651461040b5761020f565b806313114a9d116101d757806313114a9d146102d057806318160ddd146102fb5780632100942314610326578063224290851461033d5761020f565b8063041f173f1461021457806306fdde031461023d578063095ea7b31461026857806311704f52146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613b91565b610849565b005b34801561024957600080fd5b50610252610ab2565b60405161025f91906145f3565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a9190613b55565b610b44565b60405161029c91906145d8565b60405180910390f35b3480156102b157600080fd5b506102ba610b67565b6040516102c791906145d8565b60405180910390f35b3480156102dc57600080fd5b506102e5610b7a565b6040516102f29190614855565b60405180910390f35b34801561030757600080fd5b50610310610b80565b60405161031d9190614855565b60405180910390f35b34801561033257600080fd5b5061033b610b8a565b005b34801561034957600080fd5b50610364600480360381019061035f9190613c60565b610bf5565b005b34801561037257600080fd5b5061038d60048036038101906103889190613aca565b610d47565b60405161039a91906145d8565b60405180910390f35b3480156103af57600080fd5b506103b8610d76565b6040516103c591906148ca565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613b55565b610d7f565b60405161040291906145d8565b60405180910390f35b34801561041757600080fd5b50610420610e29565b60405161042d91906145d8565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190613a3c565b610e3c565b60405161046a91906145d8565b60405180910390f35b34801561047f57600080fd5b50610488610e92565b60405161049591906145d8565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613a3c565b610ea5565b6040516104d29190614855565b60405180910390f35b3480156104e757600080fd5b506104f0610eed565b6040516104fd9190614533565b60405180910390f35b34801561051257600080fd5b5061051b610f13565b005b34801561052957600080fd5b50610532610f9b565b005b34801561054057600080fd5b5061055b60048036038101906105569190613b91565b611093565b005b34801561056957600080fd5b50610584600480360381019061057f9190613a3c565b6111ca565b005b34801561059257600080fd5b506105ad60048036038101906105a89190613bfb565b6112e9565b6040516105ba91906145d8565b60405180910390f35b3480156105cf57600080fd5b506105d861149d565b6040516105e59190614533565b60405180910390f35b3480156105fa57600080fd5b506106036114c7565b60405161061091906145f3565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613b55565b611559565b60405161064d91906145d8565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190613b55565b611643565b60405161068a91906145d8565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613bd2565b611666565b005b3480156106c857600080fd5b506106e360048036038101906106de9190613b19565b61175e565b005b3480156106f157600080fd5b506106fa611894565b6040516107079190614855565b60405180910390f35b34801561071c57600080fd5b5061072561189a565b6040516107329190614855565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613c24565b6118a0565b005b34801561077057600080fd5b5061078b60048036038101906107869190613a3c565b611dc7565b60405161079891906145d8565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c39190613a8e565b611e1d565b6040516107d59190614855565b60405180910390f35b3480156107ea57600080fd5b506107f3611ea4565b005b34801561080157600080fd5b5061081c60048036038101906108179190613a3c565b611f92565b005b34801561082a57600080fd5b5061083361208a565b6040516108409190614855565b60405180910390f35b610851612090565b73ffffffffffffffffffffffffffffffffffffffff1661086f61149d565b73ffffffffffffffffffffffffffffffffffffffff16146108c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bc90614755565b60405180910390fd5b60005b8151811015610aae57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610943577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156109fd5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282815181106109dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610a9b57600160086000848481518110610a41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610aa690614b78565b9150506108c8565b5050565b606060038054610ac190614b46565b80601f0160208091040260200160405190810160405280929190818152602001828054610aed90614b46565b8015610b3a5780601f10610b0f57610100808354040283529160200191610b3a565b820191906000526020600020905b815481529060010190602001808311610b1d57829003601f168201915b5050505050905090565b600080610b4f612090565b9050610b5c818585612098565b600191505092915050565b601060029054906101000a900460ff1681565b60165481565b6000600254905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bf2573d6000803e3d6000fd5b50565b610bfd612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610c915750610c5b612090565b73ffffffffffffffffffffffffffffffffffffffff16610c7961149d565b73ffffffffffffffffffffffffffffffffffffffff16145b610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc7906146f5565b60405180910390fd5b600a610cf782610ce9858761226390919063ffffffff16565b61226390919063ffffffff16565b1115610d0257600080fd5b826011819055508160128190555080601381905550610d3c81610d2e848661226390919063ffffffff16565b61226390919063ffffffff16565b601681905550505050565b600080610d52612090565b9050610d5f858285612279565b610d6a858585612305565b60019150509392505050565b60006012905090565b600080610d8a612090565b9050610e1e818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e199190614997565b612098565b600191505092915050565b601060009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601060019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f1b612090565b73ffffffffffffffffffffffffffffffffffffffff16610f3961149d565b73ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690614755565b60405180910390fd5b610f996000613052565b565b610fa3612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806110375750611001612090565b73ffffffffffffffffffffffffffffffffffffffff1661101f61149d565b73ffffffffffffffffffffffffffffffffffffffff16145b611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d906146f5565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b61109b612090565b73ffffffffffffffffffffffffffffffffffffffff166110b961149d565b73ffffffffffffffffffffffffffffffffffffffff161461110f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110690614755565b60405180910390fd5b60005b81518110156111c65760006008600084848151811061115a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111be90614b78565b915050611112565b5050565b6111d2612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112665750611230612090565b73ffffffffffffffffffffffffffffffffffffffff1661124e61149d565b73ffffffffffffffffffffffffffffffffffffffff16145b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c906146f5565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006112f3612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806113875750611351612090565b73ffffffffffffffffffffffffffffffffffffffff1661136f61149d565b73ffffffffffffffffffffffffffffffffffffffff16145b6113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd906146f5565b60405180910390fd5b620186a060016113d4610b80565b6113de9190614a1e565b6113e891906149ed565b82101561142a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611421906146d5565b60405180910390fd5b6103e86005611437610b80565b6114419190614a1e565b61144b91906149ed565b82111561148d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611484906146b5565b60405180910390fd5b81600f8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114d690614b46565b80601f016020809104026020016040519081016040528092919081815260200182805461150290614b46565b801561154f5780601f106115245761010080835404028352916020019161154f565b820191906000526020600020905b81548152906001019060200180831161153257829003601f168201915b5050505050905090565b600080611564612090565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190614835565b60405180910390fd5b6116378286868403612098565b60019250505092915050565b60008061164e612090565b905061165b818585612305565b600191505092915050565b61166e612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061170257506116cc612090565b73ffffffffffffffffffffffffffffffffffffffff166116ea61149d565b73ffffffffffffffffffffffffffffffffffffffff16145b611741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611738906146f5565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b611766612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806117fa57506117c4612090565b73ffffffffffffffffffffffffffffffffffffffff166117e261149d565b73ffffffffffffffffffffffffffffffffffffffff16145b611839576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611830906146f5565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6118a8612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061193c5750611906612090565b73ffffffffffffffffffffffffffffffffffffffff1661192461149d565b73ffffffffffffffffffffffffffffffffffffffff16145b61197b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611972906146f5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e357600080fd5b505afa1580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190613a65565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9f57600080fd5b505afa158015611ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad79190613a65565b6040518363ffffffff1660e01b8152600401611af492919061454e565b602060405180830381600087803b158015611b0e57600080fd5b505af1158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b469190613a65565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611cae30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ca9610b80565b612098565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730846064611cf9610b80565b611d0391906149ed565b611d0d9190614a1e565b600080611d1861149d565b426040518863ffffffff1660e01b8152600401611d3a96959493929190614577565b6060604051808303818588803b158015611d5357600080fd5b505af1158015611d67573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d8c9190613caf565b505050611da2824361226390919063ffffffff16565b600a819055506001601060026101000a81548160ff0219169083151502179055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611eac612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611f405750611f0a612090565b73ffffffffffffffffffffffffffffffffffffffff16611f2861149d565b73ffffffffffffffffffffffffffffffffffffffff16145b611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f76906146f5565b60405180910390fd5b611f90611f8b30610ea5565b613118565b565b611f9a612090565b73ffffffffffffffffffffffffffffffffffffffff16611fb861149d565b73ffffffffffffffffffffffffffffffffffffffff161461200e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200590614755565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561207e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207590614635565b60405180910390fd5b61208781613052565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ff906147d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90614655565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122569190614855565b60405180910390a3505050565b600081836122719190614997565b905092915050565b60006122858484611e1d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122ff57818110156122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890614675565b60405180910390fd5b6122fe8484848403612098565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c90614795565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc90614615565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612469906147b5565b60405180910390fd5b600081141561248c57612487838360006133dc565b61304d565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125305750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561259757600060135461254e60648461365d90919063ffffffff16565b6125589190614a1e565b905061258784600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612305565b80826125939190614a78565b9150505b601060009054906101000a900460ff1615612caa576125b461149d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561262257506125f261149d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561265b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612695575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126ae5750600960009054906101000a900460ff16155b15612ca957601060029054906101000a900460ff166127a857601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127685750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e90614735565b60405180910390fd5b5b43600a541061280a576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61281261149d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561289b5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128f55750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129c05743601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290614715565b60405180910390fd5b43601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a635750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0a57600d54811115612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa4906147f5565b60405180910390fd5b600e54612ab983610ea5565b82612ac49190614997565b1115612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90614815565b60405180910390fd5b612ca8565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bad5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bfc57600d54811115612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee90614775565b60405180910390fd5b612ca7565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ca657600e54612c5983610ea5565b82612c649190614997565b1115612ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9c90614815565b60405180910390fd5b5b5b5b5b5b600960009054906101000a900460ff16158015612d115750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d675750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dbd5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e01576001600960006101000a81548160ff021916908315150217905550612de5613673565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601060019054906101000a900460ff1680612e7a5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612ece5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f795750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f785750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b15612f8357600090505b6000811561303f57612fb36064612fa5601654866137f890919063ffffffff16565b61365d90919063ffffffff16565b905060165460125482612fc69190614a1e565b612fd091906149ed565b60156000828254612fe19190614997565b9250508190555060165460115482612ff99190614a1e565b61300391906149ed565b601460008282546130149190614997565b9250508190555060008111156130305761302f8530836133dc565b5b808361303c9190614a78565b92505b61304a8585856133dc565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff81111561315b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131895781602001602082028036833780820191505090505b50905030816000815181106131c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561326957600080fd5b505afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a19190613a65565b816001815181106132db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061334230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612098565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133a6959493929190614870565b600060405180830381600087803b1580156133c057600080fd5b505af11580156133d4573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561344c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344390614795565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b390614615565b60405180910390fd5b6134c783838361380e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561354d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354490614695565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135e09190614997565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136449190614855565b60405180910390a3613657848484613813565b50505050565b6000818361366b91906149ed565b905092915050565b600061367e30610ea5565b905060006014546015546136929190614997565b905060008214156136a45750506137f6565b600f548211156136b457600f5491505b6000600282601554856136c79190614a1e565b6136d191906149ed565b6136db91906149ed565b905060006136f2828561381890919063ffffffff16565b9050600047905061370282613118565b6000613717824761381890919063ffffffff16565b9050600061374286613734601454856137f890919063ffffffff16565b61365d90919063ffffffff16565b9050600081836137529190614a78565b905060006014819055506000601581905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156137cc573d6000803e3d6000fd5b506000861180156137dd5750600081115b156137ed576137ec868261382e565b5b50505050505050505b565b600081836138069190614a1e565b905092915050565b505050565b505050565b600081836138269190614a78565b905092915050565b61385b30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612098565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016138e496959493929190614577565b6060604051808303818588803b1580156138fd57600080fd5b505af1158015613911573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139369190613caf565b5050505050565b600061395061394b84614916565b6148e5565b9050808382526020820190508285602086028201111561396f57600080fd5b60005b8581101561399f578161398588826139a9565b845260208401935060208301925050600181019050613972565b5050509392505050565b6000813590506139b881614c8e565b92915050565b6000815190506139cd81614c8e565b92915050565b600082601f8301126139e457600080fd5b81356139f484826020860161393d565b91505092915050565b600081359050613a0c81614ca5565b92915050565b600081359050613a2181614cbc565b92915050565b600081519050613a3681614cbc565b92915050565b600060208284031215613a4e57600080fd5b6000613a5c848285016139a9565b91505092915050565b600060208284031215613a7757600080fd5b6000613a85848285016139be565b91505092915050565b60008060408385031215613aa157600080fd5b6000613aaf858286016139a9565b9250506020613ac0858286016139a9565b9150509250929050565b600080600060608486031215613adf57600080fd5b6000613aed868287016139a9565b9350506020613afe868287016139a9565b9250506040613b0f86828701613a12565b9150509250925092565b60008060408385031215613b2c57600080fd5b6000613b3a858286016139a9565b9250506020613b4b858286016139fd565b9150509250929050565b60008060408385031215613b6857600080fd5b6000613b76858286016139a9565b9250506020613b8785828601613a12565b9150509250929050565b600060208284031215613ba357600080fd5b600082013567ffffffffffffffff811115613bbd57600080fd5b613bc9848285016139d3565b91505092915050565b600060208284031215613be457600080fd5b6000613bf2848285016139fd565b91505092915050565b600060208284031215613c0d57600080fd5b6000613c1b84828501613a12565b91505092915050565b60008060408385031215613c3757600080fd5b6000613c4585828601613a12565b9250506020613c5685828601613a12565b9150509250929050565b600080600060608486031215613c7557600080fd5b6000613c8386828701613a12565b9350506020613c9486828701613a12565b9250506040613ca586828701613a12565b9150509250925092565b600080600060608486031215613cc457600080fd5b6000613cd286828701613a27565b9350506020613ce386828701613a27565b9250506040613cf486828701613a27565b9150509250925092565b6000613d0a8383613d16565b60208301905092915050565b613d1f81614aac565b82525050565b613d2e81614aac565b82525050565b6000613d3f82614952565b613d498185614975565b9350613d5483614942565b8060005b83811015613d85578151613d6c8882613cfe565b9750613d7783614968565b925050600181019050613d58565b5085935050505092915050565b613d9b81614abe565b82525050565b613daa81614b01565b82525050565b6000613dbb8261495d565b613dc58185614986565b9350613dd5818560208601614b13565b613dde81614c7d565b840191505092915050565b6000613df6602383614986565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e5c602683614986565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ec2602283614986565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f28601d83614986565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000613f68602683614986565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fce603783614986565b91507f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008301527f7468616e20302e352520746f74616c20737570706c792e0000000000000000006020830152604082019050919050565b6000614034603883614986565b91507f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008301527f68616e20302e3030312520746f74616c20737570706c792e00000000000000006020830152604082019050919050565b600061409a603383614986565b91507f43616c6c6572206973206e6f7420746865205f66756e64696e6757616c6c657460008301527f2061646472657373206e6f72206f776e65722e000000000000000000000000006020830152604082019050919050565b6000614100604983614986565b91507f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008301527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208301527f20616c6c6f7765642e00000000000000000000000000000000000000000000006040830152606082019050919050565b600061418c602283614986565b91507f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008301527f652e0000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141f2602083614986565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614232604283614986565b91507f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008301527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208301527f742e0000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006142be602583614986565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614324603e83614986565b91507f596f752068617665206265656e20626c61636b6c69737465642c20796f75206160008301527f726520756e61626c6520746f207472616e73666572206f7220737761702e00006020830152604082019050919050565b600061438a602483614986565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143f0604183614986565b91507f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008301527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208301527f2e000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600061447c601f83614986565b91507f5f7472616e736665723a3a204d61782077616c6c6574206578636565646564006000830152602082019050919050565b60006144bc602583614986565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61451e81614aea565b82525050565b61452d81614af4565b82525050565b60006020820190506145486000830184613d25565b92915050565b60006040820190506145636000830185613d25565b6145706020830184613d25565b9392505050565b600060c08201905061458c6000830189613d25565b6145996020830188614515565b6145a66040830187613da1565b6145b36060830186613da1565b6145c06080830185613d25565b6145cd60a0830184614515565b979650505050505050565b60006020820190506145ed6000830184613d92565b92915050565b6000602082019050818103600083015261460d8184613db0565b905092915050565b6000602082019050818103600083015261462e81613de9565b9050919050565b6000602082019050818103600083015261464e81613e4f565b9050919050565b6000602082019050818103600083015261466e81613eb5565b9050919050565b6000602082019050818103600083015261468e81613f1b565b9050919050565b600060208201905081810360008301526146ae81613f5b565b9050919050565b600060208201905081810360008301526146ce81613fc1565b9050919050565b600060208201905081810360008301526146ee81614027565b9050919050565b6000602082019050818103600083015261470e8161408d565b9050919050565b6000602082019050818103600083015261472e816140f3565b9050919050565b6000602082019050818103600083015261474e8161417f565b9050919050565b6000602082019050818103600083015261476e816141e5565b9050919050565b6000602082019050818103600083015261478e81614225565b9050919050565b600060208201905081810360008301526147ae816142b1565b9050919050565b600060208201905081810360008301526147ce81614317565b9050919050565b600060208201905081810360008301526147ee8161437d565b9050919050565b6000602082019050818103600083015261480e816143e3565b9050919050565b6000602082019050818103600083015261482e8161446f565b9050919050565b6000602082019050818103600083015261484e816144af565b9050919050565b600060208201905061486a6000830184614515565b92915050565b600060a0820190506148856000830188614515565b6148926020830187613da1565b81810360408301526148a48186613d34565b90506148b36060830185613d25565b6148c06080830184614515565b9695505050505050565b60006020820190506148df6000830184614524565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561490c5761490b614c4e565b5b8060405250919050565b600067ffffffffffffffff82111561493157614930614c4e565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006149a282614aea565b91506149ad83614aea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149e2576149e1614bc1565b5b828201905092915050565b60006149f882614aea565b9150614a0383614aea565b925082614a1357614a12614bf0565b5b828204905092915050565b6000614a2982614aea565b9150614a3483614aea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a6d57614a6c614bc1565b5b828202905092915050565b6000614a8382614aea565b9150614a8e83614aea565b925082821015614aa157614aa0614bc1565b5b828203905092915050565b6000614ab782614aca565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b0c82614aea565b9050919050565b60005b83811015614b31578082015181840152602081019050614b16565b83811115614b40576000848401525b50505050565b60006002820490506001821680614b5e57607f821691505b60208210811415614b7257614b71614c1f565b5b50919050565b6000614b8382614aea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614bb657614bb5614bc1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614c9781614aac565b8114614ca257600080fd5b50565b614cae81614abe565b8114614cb957600080fd5b50565b614cc581614aea565b8114614cd057600080fd5b5056fea2646970667358221220ad835ce545e9b40e42dab7c44a750bb12edc4966f95693dc3a5faf5d21d0e47864736f6c63430008000033

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063751039fc11610118578063c0246668116100a0578063dbac26e91161006f578063dbac26e914610764578063dd62ed3e146107a1578063df778d26146107de578063f2fde38b146107f5578063f8b45b051461081e5761020f565b8063c0246668146106bc578063c8c8ebe4146106e5578063cef8513914610710578063d691a7341461073b5761020f565b80638da5cb5b116100e75780638da5cb5b146105c357806395d89b41146105ee578063a457c2d714610619578063a9059cbb14610656578063bb5e048a146106935761020f565b8063751039fc1461051d5780637911ef9d146105345780637cb332bb1461055d5780638baa63b2146105865761020f565b806323b872dd1161019b5780634fbee1931161016a5780634fbee1931461043657806365cffb1e1461047357806370a082311461049e57806370d5ae05146104db578063715018a6146105065761020f565b806323b872dd14610366578063313ce567146103a357806339509351146103ce5780634a62bb651461040b5761020f565b806313114a9d116101d757806313114a9d146102d057806318160ddd146102fb5780632100942314610326578063224290851461033d5761020f565b8063041f173f1461021457806306fdde031461023d578063095ea7b31461026857806311704f52146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613b91565b610849565b005b34801561024957600080fd5b50610252610ab2565b60405161025f91906145f3565b60405180910390f35b34801561027457600080fd5b5061028f600480360381019061028a9190613b55565b610b44565b60405161029c91906145d8565b60405180910390f35b3480156102b157600080fd5b506102ba610b67565b6040516102c791906145d8565b60405180910390f35b3480156102dc57600080fd5b506102e5610b7a565b6040516102f29190614855565b60405180910390f35b34801561030757600080fd5b50610310610b80565b60405161031d9190614855565b60405180910390f35b34801561033257600080fd5b5061033b610b8a565b005b34801561034957600080fd5b50610364600480360381019061035f9190613c60565b610bf5565b005b34801561037257600080fd5b5061038d60048036038101906103889190613aca565b610d47565b60405161039a91906145d8565b60405180910390f35b3480156103af57600080fd5b506103b8610d76565b6040516103c591906148ca565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613b55565b610d7f565b60405161040291906145d8565b60405180910390f35b34801561041757600080fd5b50610420610e29565b60405161042d91906145d8565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190613a3c565b610e3c565b60405161046a91906145d8565b60405180910390f35b34801561047f57600080fd5b50610488610e92565b60405161049591906145d8565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613a3c565b610ea5565b6040516104d29190614855565b60405180910390f35b3480156104e757600080fd5b506104f0610eed565b6040516104fd9190614533565b60405180910390f35b34801561051257600080fd5b5061051b610f13565b005b34801561052957600080fd5b50610532610f9b565b005b34801561054057600080fd5b5061055b60048036038101906105569190613b91565b611093565b005b34801561056957600080fd5b50610584600480360381019061057f9190613a3c565b6111ca565b005b34801561059257600080fd5b506105ad60048036038101906105a89190613bfb565b6112e9565b6040516105ba91906145d8565b60405180910390f35b3480156105cf57600080fd5b506105d861149d565b6040516105e59190614533565b60405180910390f35b3480156105fa57600080fd5b506106036114c7565b60405161061091906145f3565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190613b55565b611559565b60405161064d91906145d8565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190613b55565b611643565b60405161068a91906145d8565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613bd2565b611666565b005b3480156106c857600080fd5b506106e360048036038101906106de9190613b19565b61175e565b005b3480156106f157600080fd5b506106fa611894565b6040516107079190614855565b60405180910390f35b34801561071c57600080fd5b5061072561189a565b6040516107329190614855565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613c24565b6118a0565b005b34801561077057600080fd5b5061078b60048036038101906107869190613a3c565b611dc7565b60405161079891906145d8565b60405180910390f35b3480156107ad57600080fd5b506107c860048036038101906107c39190613a8e565b611e1d565b6040516107d59190614855565b60405180910390f35b3480156107ea57600080fd5b506107f3611ea4565b005b34801561080157600080fd5b5061081c60048036038101906108179190613a3c565b611f92565b005b34801561082a57600080fd5b5061083361208a565b6040516108409190614855565b60405180910390f35b610851612090565b73ffffffffffffffffffffffffffffffffffffffff1661086f61149d565b73ffffffffffffffffffffffffffffffffffffffff16146108c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bc90614755565b60405180910390fd5b60005b8151811015610aae57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610943577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156109fd5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168282815181106109dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610a9b57600160086000848481518110610a41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610aa690614b78565b9150506108c8565b5050565b606060038054610ac190614b46565b80601f0160208091040260200160405190810160405280929190818152602001828054610aed90614b46565b8015610b3a5780601f10610b0f57610100808354040283529160200191610b3a565b820191906000526020600020905b815481529060010190602001808311610b1d57829003601f168201915b5050505050905090565b600080610b4f612090565b9050610b5c818585612098565b600191505092915050565b601060029054906101000a900460ff1681565b60165481565b6000600254905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bf2573d6000803e3d6000fd5b50565b610bfd612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610c915750610c5b612090565b73ffffffffffffffffffffffffffffffffffffffff16610c7961149d565b73ffffffffffffffffffffffffffffffffffffffff16145b610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc7906146f5565b60405180910390fd5b600a610cf782610ce9858761226390919063ffffffff16565b61226390919063ffffffff16565b1115610d0257600080fd5b826011819055508160128190555080601381905550610d3c81610d2e848661226390919063ffffffff16565b61226390919063ffffffff16565b601681905550505050565b600080610d52612090565b9050610d5f858285612279565b610d6a858585612305565b60019150509392505050565b60006012905090565b600080610d8a612090565b9050610e1e818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e199190614997565b612098565b600191505092915050565b601060009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601060019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f1b612090565b73ffffffffffffffffffffffffffffffffffffffff16610f3961149d565b73ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690614755565b60405180910390fd5b610f996000613052565b565b610fa3612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806110375750611001612090565b73ffffffffffffffffffffffffffffffffffffffff1661101f61149d565b73ffffffffffffffffffffffffffffffffffffffff16145b611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d906146f5565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b61109b612090565b73ffffffffffffffffffffffffffffffffffffffff166110b961149d565b73ffffffffffffffffffffffffffffffffffffffff161461110f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110690614755565b60405180910390fd5b60005b81518110156111c65760006008600084848151811061115a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111be90614b78565b915050611112565b5050565b6111d2612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112665750611230612090565b73ffffffffffffffffffffffffffffffffffffffff1661124e61149d565b73ffffffffffffffffffffffffffffffffffffffff16145b6112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c906146f5565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006112f3612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806113875750611351612090565b73ffffffffffffffffffffffffffffffffffffffff1661136f61149d565b73ffffffffffffffffffffffffffffffffffffffff16145b6113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd906146f5565b60405180910390fd5b620186a060016113d4610b80565b6113de9190614a1e565b6113e891906149ed565b82101561142a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611421906146d5565b60405180910390fd5b6103e86005611437610b80565b6114419190614a1e565b61144b91906149ed565b82111561148d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611484906146b5565b60405180910390fd5b81600f8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114d690614b46565b80601f016020809104026020016040519081016040528092919081815260200182805461150290614b46565b801561154f5780601f106115245761010080835404028352916020019161154f565b820191906000526020600020905b81548152906001019060200180831161153257829003601f168201915b5050505050905090565b600080611564612090565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190614835565b60405180910390fd5b6116378286868403612098565b60019250505092915050565b60008061164e612090565b905061165b818585612305565b600191505092915050565b61166e612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061170257506116cc612090565b73ffffffffffffffffffffffffffffffffffffffff166116ea61149d565b73ffffffffffffffffffffffffffffffffffffffff16145b611741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611738906146f5565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b611766612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806117fa57506117c4612090565b73ffffffffffffffffffffffffffffffffffffffff166117e261149d565b73ffffffffffffffffffffffffffffffffffffffff16145b611839576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611830906146f5565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b600f5481565b6118a8612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061193c5750611906612090565b73ffffffffffffffffffffffffffffffffffffffff1661192461149d565b73ffffffffffffffffffffffffffffffffffffffff16145b61197b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611972906146f5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e357600080fd5b505afa1580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190613a65565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9f57600080fd5b505afa158015611ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad79190613a65565b6040518363ffffffff1660e01b8152600401611af492919061454e565b602060405180830381600087803b158015611b0e57600080fd5b505af1158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b469190613a65565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160186000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611cae30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ca9610b80565b612098565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730846064611cf9610b80565b611d0391906149ed565b611d0d9190614a1e565b600080611d1861149d565b426040518863ffffffff1660e01b8152600401611d3a96959493929190614577565b6060604051808303818588803b158015611d5357600080fd5b505af1158015611d67573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d8c9190613caf565b505050611da2824361226390919063ffffffff16565b600a819055506001601060026101000a81548160ff0219169083151502179055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611eac612090565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611f405750611f0a612090565b73ffffffffffffffffffffffffffffffffffffffff16611f2861149d565b73ffffffffffffffffffffffffffffffffffffffff16145b611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f76906146f5565b60405180910390fd5b611f90611f8b30610ea5565b613118565b565b611f9a612090565b73ffffffffffffffffffffffffffffffffffffffff16611fb861149d565b73ffffffffffffffffffffffffffffffffffffffff161461200e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200590614755565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561207e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207590614635565b60405180910390fd5b61208781613052565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ff906147d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90614655565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122569190614855565b60405180910390a3505050565b600081836122719190614997565b905092915050565b60006122858484611e1d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122ff57818110156122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e890614675565b60405180910390fd5b6122fe8484848403612098565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c90614795565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc90614615565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612469906147b5565b60405180910390fd5b600081141561248c57612487838360006133dc565b61304d565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125305750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561259757600060135461254e60648461365d90919063ffffffff16565b6125589190614a1e565b905061258784600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612305565b80826125939190614a78565b9150505b601060009054906101000a900460ff1615612caa576125b461149d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561262257506125f261149d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561265b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612695575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126ae5750600960009054906101000a900460ff16155b15612ca957601060029054906101000a900460ff166127a857601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127685750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279e90614735565b60405180910390fd5b5b43600a541061280a576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61281261149d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561289b5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128f55750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129c05743601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290614715565b60405180910390fd5b43601a60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a635750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0a57600d54811115612aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa4906147f5565b60405180910390fd5b600e54612ab983610ea5565b82612ac49190614997565b1115612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc90614815565b60405180910390fd5b612ca8565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bad5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bfc57600d54811115612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee90614775565b60405180910390fd5b612ca7565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ca657600e54612c5983610ea5565b82612c649190614997565b1115612ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9c90614815565b60405180910390fd5b5b5b5b5b5b600960009054906101000a900460ff16158015612d115750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d675750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dbd5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e01576001600960006101000a81548160ff021916908315150217905550612de5613673565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601060019054906101000a900460ff1680612e7a5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612ece5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f795750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f785750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b15612f8357600090505b6000811561303f57612fb36064612fa5601654866137f890919063ffffffff16565b61365d90919063ffffffff16565b905060165460125482612fc69190614a1e565b612fd091906149ed565b60156000828254612fe19190614997565b9250508190555060165460115482612ff99190614a1e565b61300391906149ed565b601460008282546130149190614997565b9250508190555060008111156130305761302f8530836133dc565b5b808361303c9190614a78565b92505b61304a8585856133dc565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff81111561315b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156131895781602001602082028036833780820191505090505b50905030816000815181106131c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561326957600080fd5b505afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a19190613a65565b816001815181106132db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061334230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612098565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133a6959493929190614870565b600060405180830381600087803b1580156133c057600080fd5b505af11580156133d4573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561344c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344390614795565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b390614615565b60405180910390fd5b6134c783838361380e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561354d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354490614695565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135e09190614997565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136449190614855565b60405180910390a3613657848484613813565b50505050565b6000818361366b91906149ed565b905092915050565b600061367e30610ea5565b905060006014546015546136929190614997565b905060008214156136a45750506137f6565b600f548211156136b457600f5491505b6000600282601554856136c79190614a1e565b6136d191906149ed565b6136db91906149ed565b905060006136f2828561381890919063ffffffff16565b9050600047905061370282613118565b6000613717824761381890919063ffffffff16565b9050600061374286613734601454856137f890919063ffffffff16565b61365d90919063ffffffff16565b9050600081836137529190614a78565b905060006014819055506000601581905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156137cc573d6000803e3d6000fd5b506000861180156137dd5750600081115b156137ed576137ec868261382e565b5b50505050505050505b565b600081836138069190614a1e565b905092915050565b505050565b505050565b600081836138269190614a78565b905092915050565b61385b30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612098565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016138e496959493929190614577565b6060604051808303818588803b1580156138fd57600080fd5b505af1158015613911573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139369190613caf565b5050505050565b600061395061394b84614916565b6148e5565b9050808382526020820190508285602086028201111561396f57600080fd5b60005b8581101561399f578161398588826139a9565b845260208401935060208301925050600181019050613972565b5050509392505050565b6000813590506139b881614c8e565b92915050565b6000815190506139cd81614c8e565b92915050565b600082601f8301126139e457600080fd5b81356139f484826020860161393d565b91505092915050565b600081359050613a0c81614ca5565b92915050565b600081359050613a2181614cbc565b92915050565b600081519050613a3681614cbc565b92915050565b600060208284031215613a4e57600080fd5b6000613a5c848285016139a9565b91505092915050565b600060208284031215613a7757600080fd5b6000613a85848285016139be565b91505092915050565b60008060408385031215613aa157600080fd5b6000613aaf858286016139a9565b9250506020613ac0858286016139a9565b9150509250929050565b600080600060608486031215613adf57600080fd5b6000613aed868287016139a9565b9350506020613afe868287016139a9565b9250506040613b0f86828701613a12565b9150509250925092565b60008060408385031215613b2c57600080fd5b6000613b3a858286016139a9565b9250506020613b4b858286016139fd565b9150509250929050565b60008060408385031215613b6857600080fd5b6000613b76858286016139a9565b9250506020613b8785828601613a12565b9150509250929050565b600060208284031215613ba357600080fd5b600082013567ffffffffffffffff811115613bbd57600080fd5b613bc9848285016139d3565b91505092915050565b600060208284031215613be457600080fd5b6000613bf2848285016139fd565b91505092915050565b600060208284031215613c0d57600080fd5b6000613c1b84828501613a12565b91505092915050565b60008060408385031215613c3757600080fd5b6000613c4585828601613a12565b9250506020613c5685828601613a12565b9150509250929050565b600080600060608486031215613c7557600080fd5b6000613c8386828701613a12565b9350506020613c9486828701613a12565b9250506040613ca586828701613a12565b9150509250925092565b600080600060608486031215613cc457600080fd5b6000613cd286828701613a27565b9350506020613ce386828701613a27565b9250506040613cf486828701613a27565b9150509250925092565b6000613d0a8383613d16565b60208301905092915050565b613d1f81614aac565b82525050565b613d2e81614aac565b82525050565b6000613d3f82614952565b613d498185614975565b9350613d5483614942565b8060005b83811015613d85578151613d6c8882613cfe565b9750613d7783614968565b925050600181019050613d58565b5085935050505092915050565b613d9b81614abe565b82525050565b613daa81614b01565b82525050565b6000613dbb8261495d565b613dc58185614986565b9350613dd5818560208601614b13565b613dde81614c7d565b840191505092915050565b6000613df6602383614986565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e5c602683614986565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ec2602283614986565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f28601d83614986565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000613f68602683614986565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fce603783614986565b91507f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008301527f7468616e20302e352520746f74616c20737570706c792e0000000000000000006020830152604082019050919050565b6000614034603883614986565b91507f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008301527f68616e20302e3030312520746f74616c20737570706c792e00000000000000006020830152604082019050919050565b600061409a603383614986565b91507f43616c6c6572206973206e6f7420746865205f66756e64696e6757616c6c657460008301527f2061646472657373206e6f72206f776e65722e000000000000000000000000006020830152604082019050919050565b6000614100604983614986565b91507f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008301527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208301527f20616c6c6f7765642e00000000000000000000000000000000000000000000006040830152606082019050919050565b600061418c602283614986565b91507f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008301527f652e0000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141f2602083614986565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614232604283614986565b91507f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008301527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208301527f742e0000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006142be602583614986565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614324603e83614986565b91507f596f752068617665206265656e20626c61636b6c69737465642c20796f75206160008301527f726520756e61626c6520746f207472616e73666572206f7220737761702e00006020830152604082019050919050565b600061438a602483614986565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143f0604183614986565b91507f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008301527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208301527f2e000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600061447c601f83614986565b91507f5f7472616e736665723a3a204d61782077616c6c6574206578636565646564006000830152602082019050919050565b60006144bc602583614986565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61451e81614aea565b82525050565b61452d81614af4565b82525050565b60006020820190506145486000830184613d25565b92915050565b60006040820190506145636000830185613d25565b6145706020830184613d25565b9392505050565b600060c08201905061458c6000830189613d25565b6145996020830188614515565b6145a66040830187613da1565b6145b36060830186613da1565b6145c06080830185613d25565b6145cd60a0830184614515565b979650505050505050565b60006020820190506145ed6000830184613d92565b92915050565b6000602082019050818103600083015261460d8184613db0565b905092915050565b6000602082019050818103600083015261462e81613de9565b9050919050565b6000602082019050818103600083015261464e81613e4f565b9050919050565b6000602082019050818103600083015261466e81613eb5565b9050919050565b6000602082019050818103600083015261468e81613f1b565b9050919050565b600060208201905081810360008301526146ae81613f5b565b9050919050565b600060208201905081810360008301526146ce81613fc1565b9050919050565b600060208201905081810360008301526146ee81614027565b9050919050565b6000602082019050818103600083015261470e8161408d565b9050919050565b6000602082019050818103600083015261472e816140f3565b9050919050565b6000602082019050818103600083015261474e8161417f565b9050919050565b6000602082019050818103600083015261476e816141e5565b9050919050565b6000602082019050818103600083015261478e81614225565b9050919050565b600060208201905081810360008301526147ae816142b1565b9050919050565b600060208201905081810360008301526147ce81614317565b9050919050565b600060208201905081810360008301526147ee8161437d565b9050919050565b6000602082019050818103600083015261480e816143e3565b9050919050565b6000602082019050818103600083015261482e8161446f565b9050919050565b6000602082019050818103600083015261484e816144af565b9050919050565b600060208201905061486a6000830184614515565b92915050565b600060a0820190506148856000830188614515565b6148926020830187613da1565b81810360408301526148a48186613d34565b90506148b36060830185613d25565b6148c06080830184614515565b9695505050505050565b60006020820190506148df6000830184614524565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561490c5761490b614c4e565b5b8060405250919050565b600067ffffffffffffffff82111561493157614930614c4e565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006149a282614aea565b91506149ad83614aea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149e2576149e1614bc1565b5b828201905092915050565b60006149f882614aea565b9150614a0383614aea565b925082614a1357614a12614bf0565b5b828204905092915050565b6000614a2982614aea565b9150614a3483614aea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a6d57614a6c614bc1565b5b828202905092915050565b6000614a8382614aea565b9150614a8e83614aea565b925082821015614aa157614aa0614bc1565b5b828203905092915050565b6000614ab782614aca565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614b0c82614aea565b9050919050565b60005b83811015614b31578082015181840152602081019050614b16565b83811115614b40576000848401525b50505050565b60006002820490506001821680614b5e57607f821691505b60208210811415614b7257614b71614c1f565b5b50919050565b6000614b8382614aea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614bb657614bb5614bc1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614c9781614aac565b8114614ca257600080fd5b50565b614cae81614abe565b8114614cb957600080fd5b50565b614cc581614aea565b8114614cd057600080fd5b5056fea2646970667358221220ad835ce545e9b40e42dab7c44a750bb12edc4966f95693dc3a5faf5d21d0e47864736f6c63430008000033

Deployed Bytecode Sourcemap

18284:12658:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24188:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1717:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2649:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18901:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19138:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2038:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30589:116;;;;;;;;;;;;;:::i;:::-;;22555:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2858:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1937:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3161:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18822:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23938:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18862:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2154:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18603:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15079:103;;;;;;;;;;;;;:::i;:::-;;22185:86;;;;;;;;;;;;;:::i;:::-;;24559:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23156:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23440:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14856:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1825:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3409:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2289:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22974:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22337:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18696:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18771:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21341:762;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24830:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2490:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30798:104;;;;;;;;;;;;;:::i;:::-;;15190:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18738:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24188:301;15002:12;:10;:12::i;:::-;14991:23;;:7;:5;:7::i;:::-;:23;;;14983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24268:6:::1;24263:219;24284:9;:16;24280:1;:20;24263:219;;;24342:13;;;;;;;;;;;24326:29;;:9;24336:1;24326:12;;;;;;;;;;;;;;;;;;;;;;:29;;;;:73;;;;;24383:15;;;;;;;;;;;24359:40;;:9;24369:1;24359:12;;;;;;;;;;;;;;;;;;;;;;:40;;;;24326:73;24322:149;;;24451:4;24420:14;:28;24435:9;24445:1;24435:12;;;;;;;;;;;;;;;;;;;;;;24420:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24322:149;24302:3;;;;;:::i;:::-;;;;24263:219;;;;24188:301:::0;:::o;1717:100::-;1771:13;1804:5;1797:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1717:100;:::o;2649:201::-;2732:4;2749:13;2765:12;:10;:12::i;:::-;2749:28;;2788:32;2797:5;2804:7;2813:6;2788:8;:32::i;:::-;2838:4;2831:11;;;2649:201;;;;:::o;18901:31::-;;;;;;;;;;;;;:::o;19138:65::-;;;;:::o;2038:108::-;2099:7;2126:12;;2119:19;;2038:108;:::o;30589:116::-;30650:14;;;;;;;;;;;30642:32;;:55;30675:21;30642:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30589:116::o;22555:346::-;19893:12;:10;:12::i;:::-;19875:30;;:14;;;;;;;;;;;:30;;;:57;;;;19920:12;:10;:12::i;:::-;19909:23;;:7;:5;:7::i;:::-;:23;;;19875:57;19867:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22719:2:::1;22674:41;22707:7;22674:28;22689:12;22674:10;:14;;:28;;;;:::i;:::-;:32;;:41;;;;:::i;:::-;:47;;22666:56;;;::::0;::::1;;22749:10;22735:11;:24;;;;22786:12;22770:13;:28;;;;22820:7;22809:8;:18;;;;22852:41;22885:7;22852:28;22867:12;22852:10;:14;;:28;;;;:::i;:::-;:32;;:41;;;;:::i;:::-;22840:9;:53;;;;22555:346:::0;;;:::o;2858:295::-;2989:4;3006:15;3024:12;:10;:12::i;:::-;3006:30;;3047:38;3063:4;3069:7;3078:6;3047:15;:38::i;:::-;3096:27;3106:4;3112:2;3116:6;3096:9;:27::i;:::-;3141:4;3134:11;;;2858:295;;;;;:::o;1937:93::-;1995:5;2020:2;2013:9;;1937:93;:::o;3161:240::-;3249:4;3266:13;3282:12;:10;:12::i;:::-;3266:28;;3305:66;3314:5;3321:7;3360:10;3330:11;:18;3342:5;3330:18;;;;;;;;;;;;;;;:27;3349:7;3330:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;3305:8;:66::i;:::-;3389:4;3382:11;;;3161:240;;;;:::o;18822:33::-;;;;;;;;;;;;;:::o;23938:127::-;24005:4;24029:19;:28;24049:7;24029:28;;;;;;;;;;;;;;;;;;;;;;;;;24022:35;;23938:127;;;:::o;18862:32::-;;;;;;;;;;;;;:::o;2154:127::-;2228:7;2255:9;:18;2265:7;2255:18;;;;;;;;;;;;;;;;2248:25;;2154:127;;;:::o;18603:80::-;;;;;;;;;;;;;:::o;15079:103::-;15002:12;:10;:12::i;:::-;14991:23;;:7;:5;:7::i;:::-;:23;;;14983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15144:30:::1;15171:1;15144:18;:30::i;:::-;15079:103::o:0;22185:86::-;19893:12;:10;:12::i;:::-;19875:30;;:14;;;;;;;;;;;:30;;;:57;;;;19920:12;:10;:12::i;:::-;19909:23;;:7;:5;:7::i;:::-;:23;;;19875:57;19867:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22258:5:::1;22241:14;;:22;;;;;;;;;;;;;;;;;;22185:86::o:0;24559:195::-;15002:12;:10;:12::i;:::-;14991:23;;:7;:5;:7::i;:::-;:23;;;14983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24645:6:::1;24640:107;24661:9;:16;24657:1;:20;24640:107;;;24730:5;24699:14;:28;24714:9;24724:1;24714:12;;;;;;;;;;;;;;;;;;;;;;24699:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24679:3;;;;;:::i;:::-;;;;24640:107;;;;24559:195:::0;:::o;23156:111::-;19893:12;:10;:12::i;:::-;19875:30;;:14;;;;;;;;;;;:30;;;:57;;;;19920:12;:10;:12::i;:::-;19909:23;;:7;:5;:7::i;:::-;:23;;;19875:57;19867:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;23250:9:::1;23233:14;;:26;;;;;;;;;;;;;;;;;;23156:111:::0;:::o;23440:404::-;23527:4;19893:12;:10;:12::i;:::-;19875:30;;:14;;;;;;;;;;;:30;;;:57;;;;19920:12;:10;:12::i;:::-;19909:23;;:7;:5;:7::i;:::-;:23;;;19875:57;19867:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;23587:6:::1;23583:1;23567:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;23551:12;:42;;23543:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23708:4;23704:1;23688:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23672:12;:40;;23664:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;23804:12;23782:19;:34;;;;23833:4;23826:11;;23440:404:::0;;;:::o;14856:87::-;14902:7;14929:6;;;;;;;;;;;14922:13;;14856:87;:::o;1825:104::-;1881:13;1914:7;1907:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1825:104;:::o;3409:438::-;3502:4;3519:13;3535:12;:10;:12::i;:::-;3519:28;;3558:24;3585:11;:18;3597:5;3585:18;;;;;;;;;;;;;;;:27;3604:7;3585:27;;;;;;;;;;;;;;;;3558:54;;3651:15;3631:16;:35;;3623:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3744:60;3753:5;3760:7;3788:15;3769:16;:34;3744:8;:60::i;:::-;3835:4;3828:11;;;;3409:438;;;;:::o;2289:193::-;2368:4;2385:13;2401:12;:10;:12::i;:::-;2385:28;;2424;2434:5;2441:2;2445:6;2424:9;:28::i;:::-;2470:4;2463:11;;;2289:193;;;;:::o;22974:93::-;19893:12;:10;:12::i;:::-;19875:30;;:14;;;;;;;;;;;:30;;;:57;;;;19920:12;:10;:12::i;:::-;19909:23;;:7;:5;:7::i;:::-;:23;;;19875:57;19867:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;23054:5:::1;23039:12;;:20;;;;;;;;;;;;;;;;;;22974:93:::0;:::o;22337:134::-;19893:12;:10;:12::i;:::-;19875:30;;:14;;;;;;;;;;;:30;;;:57;;;;19920:12;:10;:12::i;:::-;19909:23;;:7;:5;:7::i;:::-;:23;;;19875:57;19867:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;22455:8:::1;22424:19;:28;22444:7;22424:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22337:134:::0;;:::o;18696:35::-;;;;:::o;18771:34::-;;;;:::o;21341:762::-;19893:12;:10;:12::i;:::-;19875:30;;:14;;;;;;;;;;;:30;;;:57;;;;19920:12;:10;:12::i;:::-;19909:23;;:7;:5;:7::i;:::-;:23;;;19875:57;19867:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;21472:15:::1;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21454:55;;;21518:4;21525:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21454:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21438:13;;:110;;;;;;;;;;;;;;;;;;21617:4;21559:31;:55;21599:13;;;;;;;;;;;21559:55;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;21685:4;21632:26;:50;21667:13;;;;;;;;;;;21632:50;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;21702:64;21719:4;21734:15;;;;;;;;;;;21752:13;:11;:13::i;:::-;21702:8;:64::i;:::-;21777:15;;;;;;;;;;;:31;;;21816:21;21862:4;21904:17;21898:3;21882:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:39;;;;:::i;:::-;21936:1;21952::::0;21968:7:::1;:5;:7::i;:::-;21990:15;21777:239;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22042:24;22059:6;22042:12;:16;;:24;;;;:::i;:::-;22029:10;:37;;;;22091:4;22077:11;;:18;;;;;;;;;;;;;;;;;;21341:762:::0;;:::o;24830:108::-;24886:4;24910:14;:20;24925:4;24910:20;;;;;;;;;;;;;;;;;;;;;;;;;24903:27;;24830:108;;;:::o;2490:151::-;2579:7;2606:11;:18;2618:5;2606:18;;;;;;;;;;;;;;;:27;2625:7;2606:27;;;;;;;;;;;;;;;;2599:34;;2490:151;;;;:::o;30798:104::-;19893:12;:10;:12::i;:::-;19875:30;;:14;;;;;;;;;;;:30;;;:57;;;;19920:12;:10;:12::i;:::-;19909:23;;:7;:5;:7::i;:::-;:23;;;19875:57;19867:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;30851:43:::1;30869:24;30887:4;30869:9;:24::i;:::-;30851:17;:43::i;:::-;30798:104::o:0;15190:201::-;15002:12;:10;:12::i;:::-;14991:23;;:7;:5;:7::i;:::-;:23;;;14983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15299:1:::1;15279:22;;:8;:22;;;;15271:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15355:28;15374:8;15355:18;:28::i;:::-;15190:201:::0;:::o;18738:24::-;;;;:::o;179:98::-;232:7;259:10;252:17;;179:98;:::o;5540:380::-;5693:1;5676:19;;:5;:19;;;;5668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5774:1;5755:21;;:7;:21;;;;5747:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5858:6;5828:11;:18;5840:5;5828:18;;;;;;;;;;;;;;;:27;5847:7;5828:27;;;;;;;;;;;;;;;:36;;;;5896:7;5880:32;;5889:5;5880:32;;;5905:6;5880:32;;;;;;:::i;:::-;;;;;;;;5540:380;;;:::o;16970:98::-;17028:7;17059:1;17055;:5;;;;:::i;:::-;17048:12;;16970:98;;;;:::o;5928:453::-;6063:24;6090:25;6100:5;6107:7;6090:9;:25::i;:::-;6063:52;;6150:17;6130:16;:37;6126:248;;6212:6;6192:16;:26;;6184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6296:51;6305:5;6312:7;6340:6;6321:16;:25;6296:8;:51::i;:::-;6126:248;5928:453;;;;:::o;24946:3599::-;25094:1;25078:18;;:4;:18;;;;25070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25171:1;25157:16;;:2;:16;;;;25149:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25233:14;:20;25248:4;25233:20;;;;;;;;;;;;;;;;;;;;;;;;;25232:21;25224:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;25355:1;25345:6;:11;25341:93;;;25373:28;25389:4;25395:2;25399:1;25373:15;:28::i;:::-;25416:7;;25341:93;25468:19;:25;25488:4;25468:25;;;;;;;;;;;;;;;;;;;;;;;;;25467:26;:54;;;;;25498:19;:23;25518:2;25498:23;;;;;;;;;;;;;;;;;;;;;;;;;25497:24;25467:54;25463:224;;;25538:18;25577:8;;25559:15;25570:3;25559:6;:10;;:15;;;;:::i;:::-;:26;;;;:::i;:::-;25538:47;;25600:40;25610:4;25616:11;;;;;;;;;;;25629:10;25600:9;:40::i;:::-;25665:10;25655:20;;;;;:::i;:::-;;;25463:224;;25745:14;;;;;;;;;;;25741:1691;;;25806:7;:5;:7::i;:::-;25798:15;;:4;:15;;;;:49;;;;;25840:7;:5;:7::i;:::-;25834:13;;:2;:13;;;;25798:49;:86;;;;;25882:1;25868:16;;:2;:16;;;;25798:86;:128;;;;;25919:6;25905:21;;:2;:21;;;;25798:128;:159;;;;;25948:9;;;;;;;;;;;25947:10;25798:159;25776:1645;;;25997:11;;;;;;;;;;;25992:117;;26018:19;:25;26038:4;26018:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26047:19;:23;26067:2;26047:23;;;;;;;;;;;;;;;;;;;;;;;;;26018:52;26010:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;25992:117;26146:12;26132:10;;:26;26128:57;;26181:4;26160:14;:18;26175:2;26160:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;26128:57;26216:7;:5;:7::i;:::-;26210:13;;:2;:13;;;;:47;;;;;26241:15;;;;;;;;;;;26227:30;;:2;:30;;;;26210:47;:79;;;;;26275:13;;;;;;;;;;;26261:28;;:2;:28;;;;26210:79;26206:336;;;26359:12;26321:24;:35;26346:9;26321:35;;;;;;;;;;;;;;;;:50;26313:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;26510:12;26472:24;:35;26497:9;26472:35;;;;;;;;;;;;;;;:50;;;;26206:336;26593:26;:32;26620:4;26593:32;;;;;;;;;;;;;;;;;;;;;;;;;:72;;;;;26630:31;:35;26662:2;26630:35;;;;;;;;;;;;;;;;;;;;;;;;;26629:36;26593:72;26589:817;;;26708:20;;26698:6;:30;;26690:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;26855:9;;26838:13;26848:2;26838:9;:13::i;:::-;26829:6;:22;;;;:::i;:::-;:35;;26821:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;26589:817;;;26993:26;:30;27020:2;26993:30;;;;;;;;;;;;;;;;;;;;;;;;;:72;;;;;27028:31;:37;27060:4;27028:37;;;;;;;;;;;;;;;;;;;;;;;;;27027:38;26993:72;26989:417;;;27108:20;;27098:6;:30;;27090:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;26989:417;;;27247:31;:35;27279:2;27247:35;;;;;;;;;;;;;;;;;;;;;;;;;27242:164;;27341:9;;27324:13;27334:2;27324:9;:13::i;:::-;27315:6;:22;;;;:::i;:::-;:35;;27307:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;27242:164;26989:417;26589:817;25776:1645;25741:1691;27471:9;;;;;;;;;;;27470:10;:60;;;;;27498:26;:32;27525:4;27498:32;;;;;;;;;;;;;;;;;;;;;;;;;27497:33;27470:60;:103;;;;;27548:19;:25;27568:4;27548:25;;;;;;;;;;;;;;;;;;;;;;;;;27547:26;27470:103;:144;;;;;27591:19;:23;27611:2;27591:23;;;;;;;;;;;;;;;;;;;;;;;;;27590:24;27470:144;27452:274;;;27653:4;27641:9;;:16;;;;;;;;;;;;;;;;;;27672:10;:8;:10::i;:::-;27709:5;27697:9;;:17;;;;;;;;;;;;;;;;;;27452:274;27738:12;27754:9;;;;;;;;;;;27753:10;27738:25;;27884:12;;;;;;;;;;;:54;;;;27913:19;:25;27933:4;27913:25;;;;;;;;;;;;;;;;;;;;;;;;;27884:54;:95;;;;27956:19;:23;27976:2;27956:23;;;;;;;;;;;;;;;;;;;;;;;;;27884:95;:183;;;;27999:26;:32;28026:4;27999:32;;;;;;;;;;;;;;;;;;;;;;;;;27998:33;:68;;;;;28036:26;:30;28063:2;28036:30;;;;;;;;;;;;;;;;;;;;;;;;;28035:31;27998:68;27884:183;27866:228;;;28089:5;28079:15;;27866:228;28115:12;28146:7;28142:350;;;28177:30;28203:3;28177:21;28188:9;;28177:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;28170:37;;28270:9;;28254:13;;28247:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;28224:19;;:55;;;;;;;:::i;:::-;;;;;;;;28336:9;;28322:11;;28315:4;:18;;;;:::i;:::-;:30;;;;:::i;:::-;28294:17;;:51;;;;;;;:::i;:::-;;;;;;;;28373:1;28366:4;:8;28362:91;;;28395:42;28411:4;28425;28432;28395:15;:42::i;:::-;28362:91;28476:4;28466:14;;;;;:::i;:::-;;;28142:350;28504:33;28520:4;28526:2;28530:6;28504:15;:33::i;:::-;24946:3599;;;;;;:::o;15399:191::-;15473:16;15492:6;;;;;;;;;;;15473:25;;15518:8;15509:6;;:17;;;;;;;;;;;;;;;;;;15573:8;15542:40;;15563:8;15542:40;;;;;;;;;;;;15399:191;;:::o;28553:477::-;28621:21;28659:1;28645:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28621:40;;28690:4;28672;28677:1;28672:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;28716:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28706:4;28711:1;28706:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;28751:62;28768:4;28783:15;;;;;;;;;;;28801:11;28751:8;:62::i;:::-;28826:15;;;;;;;;;;;:66;;;28907:11;28933:1;28949:4;28976;28996:15;28826:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28553:477;;:::o;3855:671::-;4002:1;3986:18;;:4;:18;;;;3978:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4079:1;4065:16;;:2;:16;;;;4057:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4134:38;4155:4;4161:2;4165:6;4134:20;:38::i;:::-;4185:19;4207:9;:15;4217:4;4207:15;;;;;;;;;;;;;;;;4185:37;;4256:6;4241:11;:21;;4233:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4373:6;4359:11;:20;4341:9;:15;4351:4;4341:15;;;;;;;;;;;;;;;:38;;;;4418:6;4401:9;:13;4411:2;4401:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;4457:2;4442:26;;4451:4;4442:26;;;4461:6;4442:26;;;;;;:::i;:::-;;;;;;;;4481:37;4501:4;4507:2;4511:6;4481:19;:37::i;:::-;3855:671;;;;:::o;17288:98::-;17346:7;17377:1;17373;:5;;;;:::i;:::-;17366:12;;17288:98;;;;:::o;29417:1102::-;29457:23;29483:24;29501:4;29483:9;:24::i;:::-;29457:50;;29518:25;29568:17;;29546:19;;:39;;;;:::i;:::-;29518:67;;29621:1;29602:15;:20;29598:33;;;29624:7;;;;29598:33;29663:19;;29645:15;:37;29641:80;;;29702:19;;29684:37;;29641:80;29734:23;29820:1;29800:17;29778:19;;29760:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;29734:87;;29832:26;29861:36;29881:15;29861;:19;;:36;;;;:::i;:::-;29832:65;;29910:25;29938:21;29910:49;;29972:37;29990:18;29972:17;:37::i;:::-;30030:18;30051:44;30077:17;30051:21;:25;;:44;;;;:::i;:::-;30030:65;;30106:21;30130:56;30168:17;30130:33;30145:17;;30130:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;30106:80;;30197:23;30236:13;30223:10;:26;;;;:::i;:::-;30197:52;;30282:1;30262:17;:21;;;;30316:1;30294:19;:23;;;;30338:14;;;;;;;;;;;30330:32;;:47;30363:13;30330:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30412:1;30394:15;:19;:42;;;;;30435:1;30417:15;:19;30394:42;30390:122;;;30453:47;30467:15;30484;30453:13;:47::i;:::-;30390:122;29417:1102;;;;;;;;;:::o;17182:98::-;17240:7;17271:1;17267;:5;;;;:::i;:::-;17260:12;;17182:98;;;;:::o;6389:125::-;;;;:::o;6522:124::-;;;;:::o;17076:98::-;17134:7;17165:1;17161;:5;;;;:::i;:::-;17154:12;;17076:98;;;;:::o;29038:371::-;29121:62;29138:4;29153:15;;;;;;;;;;;29171:11;29121:8;:62::i;:::-;29196:15;;;;;;;;;;;:31;;;29235:9;29268:4;29288:11;29314:1;29330;29346:14;;;;;;;;;;;29375:15;29196:205;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29038:371;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:139::-;;736:6;723:20;714:29;;752:33;779:5;752:33;:::i;:::-;704:87;;;;:::o;797:143::-;;885:6;879:13;870:22;;901:33;928:5;901:33;:::i;:::-;860:80;;;;:::o;963:303::-;;1083:3;1076:4;1068:6;1064:17;1060:27;1050:2;;1101:1;1098;1091:12;1050:2;1141:6;1128:20;1166:94;1256:3;1248:6;1241:4;1233:6;1229:17;1166:94;:::i;:::-;1157:103;;1040:226;;;;;:::o;1272:133::-;;1353:6;1340:20;1331:29;;1369:30;1393:5;1369:30;:::i;:::-;1321:84;;;;:::o;1411:139::-;;1495:6;1482:20;1473:29;;1511:33;1538:5;1511:33;:::i;:::-;1463:87;;;;:::o;1556:143::-;;1644:6;1638:13;1629:22;;1660:33;1687:5;1660:33;:::i;:::-;1619:80;;;;:::o;1705:262::-;;1813:2;1801:9;1792:7;1788:23;1784:32;1781:2;;;1829:1;1826;1819:12;1781:2;1872:1;1897:53;1942:7;1933:6;1922:9;1918:22;1897:53;:::i;:::-;1887:63;;1843:117;1771:196;;;;:::o;1973:284::-;;2092:2;2080:9;2071:7;2067:23;2063:32;2060:2;;;2108:1;2105;2098:12;2060:2;2151:1;2176:64;2232:7;2223:6;2212:9;2208:22;2176:64;:::i;:::-;2166:74;;2122:128;2050:207;;;;:::o;2263:407::-;;;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:552::-;;;;2818:2;2806:9;2797:7;2793:23;2789:32;2786:2;;;2834:1;2831;2824:12;2786:2;2877:1;2902:53;2947:7;2938:6;2927:9;2923:22;2902:53;:::i;:::-;2892:63;;2848:117;3004:2;3030:53;3075:7;3066:6;3055:9;3051:22;3030:53;:::i;:::-;3020:63;;2975:118;3132:2;3158:53;3203:7;3194:6;3183:9;3179:22;3158:53;:::i;:::-;3148:63;;3103:118;2776:452;;;;;:::o;3234:401::-;;;3356:2;3344:9;3335:7;3331:23;3327:32;3324:2;;;3372:1;3369;3362:12;3324:2;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:50;3610:7;3601:6;3590:9;3586:22;3568:50;:::i;:::-;3558:60;;3513:115;3314:321;;;;;:::o;3641:407::-;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3796:117;3952:2;3978:53;4023:7;4014:6;4003:9;3999:22;3978:53;:::i;:::-;3968:63;;3923:118;3724:324;;;;;:::o;4054:405::-;;4187:2;4175:9;4166:7;4162:23;4158:32;4155:2;;;4203:1;4200;4193:12;4155:2;4274:1;4263:9;4259:17;4246:31;4304:18;4296:6;4293:30;4290:2;;;4336:1;4333;4326:12;4290:2;4364:78;4434:7;4425:6;4414:9;4410:22;4364:78;:::i;:::-;4354:88;;4217:235;4145:314;;;;:::o;4465:256::-;;4570:2;4558:9;4549:7;4545:23;4541:32;4538:2;;;4586:1;4583;4576:12;4538:2;4629:1;4654:50;4696:7;4687:6;4676:9;4672:22;4654:50;:::i;:::-;4644:60;;4600:114;4528:193;;;;:::o;4727:262::-;;4835:2;4823:9;4814:7;4810:23;4806:32;4803:2;;;4851:1;4848;4841:12;4803:2;4894:1;4919:53;4964:7;4955:6;4944:9;4940:22;4919:53;:::i;:::-;4909:63;;4865:117;4793:196;;;;:::o;4995:407::-;;;5120:2;5108:9;5099:7;5095:23;5091:32;5088:2;;;5136:1;5133;5126:12;5088:2;5179:1;5204:53;5249:7;5240:6;5229:9;5225:22;5204:53;:::i;:::-;5194:63;;5150:117;5306:2;5332:53;5377:7;5368:6;5357:9;5353:22;5332:53;:::i;:::-;5322:63;;5277:118;5078:324;;;;;:::o;5408:552::-;;;;5550:2;5538:9;5529:7;5525:23;5521:32;5518:2;;;5566:1;5563;5556:12;5518:2;5609:1;5634:53;5679:7;5670:6;5659:9;5655:22;5634:53;:::i;:::-;5624:63;;5580:117;5736:2;5762:53;5807:7;5798:6;5787:9;5783:22;5762:53;:::i;:::-;5752:63;;5707:118;5864:2;5890:53;5935:7;5926:6;5915:9;5911:22;5890:53;:::i;:::-;5880:63;;5835:118;5508:452;;;;;:::o;5966:596::-;;;;6119:2;6107:9;6098:7;6094:23;6090:32;6087:2;;;6135:1;6132;6125:12;6087:2;6178:1;6203:64;6259:7;6250:6;6239:9;6235:22;6203:64;:::i;:::-;6193:74;;6149:128;6316:2;6342:64;6398:7;6389:6;6378:9;6374:22;6342:64;:::i;:::-;6332:74;;6287:129;6455:2;6481:64;6537:7;6528:6;6517:9;6513:22;6481:64;:::i;:::-;6471:74;;6426:129;6077:485;;;;;:::o;6568:179::-;;6658:46;6700:3;6692:6;6658:46;:::i;:::-;6736:4;6731:3;6727:14;6713:28;;6648:99;;;;:::o;6753:108::-;6830:24;6848:5;6830:24;:::i;:::-;6825:3;6818:37;6808:53;;:::o;6867:118::-;6954:24;6972:5;6954:24;:::i;:::-;6949:3;6942:37;6932:53;;:::o;7021:732::-;;7169:54;7217:5;7169:54;:::i;:::-;7239:86;7318:6;7313:3;7239:86;:::i;:::-;7232:93;;7349:56;7399:5;7349:56;:::i;:::-;7428:7;7459:1;7444:284;7469:6;7466:1;7463:13;7444:284;;;7545:6;7539:13;7572:63;7631:3;7616:13;7572:63;:::i;:::-;7565:70;;7658:60;7711:6;7658:60;:::i;:::-;7648:70;;7504:224;7491:1;7488;7484:9;7479:14;;7444:284;;;7448:14;7744:3;7737:10;;7145:608;;;;;;;:::o;7759:109::-;7840:21;7855:5;7840:21;:::i;:::-;7835:3;7828:34;7818:50;;:::o;7874:147::-;7969:45;8008:5;7969:45;:::i;:::-;7964:3;7957:58;7947:74;;:::o;8027:364::-;;8143:39;8176:5;8143:39;:::i;:::-;8198:71;8262:6;8257:3;8198:71;:::i;:::-;8191:78;;8278:52;8323:6;8318:3;8311:4;8304:5;8300:16;8278:52;:::i;:::-;8355:29;8377:6;8355:29;:::i;:::-;8350:3;8346:39;8339:46;;8119:272;;;;;:::o;8397:367::-;;8560:67;8624:2;8619:3;8560:67;:::i;:::-;8553:74;;8657:34;8653:1;8648:3;8644:11;8637:55;8723:5;8718:2;8713:3;8709:12;8702:27;8755:2;8750:3;8746:12;8739:19;;8543:221;;;:::o;8770:370::-;;8933:67;8997:2;8992:3;8933:67;:::i;:::-;8926:74;;9030:34;9026:1;9021:3;9017:11;9010:55;9096:8;9091:2;9086:3;9082:12;9075:30;9131:2;9126:3;9122:12;9115:19;;8916:224;;;:::o;9146:366::-;;9309:67;9373:2;9368:3;9309:67;:::i;:::-;9302:74;;9406:34;9402:1;9397:3;9393:11;9386:55;9472:4;9467:2;9462:3;9458:12;9451:26;9503:2;9498:3;9494:12;9487:19;;9292:220;;;:::o;9518:327::-;;9681:67;9745:2;9740:3;9681:67;:::i;:::-;9674:74;;9778:31;9774:1;9769:3;9765:11;9758:52;9836:2;9831:3;9827:12;9820:19;;9664:181;;;:::o;9851:370::-;;10014:67;10078:2;10073:3;10014:67;:::i;:::-;10007:74;;10111:34;10107:1;10102:3;10098:11;10091:55;10177:8;10172:2;10167:3;10163:12;10156:30;10212:2;10207:3;10203:12;10196:19;;9997:224;;;:::o;10227:387::-;;10390:67;10454:2;10449:3;10390:67;:::i;:::-;10383:74;;10487:34;10483:1;10478:3;10474:11;10467:55;10553:25;10548:2;10543:3;10539:12;10532:47;10605:2;10600:3;10596:12;10589:19;;10373:241;;;:::o;10620:388::-;;10783:67;10847:2;10842:3;10783:67;:::i;:::-;10776:74;;10880:34;10876:1;10871:3;10867:11;10860:55;10946:26;10941:2;10936:3;10932:12;10925:48;10999:2;10994:3;10990:12;10983:19;;10766:242;;;:::o;11014:383::-;;11177:67;11241:2;11236:3;11177:67;:::i;:::-;11170:74;;11274:34;11270:1;11265:3;11261:11;11254:55;11340:21;11335:2;11330:3;11326:12;11319:43;11388:2;11383:3;11379:12;11372:19;;11160:237;;;:::o;11403:439::-;;11566:67;11630:2;11625:3;11566:67;:::i;:::-;11559:74;;11663:34;11659:1;11654:3;11650:11;11643:55;11729:34;11724:2;11719:3;11715:12;11708:56;11795:11;11790:2;11785:3;11781:12;11774:33;11833:2;11828:3;11824:12;11817:19;;11549:293;;;:::o;11848:366::-;;12011:67;12075:2;12070:3;12011:67;:::i;:::-;12004:74;;12108:34;12104:1;12099:3;12095:11;12088:55;12174:4;12169:2;12164:3;12160:12;12153:26;12205:2;12200:3;12196:12;12189:19;;11994:220;;;:::o;12220:330::-;;12383:67;12447:2;12442:3;12383:67;:::i;:::-;12376:74;;12480:34;12476:1;12471:3;12467:11;12460:55;12541:2;12536:3;12532:12;12525:19;;12366:184;;;:::o;12556:432::-;;12719:67;12783:2;12778:3;12719:67;:::i;:::-;12712:74;;12816:34;12812:1;12807:3;12803:11;12796:55;12882:34;12877:2;12872:3;12868:12;12861:56;12948:4;12943:2;12938:3;12934:12;12927:26;12979:2;12974:3;12970:12;12963:19;;12702:286;;;:::o;12994:369::-;;13157:67;13221:2;13216:3;13157:67;:::i;:::-;13150:74;;13254:34;13250:1;13245:3;13241:11;13234:55;13320:7;13315:2;13310:3;13306:12;13299:29;13354:2;13349:3;13345:12;13338:19;;13140:223;;;:::o;13369:394::-;;13532:67;13596:2;13591:3;13532:67;:::i;:::-;13525:74;;13629:34;13625:1;13620:3;13616:11;13609:55;13695:32;13690:2;13685:3;13681:12;13674:54;13754:2;13749:3;13745:12;13738:19;;13515:248;;;:::o;13769:368::-;;13932:67;13996:2;13991:3;13932:67;:::i;:::-;13925:74;;14029:34;14025:1;14020:3;14016:11;14009:55;14095:6;14090:2;14085:3;14081:12;14074:28;14128:2;14123:3;14119:12;14112:19;;13915:222;;;:::o;14143:431::-;;14306:67;14370:2;14365:3;14306:67;:::i;:::-;14299:74;;14403:34;14399:1;14394:3;14390:11;14383:55;14469:34;14464:2;14459:3;14455:12;14448:56;14535:3;14530:2;14525:3;14521:12;14514:25;14565:2;14560:3;14556:12;14549:19;;14289:285;;;:::o;14580:329::-;;14743:67;14807:2;14802:3;14743:67;:::i;:::-;14736:74;;14840:33;14836:1;14831:3;14827:11;14820:54;14900:2;14895:3;14891:12;14884:19;;14726:183;;;:::o;14915:369::-;;15078:67;15142:2;15137:3;15078:67;:::i;:::-;15071:74;;15175:34;15171:1;15166:3;15162:11;15155:55;15241:7;15236:2;15231:3;15227:12;15220:29;15275:2;15270:3;15266:12;15259:19;;15061:223;;;:::o;15290:118::-;15377:24;15395:5;15377:24;:::i;:::-;15372:3;15365:37;15355:53;;:::o;15414:112::-;15497:22;15513:5;15497:22;:::i;:::-;15492:3;15485:35;15475:51;;:::o;15532:222::-;;15663:2;15652:9;15648:18;15640:26;;15676:71;15744:1;15733:9;15729:17;15720:6;15676:71;:::i;:::-;15630:124;;;;:::o;15760:332::-;;15919:2;15908:9;15904:18;15896:26;;15932:71;16000:1;15989:9;15985:17;15976:6;15932:71;:::i;:::-;16013:72;16081:2;16070:9;16066:18;16057:6;16013:72;:::i;:::-;15886:206;;;;;:::o;16098:807::-;;16385:3;16374:9;16370:19;16362:27;;16399:71;16467:1;16456:9;16452:17;16443:6;16399:71;:::i;:::-;16480:72;16548:2;16537:9;16533:18;16524:6;16480:72;:::i;:::-;16562:80;16638:2;16627:9;16623:18;16614:6;16562:80;:::i;:::-;16652;16728:2;16717:9;16713:18;16704:6;16652:80;:::i;:::-;16742:73;16810:3;16799:9;16795:19;16786:6;16742:73;:::i;:::-;16825;16893:3;16882:9;16878:19;16869:6;16825:73;:::i;:::-;16352:553;;;;;;;;;:::o;16911:210::-;;17036:2;17025:9;17021:18;17013:26;;17049:65;17111:1;17100:9;17096:17;17087:6;17049:65;:::i;:::-;17003:118;;;;:::o;17127:313::-;;17278:2;17267:9;17263:18;17255:26;;17327:9;17321:4;17317:20;17313:1;17302:9;17298:17;17291:47;17355:78;17428:4;17419:6;17355:78;:::i;:::-;17347:86;;17245:195;;;;:::o;17446:419::-;;17650:2;17639:9;17635:18;17627:26;;17699:9;17693:4;17689:20;17685:1;17674:9;17670:17;17663:47;17727:131;17853:4;17727:131;:::i;:::-;17719:139;;17617:248;;;:::o;17871:419::-;;18075:2;18064:9;18060:18;18052:26;;18124:9;18118:4;18114:20;18110:1;18099:9;18095:17;18088:47;18152:131;18278:4;18152:131;:::i;:::-;18144:139;;18042:248;;;:::o;18296:419::-;;18500:2;18489:9;18485:18;18477:26;;18549:9;18543:4;18539:20;18535:1;18524:9;18520:17;18513:47;18577:131;18703:4;18577:131;:::i;:::-;18569:139;;18467:248;;;:::o;18721:419::-;;18925:2;18914:9;18910:18;18902:26;;18974:9;18968:4;18964:20;18960:1;18949:9;18945:17;18938:47;19002:131;19128:4;19002:131;:::i;:::-;18994:139;;18892:248;;;:::o;19146:419::-;;19350:2;19339:9;19335:18;19327:26;;19399:9;19393:4;19389:20;19385:1;19374:9;19370:17;19363:47;19427:131;19553:4;19427:131;:::i;:::-;19419:139;;19317:248;;;:::o;19571:419::-;;19775:2;19764:9;19760:18;19752:26;;19824:9;19818:4;19814:20;19810:1;19799:9;19795:17;19788:47;19852:131;19978:4;19852:131;:::i;:::-;19844:139;;19742:248;;;:::o;19996:419::-;;20200:2;20189:9;20185:18;20177:26;;20249:9;20243:4;20239:20;20235:1;20224:9;20220:17;20213:47;20277:131;20403:4;20277:131;:::i;:::-;20269:139;;20167:248;;;:::o;20421:419::-;;20625:2;20614:9;20610:18;20602:26;;20674:9;20668:4;20664:20;20660:1;20649:9;20645:17;20638:47;20702:131;20828:4;20702:131;:::i;:::-;20694:139;;20592:248;;;:::o;20846:419::-;;21050:2;21039:9;21035:18;21027:26;;21099:9;21093:4;21089:20;21085:1;21074:9;21070:17;21063:47;21127:131;21253:4;21127:131;:::i;:::-;21119:139;;21017:248;;;:::o;21271:419::-;;21475:2;21464:9;21460:18;21452:26;;21524:9;21518:4;21514:20;21510:1;21499:9;21495:17;21488:47;21552:131;21678:4;21552:131;:::i;:::-;21544:139;;21442:248;;;:::o;21696:419::-;;21900:2;21889:9;21885:18;21877:26;;21949:9;21943:4;21939:20;21935:1;21924:9;21920:17;21913:47;21977:131;22103:4;21977:131;:::i;:::-;21969:139;;21867:248;;;:::o;22121:419::-;;22325:2;22314:9;22310:18;22302:26;;22374:9;22368:4;22364:20;22360:1;22349:9;22345:17;22338:47;22402:131;22528:4;22402:131;:::i;:::-;22394:139;;22292:248;;;:::o;22546:419::-;;22750:2;22739:9;22735:18;22727:26;;22799:9;22793:4;22789:20;22785:1;22774:9;22770:17;22763:47;22827:131;22953:4;22827:131;:::i;:::-;22819:139;;22717:248;;;:::o;22971:419::-;;23175:2;23164:9;23160:18;23152:26;;23224:9;23218:4;23214:20;23210:1;23199:9;23195:17;23188:47;23252:131;23378:4;23252:131;:::i;:::-;23244:139;;23142:248;;;:::o;23396:419::-;;23600:2;23589:9;23585:18;23577:26;;23649:9;23643:4;23639:20;23635:1;23624:9;23620:17;23613:47;23677:131;23803:4;23677:131;:::i;:::-;23669:139;;23567:248;;;:::o;23821:419::-;;24025:2;24014:9;24010:18;24002:26;;24074:9;24068:4;24064:20;24060:1;24049:9;24045:17;24038:47;24102:131;24228:4;24102:131;:::i;:::-;24094:139;;23992:248;;;:::o;24246:419::-;;24450:2;24439:9;24435:18;24427:26;;24499:9;24493:4;24489:20;24485:1;24474:9;24470:17;24463:47;24527:131;24653:4;24527:131;:::i;:::-;24519:139;;24417:248;;;:::o;24671:419::-;;24875:2;24864:9;24860:18;24852:26;;24924:9;24918:4;24914:20;24910:1;24899:9;24895:17;24888:47;24952:131;25078:4;24952:131;:::i;:::-;24944:139;;24842:248;;;:::o;25096:222::-;;25227:2;25216:9;25212:18;25204:26;;25240:71;25308:1;25297:9;25293:17;25284:6;25240:71;:::i;:::-;25194:124;;;;:::o;25324:831::-;;25625:3;25614:9;25610:19;25602:27;;25639:71;25707:1;25696:9;25692:17;25683:6;25639:71;:::i;:::-;25720:80;25796:2;25785:9;25781:18;25772:6;25720:80;:::i;:::-;25847:9;25841:4;25837:20;25832:2;25821:9;25817:18;25810:48;25875:108;25978:4;25969:6;25875:108;:::i;:::-;25867:116;;25993:72;26061:2;26050:9;26046:18;26037:6;25993:72;:::i;:::-;26075:73;26143:3;26132:9;26128:19;26119:6;26075:73;:::i;:::-;25592:563;;;;;;;;:::o;26161:214::-;;26288:2;26277:9;26273:18;26265:26;;26301:67;26365:1;26354:9;26350:17;26341:6;26301:67;:::i;:::-;26255:120;;;;:::o;26381:283::-;;26447:2;26441:9;26431:19;;26489:4;26481:6;26477:17;26596:6;26584:10;26581:22;26560:18;26548:10;26545:34;26542:62;26539:2;;;26607:18;;:::i;:::-;26539:2;26647:10;26643:2;26636:22;26421:243;;;;:::o;26670:311::-;;26837:18;26829:6;26826:30;26823:2;;;26859:18;;:::i;:::-;26823:2;26909:4;26901:6;26897:17;26889:25;;26969:4;26963;26959:15;26951:23;;26752:229;;;:::o;26987:132::-;;27077:3;27069:11;;27107:4;27102:3;27098:14;27090:22;;27059:60;;;:::o;27125:114::-;;27226:5;27220:12;27210:22;;27199:40;;;:::o;27245:99::-;;27331:5;27325:12;27315:22;;27304:40;;;:::o;27350:113::-;;27452:4;27447:3;27443:14;27435:22;;27425:38;;;:::o;27469:184::-;;27602:6;27597:3;27590:19;27642:4;27637:3;27633:14;27618:29;;27580:73;;;;:::o;27659:169::-;;27777:6;27772:3;27765:19;27817:4;27812:3;27808:14;27793:29;;27755:73;;;;:::o;27834:305::-;;27893:20;27911:1;27893:20;:::i;:::-;27888:25;;27927:20;27945:1;27927:20;:::i;:::-;27922:25;;28081:1;28013:66;28009:74;28006:1;28003:81;28000:2;;;28087:18;;:::i;:::-;28000:2;28131:1;28128;28124:9;28117:16;;27878:261;;;;:::o;28145:185::-;;28202:20;28220:1;28202:20;:::i;:::-;28197:25;;28236:20;28254:1;28236:20;:::i;:::-;28231:25;;28275:1;28265:2;;28280:18;;:::i;:::-;28265:2;28322:1;28319;28315:9;28310:14;;28187:143;;;;:::o;28336:348::-;;28399:20;28417:1;28399:20;:::i;:::-;28394:25;;28433:20;28451:1;28433:20;:::i;:::-;28428:25;;28621:1;28553:66;28549:74;28546:1;28543:81;28538:1;28531:9;28524:17;28520:105;28517:2;;;28628:18;;:::i;:::-;28517:2;28676:1;28673;28669:9;28658:20;;28384:300;;;;:::o;28690:191::-;;28750:20;28768:1;28750:20;:::i;:::-;28745:25;;28784:20;28802:1;28784:20;:::i;:::-;28779:25;;28823:1;28820;28817:8;28814:2;;;28828:18;;:::i;:::-;28814:2;28873:1;28870;28866:9;28858:17;;28735:146;;;;:::o;28887:96::-;;28953:24;28971:5;28953:24;:::i;:::-;28942:35;;28932:51;;;:::o;28989:90::-;;29066:5;29059:13;29052:21;29041:32;;29031:48;;;:::o;29085:126::-;;29162:42;29155:5;29151:54;29140:65;;29130:81;;;:::o;29217:77::-;;29283:5;29272:16;;29262:32;;;:::o;29300:86::-;;29375:4;29368:5;29364:16;29353:27;;29343:43;;;:::o;29392:121::-;;29483:24;29501:5;29483:24;:::i;:::-;29470:37;;29460:53;;;:::o;29519:307::-;29587:1;29597:113;29611:6;29608:1;29605:13;29597:113;;;29696:1;29691:3;29687:11;29681:18;29677:1;29672:3;29668:11;29661:39;29633:2;29630:1;29626:10;29621:15;;29597:113;;;29728:6;29725:1;29722:13;29719:2;;;29808:1;29799:6;29794:3;29790:16;29783:27;29719:2;29568:258;;;;:::o;29832:320::-;;29913:1;29907:4;29903:12;29893:22;;29960:1;29954:4;29950:12;29981:18;29971:2;;30037:4;30029:6;30025:17;30015:27;;29971:2;30099;30091:6;30088:14;30068:18;30065:38;30062:2;;;30118:18;;:::i;:::-;30062:2;29883:269;;;;:::o;30158:233::-;;30220:24;30238:5;30220:24;:::i;:::-;30211:33;;30266:66;30259:5;30256:77;30253:2;;;30336:18;;:::i;:::-;30253:2;30383:1;30376:5;30372:13;30365:20;;30201:190;;;:::o;30397:180::-;30445:77;30442:1;30435:88;30542:4;30539:1;30532:15;30566:4;30563:1;30556:15;30583:180;30631:77;30628:1;30621:88;30728:4;30725:1;30718:15;30752:4;30749:1;30742:15;30769:180;30817:77;30814:1;30807:88;30914:4;30911:1;30904:15;30938:4;30935:1;30928:15;30955:180;31003:77;31000:1;30993:88;31100:4;31097:1;31090:15;31124:4;31121:1;31114:15;31141:102;;31233:2;31229:7;31224:2;31217:5;31213:14;31209:28;31199:38;;31189:54;;;:::o;31249:122::-;31322:24;31340:5;31322:24;:::i;:::-;31315:5;31312:35;31302:2;;31361:1;31358;31351:12;31302:2;31292:79;:::o;31377:116::-;31447:21;31462:5;31447:21;:::i;:::-;31440:5;31437:32;31427:2;;31483:1;31480;31473:12;31427:2;31417:76;:::o;31499:122::-;31572:24;31590:5;31572:24;:::i;:::-;31565:5;31562:35;31552:2;;31611:1;31608;31601:12;31552:2;31542:79;:::o

Swarm Source

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