ETH Price: $3,537.66 (+0.44%)
Gas: 13 Gwei

Token

nsurance (n)
 

Overview

Max Total Supply

1,000,000,000,000 n

Holders

855

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Discover $n: Aligned with $NFAI's values, reshaping DeFi insurance. Unique protocol for safety via insurance, deflation through token burns, yield staking, and price stability with diverse liquidity. Join our secure, rewarding ecosystem.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
N

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-05
*/

// SPDX-License-Identifier: MIT
pragma solidity =0.8.21;

interface IdexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface In {
    //events
    event SwapThresholdChange(uint threshold);
    event OverLiquifiedThresholdChange(uint threshold);
    event OnSetTaxes(
        uint buy, 
        uint sell, 
        uint transfer_, 
        uint ins, 
        uint b3_1, 
        uint b3_2
    );
    event ManualSwapChange(bool status);
    event MaxWalletBalanceUpdated(uint256 percent);
    event MaxTransactionAmountUpdated(uint256 percent);
    event ExcludeAccount(address indexed account, bool indexed exclude);
    event ExcludeFromWalletLimits(address indexed account, bool indexed exclude);
    event ExcludeFromTransactionLimits(address indexed account, bool indexed exclude);
    event OwnerSwap();
    event OnEnableTrading();
    event OnProlongLPLock(uint UnlockTimestamp);
    event OnReleaseLP();
    event RecoverETH();
    event NewPairSet(address Pair, bool Add);
    event LimitTo20PercentLP();
    event NewRouterSet(address _newdex);
    event NewFeeWalletsSet(
        address indexed NewInsWallet, 
        address indexed NewB3_1Wallet, 
        address indexed NewB3_2Wallet
                    );
    event RecoverTokens(uint256 amount);
    event TokensAirdroped(address indexed sender, uint256 total, uint256 amount);
}

interface IdexRouter {
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

}

// File @openzeppelin/contracts/utils/[email protected]
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File @openzeppelin/contracts/access/[email protected]
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract N is IERC20, Ownable, In {
    mapping (address => uint) private _balances;
    mapping (address => mapping (address => uint)) private _allowances;
    mapping(address => bool) private excludedFromWalletLimits;
    mapping(address => bool) private excludedFromTransactionLimits;
    mapping(address => bool) public excludedFromFees;

    mapping(address=>bool) public isPair;

    //strings
    string private constant _name = 'nsurance';
    string private constant _symbol = 'n';

    //uints
    uint private constant InitialSupply= 1_000_000_000_000 * 10**_decimals;

    //Tax by divisor of MAXTAXDENOMINATOR
    uint public buyTax = 4500;
    uint public sellTax = 4500;
    uint public transferTax = 100;

    //insPct+b3_1Pct+b3_2Pct must equal TAX_DENOMINATOR
    uint[] private taxStructure = [3500, 3500, 3000, 2500, 1500, 1000, 400];
    uint public insPct=3333;
    uint public b3_1Pct=3334;
    uint public b3_2Pct=3333;
    uint constant TAX_DENOMINATOR=10000;
    uint constant MAXBUYTAXDENOMINATOR=1000;
    uint constant MAXTRANSFERTAXDENOMINATOR=1000;
    uint constant MAXSELLTAXDENOMINATOR=1000;
    uint public currentTaxIndex = 0;
    //swapTreshold dynamic by LP pair balance
    uint public swapTreshold=4;
    uint private LaunchBlock;
    uint public tokensForInsurance;
    uint public tokensForB3_1;
    uint public tokensForB3_2;
    uint8 private constant _decimals = 18;
    uint256 public maxTransactionAmount;
    uint256 public maxWalletBalance;

    IdexRouter private  _dexRouter;

    //addresses
    address private dexRouter;
    address private _dexPairAddress;
    address constant deadWallet = 0x000000000000000000000000000000000000dEaD;
    address private insuranceWallet;
    address private b3_1Wallet;
    address private b3_2Wallet;

    //bools
    bool public _b3_2tokenrcvr;
    bool private _isSwappingContractModifier;
    bool public manualSwap;

    //modifiers
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    constructor (
        address _DexRouter, 
        address _insWallet, 
        address _b3_1Wallet, 
        address _b3_2Wallet
    ) {
        // Assigning parameters to state variables
        insuranceWallet = _insWallet;
        b3_1Wallet = _b3_1Wallet;
        b3_2Wallet = _b3_2Wallet;
        dexRouter = _DexRouter;

        // Hardcoded addresses for allocations
        address[5] memory initialAddresses = [
            0xbe25b92099D428F959549cBE8deab0e20a82918d,
            0xC9E7c47bF63c71452f50EAA1a69545a170278998,
            0x85aE03A5846324F053BD07e28D7c14B75e90E26D,
            0x3Ec897771308c83f3a442ab275a1F0Fec82e365a,
            0x44762b347bE037d5C0f098530FdfD5370f19E471
        ];

        uint[5] memory initialAmounts = [
            36_666_666_667 * 10**_decimals,
            25_000_000_000 * 10**_decimals,
            36_666_666_667 * 10**_decimals,
            93_958_333_333 * 10**_decimals,
            146_666_666_667 * 10**_decimals
        ];

        SetInitialBalances(initialAddresses, initialAmounts);

        // Setting exclusions
        SetExclusions(
            [msg.sender, dexRouter, address(this), 
            0xbe25b92099D428F959549cBE8deab0e20a82918d,
            0xC9E7c47bF63c71452f50EAA1a69545a170278998,
            0x85aE03A5846324F053BD07e28D7c14B75e90E26D,
            0x3Ec897771308c83f3a442ab275a1F0Fec82e365a,
            0x44762b347bE037d5C0f098530FdfD5370f19E471,
            0x5E1EcF03D1D776CAff4f47150610519dFb014161,
            0xA576463273E4A459B39a518be7fc79EbecF6B7c7],
            [msg.sender, deadWallet, address(this), 
            0xbe25b92099D428F959549cBE8deab0e20a82918d,
            0xC9E7c47bF63c71452f50EAA1a69545a170278998,
            0x85aE03A5846324F053BD07e28D7c14B75e90E26D,
            0x3Ec897771308c83f3a442ab275a1F0Fec82e365a,
            0x44762b347bE037d5C0f098530FdfD5370f19E471,
            0x5E1EcF03D1D776CAff4f47150610519dFb014161,
            0xA576463273E4A459B39a518be7fc79EbecF6B7c7],
            [msg.sender, deadWallet, address(this), 
            0xbe25b92099D428F959549cBE8deab0e20a82918d,
            0xC9E7c47bF63c71452f50EAA1a69545a170278998,
            0x85aE03A5846324F053BD07e28D7c14B75e90E26D,
            0x3Ec897771308c83f3a442ab275a1F0Fec82e365a,
            0x44762b347bE037d5C0f098530FdfD5370f19E471,
            0x5E1EcF03D1D776CAff4f47150610519dFb014161,
            0xA576463273E4A459B39a518be7fc79EbecF6B7c7]
        );
    }

    function setB3_2tokenRCVR (bool yesNo) external onlyOwner {
        _b3_2tokenrcvr = yesNo;
    }

    /**
    * @notice Set Initial Balances
    * @dev This function is for set initial balances.
    * @param addresses The array of address to be set initial balances.
    * @param amounts The array of amount to be set initial balances.
     */
    function SetInitialBalances(address[5] memory addresses, uint[5] memory amounts) internal {
        require(addresses.length == amounts.length, "Mismatched arrays length");
        uint256 totalAllocatedAmount = 0;
        for (uint256 i = 0; i < addresses.length; i++) {
            _balances[addresses[i]] = amounts[i];
            totalAllocatedAmount += amounts[i];
            emit Transfer(address(0), addresses[i], amounts[i]);
        }
        uint contractBalance = 50_000_000_000 * 10**_decimals;
        _balances[address(this)] = contractBalance;
        emit Transfer(address(0), address(this), contractBalance);
        uint256 deployerBalance = InitialSupply - totalAllocatedAmount - contractBalance;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);
    }

    /** 
    * @notice Set Exclusions
    * @dev This function is for set exclusions.
    * @param feeExclusions The array of address to be excluded from fees.
    * @param walletLimitExclusions The array of address to be excluded from wallet limits.
    * @param transactionLimitExclusions The array of address to be excluded from transaction limits.
     */
    function SetExclusions(
        address[10] memory feeExclusions, 
        address[10] memory walletLimitExclusions, 
        address[10] memory transactionLimitExclusions
    ) internal {
        for (uint256 i = 0; i < feeExclusions.length; i++) {
            excludedFromFees[feeExclusions[i]] = true;
        }
        for (uint256 i = 0; i < walletLimitExclusions.length; i++) {
            excludedFromWalletLimits[walletLimitExclusions[i]] = true;
        }
        for (uint256 i = 0; i < transactionLimitExclusions.length; i++) {
            excludedFromTransactionLimits[transactionLimitExclusions[i]] = true;
        }
    }

    /**
     * @dev Decrease the tax rates for both buy and sell operations to the next lower value in the structure
     */
    function decreaseTaxRate() external payable onlyOwner {
        require(currentTaxIndex < taxStructure.length - 1, "Already at the lowest tax rate");

        // Move to the next lower tax rate in the tax structure
        currentTaxIndex++;

        // Update the buy and sell tax rates
        buyTax = taxStructure[currentTaxIndex];
        sellTax = taxStructure[currentTaxIndex];
    }

    /**
    * @notice Internal function to transfer tokens from one address to another.
     */
    function _transfer(address sender, address recipient, uint amount) internal {
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");

        if(excludedFromFees[sender] || excludedFromFees[recipient])
            _feelessTransfer(sender, recipient, amount);

        else {
            require(LaunchBlock>0,"trading not yet enabled");
            _taxedTransfer(sender,recipient,amount);
        }
    }

    /**
    * @notice Transfer amount of tokens with fees.
    * @param sender The address of user to send tokens.
    * @param recipient The address of user to be recieved tokens.
    * @param amount The token amount to transfer.
    */
    function _taxedTransfer(address sender, address recipient, uint amount) internal {
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        bool excludedFromWalletLimitsAccount = excludedFromWalletLimits[sender] || excludedFromWalletLimits[recipient];
        bool excludedFromTXNLimitsAccount = excludedFromTransactionLimits[sender] || excludedFromTransactionLimits[recipient];
        if (
            isPair[sender] &&
            !excludedFromWalletLimitsAccount
        ) {
            if(!excludedFromTXNLimitsAccount){
                require(
                amount <= maxTransactionAmount,
                "Transfer amount exceeds the maxTxAmount."
                );
            }
            uint256 contractBalanceRecepient = balanceOf(recipient);
            require(
                contractBalanceRecepient + amount <= maxWalletBalance,
                "Exceeds maximum wallet token amount."
            );
        } else if (
            isPair[recipient] &&
            !excludedFromTXNLimitsAccount
        ) {
            require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxSellTransactionAmount.");
        }

        bool isBuy=isPair[sender];
        bool isSell=isPair[recipient];
        uint tax;

        if(isSell) {  // in case that sender is dex token pair.
            uint SellTaxDuration=10;
            if(block.number<LaunchBlock+SellTaxDuration){
                tax=_getStartTax();
            } else tax=sellTax;
        }
        else if(isBuy) {    // in case that recieve is dex token pair.
            uint BuyTaxDuration=10;
            if(block.number<LaunchBlock+BuyTaxDuration){
                tax=_getStartTax();
            } else tax=buyTax;
        } else { 
            uint256 contractBalanceRecepient = balanceOf(recipient);
            if(!excludedFromWalletLimitsAccount){
            require(
                contractBalanceRecepient + amount <= maxWalletBalance,
                "Exceeds maximum wallet token amount."
                );
            }
            uint TransferTaxDuration=10;
            if(block.number<LaunchBlock+TransferTaxDuration){
                tax=_getStartTax();
            } else tax=transferTax;
        }

        if((sender!=_dexPairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier))
        _swapContractToken(false);
        uint contractToken=_calculateFee(amount, tax, insPct+b3_1Pct+b3_2Pct);
        tokensForInsurance+=_calculateFee(amount, tax, insPct);
        tokensForB3_1+=_calculateFee(amount, tax, b3_1Pct);
        tokensForB3_2+=_calculateFee(amount, tax, b3_2Pct);
        uint taxedAmount=amount-contractToken;

        _balances[sender]-=amount;
        _balances[address(this)] += contractToken;
        _balances[recipient]+=taxedAmount;
        
        emit Transfer(sender,recipient,taxedAmount);
    }

    /**
    * @notice Provides start tax to transfer function.
    * @return The tax to calculate fee with.
    */
    function _getStartTax() internal pure returns (uint){
        uint startTax=9000;
        return startTax;
    }

    /**
    * @notice Calculates fee based of set amounts
    * @param amount The amount to calculate fee on
    * @param tax The tax to calculate fee with
    * @param taxPercent The tax percent to calculate fee with
    */
    function _calculateFee(uint amount, uint tax, uint taxPercent) internal pure returns (uint) {
        return (amount*tax*taxPercent) / (TAX_DENOMINATOR*TAX_DENOMINATOR);
    }

    /**
    * @notice Transfer amount of tokens without fees.
    * @dev In feelessTransfer, there isn't limit as well.
    * @param sender The address of user to send tokens.
    * @param recipient The address of user to be recieveid tokens.
    * @param amount The token amount to transfer.
    */
    function _feelessTransfer(address sender, address recipient, uint amount) internal {
        uint senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        _balances[sender]-=amount;
        _balances[recipient]+=amount;
        emit Transfer(sender,recipient,amount);
    }

    /**
    * @notice Swap tokens for eth.
    * @dev This function is for swap tokens for eth.
    * @param newSwapTresholdPermille Set the swap % of LP pair holdings.
     */
    function setSwapTreshold(uint newSwapTresholdPermille) external payable onlyOwner{
        require(newSwapTresholdPermille<=10);//MaxTreshold= 1%
        swapTreshold=newSwapTresholdPermille;
        emit SwapThresholdChange(newSwapTresholdPermille);
    }

    /**
    * @notice Set the current taxes. ins+b3_1+b3_2 must equal TAX_DENOMINATOR. 
    * @notice buy must be less than MAXBUYTAXDENOMINATOR.
    * @notice sell must be less than MAXSELLTAXDENOMINATOR.
    * @notice transfer_ must be less than MAXTRANSFERTAXDENOMINATOR.
    * @dev This function is for set the current taxes.
    * @param buy The buy tax.
    * @param sell The sell tax.
    * @param transfer_ The transfer tax.
    * @param ins The insurance tax.
    * @param b3_1 The b3_1 tax.
    * @param b3_2 The b3_2 tax.
     */
    function SetTaxes(
        uint buy, 
        uint sell, 
        uint transfer_, 
        uint ins, 
        uint b3_1, 
        uint b3_2
    ) external payable onlyOwner{
        require(
            buy<=MAXBUYTAXDENOMINATOR &&
            sell<=MAXSELLTAXDENOMINATOR &&
            transfer_<=MAXTRANSFERTAXDENOMINATOR,
            "Tax exceeds maxTax"
        );
        require(
            ins+b3_1+b3_2==TAX_DENOMINATOR,
            "Taxes don't add up to denominator"
        );

        buyTax=buy;
        sellTax=sell;
        transferTax=transfer_;
        insPct=ins;
        b3_1Pct=b3_1;
        b3_2Pct=b3_2;
        emit OnSetTaxes(buy, sell, transfer_, ins, b3_1, b3_2);
    }

    /**
     * @dev Swaps contract tokens based on various parameters.
     * @param ignoreLimits Whether to ignore the token swap limits.
     */
  function _swapContractToken(bool ignoreLimits) internal lockTheSwap {
        uint contractBalance = _balances[address(this)];
        uint totalTax = insPct + b3_1Pct + b3_2Pct;
        uint tokensToSwap = (_balances[_dexPairAddress] * swapTreshold) / 1000;

        if (totalTax == 0) return;

        if (ignoreLimits) {
            tokensToSwap = _balances[address(this)];
        } else if (contractBalance < tokensToSwap) {
            return;
        }

        uint initialETHBalance = address(this).balance;

        _swapTokenForETH(tokensToSwap);

        uint newETH = address(this).balance - initialETHBalance;
        uint ethBalance = newETH;

        uint tokensForThisInsurance = (tokensToSwap * insPct) / totalTax;
        uint tokensForThisB3_1 = (tokensToSwap * b3_1Pct) / totalTax;
        uint tokensForThisB3_2 = (tokensToSwap * b3_2Pct) / totalTax;
        uint ethForInsurance = (ethBalance * tokensForThisInsurance) / tokensToSwap;
        uint ethForB3_1 = (ethBalance * tokensForThisB3_1) / tokensToSwap;
        uint ethForB3_2 = (ethBalance * tokensForThisB3_2) / tokensToSwap;

        if (tokensForThisInsurance != 0) {
            (bool sent,) = insuranceWallet.call{value: ethForInsurance}("");
            require(sent, "Failed to send ETH to Insurance wallet");
            tokensForInsurance -= tokensForThisInsurance;
        }

        if (tokensForThisB3_1 != 0) {
            (bool sent,) = b3_1Wallet.call{value: ethForB3_1}("");
            require(sent, "Failed to send ETH to B3_1 wallet");
            tokensForB3_1 -= tokensForThisB3_1;
        }

        if (tokensForThisB3_2 != 0) {
            if (_b3_2tokenrcvr) {
                _balances[b3_2Wallet] += tokensForThisB3_2;
                tokensForB3_2 -= tokensForThisB3_2;
                emit Transfer(address(this), b3_2Wallet, tokensForThisB3_2);
            } else {
                (bool sent,) = b3_2Wallet.call{value: ethForB3_2}("");
                require(sent, "Failed to send ETH to B3_2 wallet");
                tokensForB3_2 -= tokensForThisB3_2;
            }
        }
    }

    /**
    * @notice Swap tokens for eth.
    * @dev This function is for swap tokens for eth.
    * @param amount The token amount to swap.
    */
    function _swapTokenForETH(uint amount) private {
        _approve(address(this), address(_dexRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _dexRouter.WETH();

        try _dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        ){}
        catch{}
    }

    /**
    * @notice Add initial liquidity to dex.
    * @dev This function is for add liquidity to dex.
     */
    function _addInitLiquidity() private {
        uint tokenAmount = balanceOf(address(this));
        _approve(address(this), address(_dexRouter), tokenAmount);
        _dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    /**
    * @notice Get Burned tokens.
    * @dev This function is for get burned tokens.
    */
    function getBurnedTokens() public view returns(uint){
        return _balances[address(0xdead)];
    }

    /**
    * @notice Get circulating supply.
    * @dev This function is for get circulating supply.
     */
    function getCirculatingSupply() public view returns(uint){
        return InitialSupply-_balances[address(0xdead)];
    }

    /**
    * @notice Set the current Pair.
    * @dev This function is for set the current Pair.
    * @param Pair The pair address.
    * @param Add The status of add or remove.
     */
    function SetPair(address Pair, bool Add) internal {
        require(Pair!=_dexPairAddress,"can't readd pair");
        require(Pair != address(0),"Address should not be 0");
        isPair[Pair]=Add;
        emit NewPairSet(Pair,Add);
    }

    /**
    * @notice Add a pair.
    * @dev This function is for add a pair.
    * @param Pair The pair address.
     */
    function AddPair(address Pair) external payable onlyOwner{
        SetPair(Pair,true);
    }

    /**
    * @notice Add a pair.
    * @dev This function is for add a pair.
    * @param Pair The pair address.
     */
    function RemovePair(address Pair) external payable onlyOwner{
        SetPair(Pair,false);
    }

    /**
    * @notice Set Manual Swap Mode
    * @dev This function is for set manual swap mode.
    * @param manual The status of manual swap mode.
     */
    function SwitchManualSwap(bool manual) external payable onlyOwner{
        manualSwap=manual;
        emit ManualSwapChange(manual);
    }

    /**
    * @notice Swap contract tokens.
    * @dev This function is for swap contract tokens.
    * @param all The status of swap all tokens in contract.
     */
    function SwapContractToken(bool all) external payable onlyOwner{
        _swapContractToken(all);
        emit OwnerSwap();
    }

    /**
    * @notice Set a new router address
    * @dev This function is for set a new router address.
    * @param _newdex The new router address.
     */
    function SetNewRouter(address _newdex) external payable onlyOwner{
        require(_newdex != address(0),"Address should not be 0");
        require(_newdex != dexRouter,"Address is same");
        dexRouter = _newdex;
        emit NewRouterSet(_newdex);
    }

    /**
    * @notice Set new tax receiver wallets.
    * @dev This function is for set new tax receiver wallets.
    * @param NewInsWallet The new insurance wallet address.
    * @param NewB3_1Wallet The new b3_1 wallet address.
    * @param NewB3_2Wallet The new b3_2 wallet address.
     */
    function SetFeeWallets(
        address NewInsWallet, 
        address NewB3_1Wallet, 
        address NewB3_2Wallet
    ) external payable onlyOwner{
        require(NewInsWallet != address(0),"Address should not be 0");
        require(NewB3_1Wallet != address(0),"Address should not be 0");
        require(NewB3_2Wallet != address(0),"Address should not be 0");

        insuranceWallet = NewInsWallet;
        b3_1Wallet = NewB3_1Wallet;
        b3_2Wallet = NewB3_2Wallet;
        emit NewFeeWalletsSet(
            NewInsWallet, 
            NewB3_1Wallet, 
            NewB3_2Wallet
        );
    }

    /**
    * @notice Set Wallet Limits
    * @dev This function is for set wallet limits.
    * @param walPct The max wallet balance percent.
    * @param txnPct The max transaction amount percent.
     */
    function SetLimits(uint256 walPct, uint256 txnPct) external payable onlyOwner {
        require(walPct >= 10, "min 0.1%");
        require(walPct <= 10000, "max 100%");
        maxWalletBalance = InitialSupply * walPct / 10000;
        emit MaxWalletBalanceUpdated(walPct);

        require(txnPct >= 10, "min 0.1%");
        require(txnPct <= 10000, "max 100%");
        maxTransactionAmount = InitialSupply * txnPct / 10000;
        emit MaxTransactionAmountUpdated(txnPct);
    }

    /**
    * @notice AirDrop Tokens
    * @dev This function is for airdrop tokens.
    * @param accounts The array of address to be airdroped.
    * @param amounts The array of amount to be airdroped.
     */
    function Airdropper(address[] calldata accounts, uint256[] calldata amounts) external payable onlyOwner {
        uint256 length = accounts.length;
        require (length == amounts.length, "array length mismatched");
        uint256 airdropAmount = 0;
        
        for (uint256 i = 0; i < length; i++) {
            // updating balance directly instead of calling transfer to save gas
            _balances[accounts[i]] += amounts[i];
            airdropAmount += amounts[i];
            emit Transfer(msg.sender, accounts[i], amounts[i]);
        }
        _balances[msg.sender] -= airdropAmount;

        emit TokensAirdroped(msg.sender, length, airdropAmount);
    }

    /**
    * @notice Set to exclude an address from fees.
    * @dev This function is for set to exclude an address from fees.
    * @param account The address of user to be excluded from fees.
    * @param exclude The status of exclude.
    */
    function ExcludeAccountFromFees(address account, bool exclude) external payable onlyOwner{
        require(account!=address(this),"can't Include the contract");
        require(account != address(0),"Address should not be 0");
        excludedFromFees[account]=exclude;
        emit ExcludeAccount(account,exclude);
    }

    /**
    * @notice Set to exclude an address from transaction limits.
    * @dev This function is for set to exclude an address from transaction limits.
    * @param account The address of user to be excluded from transaction limits.
    * @param exclude The status of exclude.
    */
    function SetExcludedAccountFromTransactionLimits(address account, bool exclude) external payable onlyOwner{
        require(account != address(0),"Address should not be 0");
        excludedFromTransactionLimits[account]=exclude;
        emit ExcludeFromTransactionLimits(account,exclude);
    }

    /** 
    * @notice Set to exclude an address from wallet limits.
    * @dev This function is for set to exclude an address from wallet limits.
    * @param account The address of user to be excluded from wallet limits.
    * @param exclude The status of exclude.
    */
    function SetExcludedAccountFromWalletLimits(address account, bool exclude) external payable onlyOwner{
        require(account != address(0),"Address should not be 0");
        excludedFromWalletLimits[account]=exclude;
        emit ExcludeFromWalletLimits(account,exclude);
    }

    /**
    * @notice Used to start trading.
    * @dev This function is for used to start trading.
    */
    function SetupEnableTrading() external payable onlyOwner{
        require(LaunchBlock==0,"AlreadyLaunched");

        _dexRouter = IdexRouter(dexRouter);
        _dexPairAddress = IdexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        isPair[_dexPairAddress]=true;

        _addInitLiquidity();

        LaunchBlock=block.number;

        maxWalletBalance = InitialSupply * 12 / 10000; // 0.12%
        maxTransactionAmount = InitialSupply * 12 / 10000; // 0.12%
        emit OnEnableTrading();
    }

    receive() external payable {}

    function getOwner() external view override returns (address) {return owner();}
    function name() external pure override returns (string memory) {return _name;}
    function symbol() external pure override returns (string memory) {return _symbol;}
    function decimals() external pure override returns (uint8) {return _decimals;}
    function totalSupply() external pure override returns (uint) {return InitialSupply;}
    function balanceOf(address account) public view override returns (uint) {return _balances[account];}
    function isExcludedFromWalletLimits(address account) public view returns(bool) {return excludedFromWalletLimits[account];}
    function isExcludedFromTransferLimits(address account) public view returns(bool) {return excludedFromTransactionLimits[account];}
    function transfer(address recipient, uint amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    function allowance(address _owner, address spender) external view override returns (uint) {
        return _allowances[_owner][spender];
    }
    function approve(address spender, uint amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address _owner, address spender, uint amount) private {
        require(_owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");
        _allowances[_owner][spender] = amount;
        emit Approval(_owner, spender, amount);
    }
    function transferFrom(address sender, address recipient, uint amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        uint currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");
        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }
    function increaseAllowance(address spender, uint addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint subtractedValue) external returns (bool) {
        uint currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");
        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

    /**
    * @notice Used to remove excess ETH from contract
    * @dev This function is for used to remove excess ETH from contract.
    * @param amountPercentage The amount percentage to recover.
     */
    function emergencyETHrecovery(uint256 amountPercentage) external payable onlyOwner {
        uint256 amountETH = address(this).balance;
        (bool sent,)=msg.sender.call{value:amountETH * amountPercentage / 100}("");
            sent=true;
        emit RecoverETH();
    }
    
    /**
    * @notice Used to remove excess Tokens from contract
    * @dev This function is for used to remove excess Tokens from contract.
    * @param tokenAddress The token address to recover.
    * @param amountPercentage The amount percentage to recover.
     */
    function emergencyTokenrecovery(address tokenAddress, uint256 amountPercentage) external payable onlyOwner {
        require(tokenAddress!=address(0));
        require(tokenAddress!=address(_dexPairAddress));
        IERC20 token = IERC20(tokenAddress);
        uint256 tokenAmount = token.balanceOf(address(this));
        token.transfer(msg.sender, tokenAmount * amountPercentage / 100);

        emit RecoverTokens(tokenAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_DexRouter","type":"address"},{"internalType":"address","name":"_insWallet","type":"address"},{"internalType":"address","name":"_b3_1Wallet","type":"address"},{"internalType":"address","name":"_b3_2Wallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeFromTransactionLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeFromWalletLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitTo20PercentLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ManualSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"MaxTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"MaxWalletBalanceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"NewInsWallet","type":"address"},{"indexed":true,"internalType":"address","name":"NewB3_1Wallet","type":"address"},{"indexed":true,"internalType":"address","name":"NewB3_2Wallet","type":"address"}],"name":"NewFeeWalletsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"Pair","type":"address"},{"indexed":false,"internalType":"bool","name":"Add","type":"bool"}],"name":"NewPairSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newdex","type":"address"}],"name":"NewRouterSet","type":"event"},{"anonymous":false,"inputs":[],"name":"OnEnableTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"UnlockTimestamp","type":"uint256"}],"name":"OnProlongLPLock","type":"event"},{"anonymous":false,"inputs":[],"name":"OnReleaseLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ins","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"b3_1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"b3_2","type":"uint256"}],"name":"OnSetTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"OverLiquifiedThresholdChange","type":"event"},{"anonymous":false,"inputs":[],"name":"OwnerSwap","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":[],"name":"RecoverETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RecoverTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"SwapThresholdChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensAirdroped","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":"Pair","type":"address"}],"name":"AddPair","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"Airdropper","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"Pair","type":"address"}],"name":"RemovePair","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"SetExcludedAccountFromTransactionLimits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"SetExcludedAccountFromWalletLimits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"NewInsWallet","type":"address"},{"internalType":"address","name":"NewB3_1Wallet","type":"address"},{"internalType":"address","name":"NewB3_2Wallet","type":"address"}],"name":"SetFeeWallets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"walPct","type":"uint256"},{"internalType":"uint256","name":"txnPct","type":"uint256"}],"name":"SetLimits","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newdex","type":"address"}],"name":"SetNewRouter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"transfer_","type":"uint256"},{"internalType":"uint256","name":"ins","type":"uint256"},{"internalType":"uint256","name":"b3_1","type":"uint256"},{"internalType":"uint256","name":"b3_2","type":"uint256"}],"name":"SetTaxes","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"all","type":"bool"}],"name":"SwapContractToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"SwitchManualSwap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_b3_2tokenrcvr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"b3_1Pct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"b3_2Pct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTaxIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decreaseTaxRate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"emergencyETHrecovery","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"emergencyTokenrecovery","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"insPct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromTransferLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromWalletLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","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":"maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"yesNo","type":"bool"}],"name":"setB3_2tokenRCVR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapTresholdPermille","type":"uint256"}],"name":"setSwapTreshold","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokensForB3_1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForB3_2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForInsurance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

61119460078181556008919091556064600955610160604052610dac608081815260a091909152610bb860c0526109c460e0526105dc610100526103e861012052610190610140526200005691600a919062000a8c565b50610d05600b55610d06600c55610d05600d555f600e556004600f553480156200007e575f80fd5b5060405162003eb238038062003eb2833981016040819052620000a19162000b12565b620000ac3362000710565b601980546001600160a01b038086166001600160a01b031992831617909255601a8054858416908316179055601b805484841690831617905560178054928716929091169190911790556040805160a0808201835273be25b92099d428f959549cbe8deab0e20a82918d825273c9e7c47bf63c71452f50eaa1a69545a17027899860208301527385ae03a5846324f053bd07e28d7c14b75e90e26d82840152733ec897771308c83f3a442ab275a1f0fec82e365a60608301527344762b347be037d5c0f098530fdfd5370f19e47160808301528251908101909252905f9080620001996012600a62000c7b565b620001aa9064088980eeab62000c92565b8152602001620001bd6012600a62000c7b565b620001ce906405d21dba0062000c92565b8152602001620001e16012600a62000c7b565b620001f29064088980eeab62000c92565b8152602001620002056012600a62000c7b565b62000216906415e05a639562000c92565b8152602001620002296012600a62000c7b565b6200023a9064222603baab62000c92565b905290506200024a82826200075f565b62000704604051806101400160405280336001600160a01b03166001600160a01b0316815260200160175f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001306001600160a01b03166001600160a01b0316815260200173be25b92099d428f959549cbe8deab0e20a82918d6001600160a01b03166001600160a01b0316815260200173c9e7c47bf63c71452f50eaa1a69545a1702789986001600160a01b03166001600160a01b031681526020017385ae03a5846324f053bd07e28d7c14b75e90e26d6001600160a01b03166001600160a01b03168152602001733ec897771308c83f3a442ab275a1f0fec82e365a6001600160a01b03166001600160a01b031681526020017344762b347be037d5c0f098530fdfd5370f19e4716001600160a01b03166001600160a01b03168152602001735e1ecf03d1d776caff4f47150610519dfb0141616001600160a01b03166001600160a01b0316815260200173a576463273e4a459b39a518be7fc79ebecf6b7c76001600160a01b03166001600160a01b0316815250604051806101400160405280336001600160a01b03166001600160a01b0316815260200161dead6001600160a01b03166001600160a01b03168152602001306001600160a01b03166001600160a01b0316815260200173be25b92099d428f959549cbe8deab0e20a82918d6001600160a01b03166001600160a01b0316815260200173c9e7c47bf63c71452f50eaa1a69545a1702789986001600160a01b03166001600160a01b031681526020017385ae03a5846324f053bd07e28d7c14b75e90e26d6001600160a01b03166001600160a01b03168152602001733ec897771308c83f3a442ab275a1f0fec82e365a6001600160a01b03166001600160a01b031681526020017344762b347be037d5c0f098530fdfd5370f19e4716001600160a01b03166001600160a01b03168152602001735e1ecf03d1d776caff4f47150610519dfb0141616001600160a01b03166001600160a01b0316815260200173a576463273e4a459b39a518be7fc79ebecf6b7c76001600160a01b03166001600160a01b0316815250604051806101400160405280336001600160a01b03166001600160a01b0316815260200161dead6001600160a01b03166001600160a01b03168152602001306001600160a01b03166001600160a01b0316815260200173be25b92099d428f959549cbe8deab0e20a82918d6001600160a01b03166001600160a01b0316815260200173c9e7c47bf63c71452f50eaa1a69545a1702789986001600160a01b03166001600160a01b031681526020017385ae03a5846324f053bd07e28d7c14b75e90e26d6001600160a01b03166001600160a01b03168152602001733ec897771308c83f3a442ab275a1f0fec82e365a6001600160a01b03166001600160a01b031681526020017344762b347be037d5c0f098530fdfd5370f19e4716001600160a01b03166001600160a01b03168152602001735e1ecf03d1d776caff4f47150610519dfb0141616001600160a01b03166001600160a01b0316815260200173a576463273e4a459b39a518be7fc79ebecf6b7c76001600160a01b03166001600160a01b03168152506200094660201b60201c565b50505050505062000d07565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805b6005811015620008685782816005811062000781576200078162000cac565b602002015160015f8684600581106200079e576200079e62000cac565b60200201516001600160a01b03166001600160a01b031681526020019081526020015f2081905550828160058110620007db57620007db62000cac565b6020020151620007ec908362000cc0565b915083816005811062000803576200080362000cac565b60200201516001600160a01b03165f5f8051602062003e9283398151915285846005811062000836576200083662000cac565b60200201516040516200084b91815260200190565b60405180910390a3806200085f8162000cd6565b91505062000762565b505f620008786012600a62000c7b565b6200088990640ba43b740062000c92565b305f818152600160205260408082208490555192935090915f8051602062003e9283398151915290620008bf9085815260200190565b60405180910390a35f8183620008d86012600a62000c7b565b620008e99064e8d4a5100062000c92565b620008f5919062000cf1565b62000901919062000cf1565b335f818152600160205260408082208490555192935090915f8051602062003e9283398151915290620009379085815260200190565b60405180910390a35050505050565b5f5b600a811015620009b057600160055f8684600a81106200096c576200096c62000cac565b602090810291909101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905580620009a78162000cd6565b91505062000948565b505f5b600a81101562000a1b57600160035f8584600a8110620009d757620009d762000cac565b602090810291909101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558062000a128162000cd6565b915050620009b3565b505f5b600a81101562000a8657600160045f8484600a811062000a425762000a4262000cac565b602090810291909101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558062000a7d8162000cd6565b91505062000a1e565b50505050565b828054828255905f5260205f2090810192821562000ace579160200282015b8281111562000ace578251829061ffff1690559160200191906001019062000aab565b5062000adc92915062000ae0565b5090565b5b8082111562000adc575f815560010162000ae1565b80516001600160a01b038116811462000b0d575f80fd5b919050565b5f805f806080858703121562000b26575f80fd5b62000b318562000af6565b935062000b416020860162000af6565b925062000b516040860162000af6565b915062000b616060860162000af6565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111562000bc057815f190482111562000ba45762000ba462000b6c565b8085161562000bb257918102915b93841c939080029062000b85565b509250929050565b5f8262000bd85750600162000c75565b8162000be657505f62000c75565b816001811462000bff576002811462000c0a5762000c2a565b600191505062000c75565b60ff84111562000c1e5762000c1e62000b6c565b50506001821b62000c75565b5060208310610133831016604e8410600b841016171562000c4f575081810a62000c75565b62000c5b838362000b80565b805f190482111562000c715762000c7162000b6c565b0290505b92915050565b5f62000c8b60ff84168362000bc8565b9392505050565b808202811582820484141762000c755762000c7562000b6c565b634e487b7160e01b5f52603260045260245ffd5b8082018082111562000c755762000c7562000b6c565b5f6001820162000cea5762000cea62000b6c565b5060010190565b8181038181111562000c755762000c7562000b6c565b61317d8062000d155f395ff3fe60806040526004361061032a575f3560e01c80638da5cb5b116101a3578063d10aab47116100f2578063eb7b098011610092578063f2fde38b1161006d578063f2fde38b146108c6578063f5384b9e146108e5578063fb36abda146108fa578063fda1a43b1461091a575f80fd5b8063eb7b098014610896578063ee1748a81461089e578063eec02b71146108b3575f80fd5b8063e0d2f9eb116100cd578063e0d2f9eb1461082b578063e52fb9ec1461083e578063e5e31b1314610853578063e7b7d91c14610881575f80fd5b8063d10aab47146107a6578063dbe66ca0146107b9578063dd62ed3e146107e7575f80fd5b8063bbde77c11161015d578063c845a52311610138578063c845a52314610754578063c8c8ebe414610769578063cc1776d31461077e578063cfd1940e14610793575f80fd5b8063bbde77c1146106ed578063befe781b14610702578063c3f4f54f14610717575f80fd5b80638da5cb5b1461064457806395d89b41146106605780639697519e1461068957806397e78f351461069c578063a457c2d7146106af578063a9059cbb146106ce575f80fd5b80636940213a116102795780637b9e987a1161021957806384f21453116101f457806384f21453146105b7578063868b0141146105ca5780638912168b146105dd578063893d20e814610614575f80fd5b80637b9e987a146105875780638124f7ac1461058f57806384168dda146105a4575f80fd5b806370a082311161025457806370a0823114610517578063715018a61461054b57806372f903eb1461055f5780637822857114610574575f80fd5b80636940213a146104b85780636b672f12146104ef5780636edefa1014610504575f80fd5b80632d48f84f116102e45780634362e002116102bf5780634362e0021461045d57806345a35184146104705780634f7041a51461048357806351bc3c8514610498575f80fd5b80632d48f84f14610410578063313ce56714610423578063395093511461043e575f80fd5b8063065f4b411461033557806306fdde031461034a578063095ea7b31461038c57806318160ddd146103bb57806323b872dd146103dd5780632b112e49146103fc575f80fd5b3661033157005b5f80fd5b610348610343366004612b5a565b610939565b005b348015610355575f80fd5b506040805180820190915260088152676e737572616e636560c01b60208201525b6040516103839190612b71565b60405180910390f35b348015610397575f80fd5b506103ab6103a6366004612bd0565b6109cc565b6040519015158152602001610383565b3480156103c6575f80fd5b506103cf6109e2565b604051908152602001610383565b3480156103e8575f80fd5b506103ab6103f7366004612bfa565b610a03565b348015610407575f80fd5b506103cf610a9d565b61034861041e366004612c38565b610af0565b34801561042e575f80fd5b5060405160128152602001610383565b348015610449575f80fd5b506103ab610458366004612bd0565b610c46565b61034861046b366004612c84565b610c7c565b61034861047e366004612cee565b610cb8565b34801561048e575f80fd5b506103cf60075481565b3480156104a3575f80fd5b50601b546103ab90600160b01b900460ff1681565b3480156104c3575f80fd5b506103ab6104d2366004612d55565b6001600160a01b03165f9081526003602052604090205460ff1690565b3480156104fa575f80fd5b506103cf60115481565b610348610512366004612d70565b610e9f565b348015610522575f80fd5b506103cf610531366004612d55565b6001600160a01b03165f9081526001602052604090205490565b348015610556575f80fd5b50610348611070565b34801561056a575f80fd5b506103cf60125481565b610348610582366004612d90565b611083565b610348611104565b34801561059a575f80fd5b506103cf60095481565b6103486105b2366004612bd0565b611396565b6103486105c5366004612d55565b611502565b6103486105d8366004612c84565b611518565b3480156105e8575f80fd5b506103ab6105f7366004612d55565b6001600160a01b03165f9081526004602052604090205460ff1690565b34801561061f575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610383565b34801561064f575f80fd5b505f546001600160a01b031661062c565b34801561066b575f80fd5b506040805180820190915260018152603760f91b6020820152610376565b610348610697366004612d55565b611578565b6103486106aa366004612d55565b61158a565b3480156106ba575f80fd5b506103ab6106c9366004612bd0565b611656565b3480156106d9575f80fd5b506103ab6106e8366004612bd0565b6116d1565b3480156106f8575f80fd5b506103cf60155481565b34801561070d575f80fd5b506103cf60135481565b348015610722575f80fd5b5061dead5f5260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d546103cf565b34801561075f575f80fd5b506103cf600d5481565b348015610774575f80fd5b506103cf60145481565b348015610789575f80fd5b506103cf60085481565b6103486107a1366004612b5a565b6116dd565b6103486107b4366004612d90565b611727565b3480156107c4575f80fd5b506103ab6107d3366004612d55565b60056020525f908152604090205460ff1681565b3480156107f2575f80fd5b506103cf610801366004612dc7565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b610348610839366004612d90565b6117a8565b348015610849575f80fd5b506103cf600f5481565b34801561085e575f80fd5b506103ab61086d366004612d55565b60066020525f908152604090205460ff1681565b34801561088c575f80fd5b506103cf600c5481565b610348611881565b3480156108a9575f80fd5b506103cf600b5481565b6103486108c1366004612df3565b611945565b3480156108d1575f80fd5b506103486108e0366004612d55565b611a2c565b3480156108f0575f80fd5b506103cf600e5481565b348015610905575f80fd5b50601b546103ab90600160a01b900460ff1681565b348015610925575f80fd5b50610348610934366004612c84565b611aa2565b610941611ac8565b475f3360646109508585612e4f565b61095a9190612e66565b6040515f81818185875af1925050503d805f8114610993576040519150601f19603f3d011682016040523d82523d5f602084013e610998565b606091505b5050604051600192507fbfeaf8c13ada34fe89b506c8975a67daaf69c220fef97229c731f6cf3b3e741e91505f90a1505050565b5f6109d8338484611b21565b5060015b92915050565b5f6109ef6012600a612f65565b6109fe9064e8d4a51000612e4f565b905090565b5f610a0f848484611c13565b6001600160a01b0384165f90815260026020908152604080832033845290915290205482811015610a7e5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b60448201526064015b60405180910390fd5b610a928533610a8d8685612f73565b611b21565b506001949350505050565b61dead5f90815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54610ad76012600a612f65565b610ae69064e8d4a51000612e4f565b6109fe9190612f73565b610af8611ac8565b6103e88611158015610b0c57506103e88511155b8015610b1a57506103e88411155b610b5b5760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b6044820152606401610a75565b61271081610b698486612f86565b610b739190612f86565b14610bca5760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b6064820152608401610a75565b600786905560088590556009849055600b839055600c829055600d8190556040805187815260208101879052908101859052606081018490526080810183905260a081018290527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a1505050505050565b335f8181526002602090815260408083206001600160a01b038716845290915281205490916109d8918590610a8d908690612f86565b610c84611ac8565b610c8d81611d55565b6040517f703db25eb5fd328335fc797436bbbbd25d5575588bd991102facd962c4d41b92905f90a150565b610cc0611ac8565b82818114610d105760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d6174636865640000000000000000006044820152606401610a75565b5f805b82811015610e3857848482818110610d2d57610d2d612f99565b9050602002013560015f898985818110610d4957610d49612f99565b9050602002016020810190610d5e9190612d55565b6001600160a01b03166001600160a01b031681526020019081526020015f205f828254610d8b9190612f86565b909155508590508482818110610da357610da3612f99565b9050602002013582610db59190612f86565b9150868682818110610dc957610dc9612f99565b9050602002016020810190610dde9190612d55565b6001600160a01b0316335f80516020613128833981519152878785818110610e0857610e08612f99565b90506020020135604051610e1e91815260200190565b60405180910390a380610e3081612fad565b915050610d13565b50335f9081526001602052604081208054839290610e57908490612f73565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b610ea7611ac8565b600a821015610ee35760405162461bcd60e51b81526020600482015260086024820152676d696e20302e312560c01b6044820152606401610a75565b612710821115610f205760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b6044820152606401610a75565b61271082610f306012600a612f65565b610f3f9064e8d4a51000612e4f565b610f499190612e4f565b610f539190612e66565b6015556040518281527f9cbd2e55e2abf49d29273c1b9fb343c2828844b2aec156cfe2aec98ae1b72a999060200160405180910390a1600a811015610fc55760405162461bcd60e51b81526020600482015260086024820152676d696e20302e312560c01b6044820152606401610a75565b6127108111156110025760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b6044820152606401610a75565b612710816110126012600a612f65565b6110219064e8d4a51000612e4f565b61102b9190612e4f565b6110359190612e66565b6014556040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac906020015b60405180910390a15050565b611078611ac8565b6110815f6121ca565b565b61108b611ac8565b6001600160a01b0382166110b15760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0382165f81815260046020526040808220805460ff191685151590811790915590519092917ff97938e9b0678b0c6364c122dba242f377461e90bfc58e36611fafe49de26cf391a35050565b61110c611ac8565b6010541561114e5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b6044820152606401610a75565b601754601680546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156111a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111cc9190612ffc565b6001600160a01b031663c9c653963060165f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124f9190612ffc565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611299573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd9190612ffc565b601880546001600160a01b0319166001600160a01b039290921691821790555f908152600660205260409020805460ff191660011790556112fc612219565b4360105561271061130f6012600a612f65565b61131e9064e8d4a51000612e4f565b61132990600c612e4f565b6113339190612e66565b6015556127106113456012600a612f65565b6113549064e8d4a51000612e4f565b61135f90600c612e4f565b6113699190612e66565b6014556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc1905f90a1565b61139e611ac8565b6001600160a01b0382166113b0575f80fd5b6018546001600160a01b03908116908316036113ca575f80fd5b6040516370a0823160e01b815230600482015282905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611410573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114349190613017565b90506001600160a01b03821663a9059cbb3360646114528786612e4f565b61145c9190612e66565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156114a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c8919061302e565b506040518181527f567295618043fa7c5a9781a71d338407d59e2f8f20079734425da602e2ce9c229060200160405180910390a150505050565b61150a611ac8565b6115158160016122f8565b50565b611520611ac8565b601b8054821515600160b01b0260ff60b01b199091161790556040517f3db17fb4d29ca5a33dc4750f7205263855fb8b82cc89d6c418a04b60f58b429d9061156d90831515815260200190565b60405180910390a150565b611580611ac8565b611515815f6122f8565b611592611ac8565b6001600160a01b0381166115b85760405162461bcd60e51b8152600401610a7590612fc5565b6017546001600160a01b03908116908216036116085760405162461bcd60e51b815260206004820152600f60248201526e416464726573732069732073616d6560881b6044820152606401610a75565b601780546001600160a01b0319166001600160a01b0383169081179091556040519081527f117661539ed67d391940fa7b78853c234b4e9a40d616d75923ae8db26672833a9060200161156d565b335f9081526002602090815260408083206001600160a01b0386168452909152812054828110156116b85760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610a75565b6116c73385610a8d8685612f73565b5060019392505050565b5f6109d8338484611c13565b6116e5611ac8565b600a8111156116f2575f80fd5b600f8190556040518181527fc075380b8410207b8cc14f0d254ab8c8a6766469631275e4500db835a1ba02cc9060200161156d565b61172f611ac8565b6001600160a01b0382166117555760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0382165f81815260036020526040808220805460ff191685151590811790915590519092917f5da21567fb41924febf168d8f55dfcc045e2f686ae380b38a2132493e49713ac91a35050565b6117b0611ac8565b306001600160a01b038316036118085760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e74726163740000000000006044820152606401610a75565b6001600160a01b03821661182e5760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0382165f81815260056020526040808220805460ff191685151590811790915590519092917fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed491a35050565b611889611ac8565b600a5461189890600190612f73565b600e54106118e85760405162461bcd60e51b815260206004820152601e60248201527f416c726561647920617420746865206c6f7765737420746178207261746500006044820152606401610a75565b600e8054905f6118f783612fad565b9190505550600a600e548154811061191157611911612f99565b905f5260205f200154600781905550600a600e548154811061193557611935612f99565b5f91825260209091200154600855565b61194d611ac8565b6001600160a01b0383166119735760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0382166119995760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0381166119bf5760405162461bcd60e51b8152600401610a7590612fc5565b601980546001600160a01b03199081166001600160a01b03868116918217909355601a80548316868516908117909155601b80549093169385169384179092556040517fb9a09165bb21ee40ffcf207be749a7431e0ebedc4304b97c7043b34cf5ae537f905f90a4505050565b611a34611ac8565b6001600160a01b038116611a995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a75565b611515816121ca565b611aaa611ac8565b601b8054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b031633146110815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a75565b6001600160a01b038316611b6b5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610a75565b6001600160a01b038216611bb35760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610a75565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c5e5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610a75565b6001600160a01b038216611ca75760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610a75565b6001600160a01b0383165f9081526005602052604090205460ff1680611ce457506001600160a01b0382165f9081526005602052604090205460ff165b15611cf957611cf48383836123ca565b505050565b5f60105411611d4a5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610a75565b611cf48383836124c7565b601b805460ff60a81b1916600160a81b179055305f90815260016020526040812054600d54600c54600b54929392611d8d9190612f86565b611d979190612f86565b600f546018546001600160a01b03165f90815260016020526040812054929350916103e891611dc591612e4f565b611dcf9190612e66565b9050815f03611de0575050506121ba565b8315611dfb5750305f90815260016020526040902054611e0b565b80831015611e0b575050506121ba565b47611e15826129df565b5f611e208247612f73565b90505f8190505f85600b5486611e369190612e4f565b611e409190612e66565b90505f86600c5487611e529190612e4f565b611e5c9190612e66565b90505f87600d5488611e6e9190612e4f565b611e789190612e66565b90505f87611e868587612e4f565b611e909190612e66565b90505f88611e9e8588612e4f565b611ea89190612e66565b90505f89611eb68589612e4f565b611ec09190612e66565b90508515611f8f576019546040515f916001600160a01b03169085908381818185875af1925050503d805f8114611f12576040519150601f19603f3d011682016040523d82523d5f602084013e611f17565b606091505b5050905080611f775760405162461bcd60e51b815260206004820152602660248201527f4661696c656420746f2073656e642045544820746f20496e737572616e6365206044820152651dd85b1b195d60d21b6064820152608401610a75565b8660115f828254611f889190612f73565b9091555050505b841561205757601a546040515f916001600160a01b03169084908381818185875af1925050503d805f8114611fdf576040519150601f19603f3d011682016040523d82523d5f602084013e611fe4565b606091505b505090508061203f5760405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f2073656e642045544820746f2042335f312077616c6c656044820152601d60fa1b6064820152608401610a75565b8560125f8282546120509190612f73565b9091555050505b83156121ad57601b54600160a01b900460ff16156120eb57601b546001600160a01b03165f9081526001602052604081208054869290612098908490612f86565b925050819055508360135f8282546120b09190612f73565b9091555050601b546040518581526001600160a01b039091169030905f805160206131288339815191529060200160405180910390a36121ad565b601b546040515f916001600160a01b03169083908381818185875af1925050503d805f8114612135576040519150601f19603f3d011682016040523d82523d5f602084013e61213a565b606091505b50509050806121955760405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f2073656e642045544820746f2042335f322077616c6c656044820152601d60fa1b6064820152608401610a75565b8460135f8282546121a69190612f73565b9091555050505b5050505050505050505050505b50601b805460ff60a81b19169055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b305f818152600160205260409020546016549091612240916001600160a01b031683611b21565b6016546001600160a01b031663f305d7194730845f806122675f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156122cd573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906122f29190613049565b50505050565b6018546001600160a01b03908116908316036123495760405162461bcd60e51b815260206004820152601060248201526f31b0b713ba103932b0b232103830b4b960811b6044820152606401610a75565b6001600160a01b03821661236f5760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f6765bb5e5ecad4581ce8f9322a9c218e75a54a7c4af6217752833adb834511ac9101611064565b6001600160a01b0383165f908152600160205260409020548181101561242d5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610a75565b6001600160a01b0384165f9081526001602052604081208054849290612454908490612f73565b90915550506001600160a01b0383165f9081526001602052604081208054849290612480908490612f86565b92505081905550826001600160a01b0316846001600160a01b03165f80516020613128833981519152846040516124b991815260200190565b60405180910390a350505050565b6001600160a01b0383165f908152600160205260409020548181101561252a5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610a75565b6001600160a01b0384165f9081526003602052604081205460ff168061256757506001600160a01b0384165f9081526003602052604090205460ff165b6001600160a01b0386165f908152600460205260408120549192509060ff16806125a857506001600160a01b0385165f9081526004602052604090205460ff165b6001600160a01b0387165f9081526006602052604090205490915060ff1680156125d0575081155b15612686578061263d5760145484111561263d5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a75565b6001600160a01b0385165f908152600160205260409020546015546126628683612f86565b11156126805760405162461bcd60e51b8152600401610a7590613074565b50612728565b6001600160a01b0385165f9081526006602052604090205460ff1680156126ab575080155b15612728576014548411156127285760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610a75565b6001600160a01b038087165f9081526006602052604080822054928816825281205460ff928316921690811561278757601054600a90612769908290612f86565b43101561277b576123285b9150612781565b60085491505b5061282a565b82156127b757601054600a9061279e908290612f86565b4310156127ad57612328612774565b505060075461282a565b6001600160a01b0388165f90815260016020526040902054856127ff576015546127e18983612f86565b11156127ff5760405162461bcd60e51b8152600401610a7590613074565b601054600a90612810908290612f86565b431015612821576123289250612827565b60095492505b50505b6018546001600160a01b038a81169116148015906128525750601b54600160b01b900460ff16155b80156128685750601b54600160a81b900460ff16155b15612876576128765f611d55565b5f61289e8883600d54600c54600b5461288f9190612f86565b6128999190612f86565b612b26565b90506128ad8883600b54612b26565b60115f8282546128bd9190612f86565b925050819055506128d18883600c54612b26565b60125f8282546128e19190612f86565b925050819055506128f58883600d54612b26565b60135f8282546129059190612f86565b909155505f9050612916828a612f73565b6001600160a01b038c165f90815260016020526040812080549293508b92909190612942908490612f73565b9091555050305f9081526001602052604081208054849290612965908490612f86565b90915550506001600160a01b038a165f9081526001602052604081208054839290612991908490612f86565b92505081905550896001600160a01b03168b6001600160a01b03165f80516020613128833981519152836040516129ca91815260200190565b60405180910390a35050505050505050505050565b6016546129f79030906001600160a01b031683611b21565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a2a57612a2a612f99565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aa59190612ffc565b81600181518110612ab857612ab8612f99565b6001600160a01b03928316602091820292909201015260165460405163791ac94760e01b815291169063791ac94790612afd9085905f908690309042906004016130b8565b5f604051808303815f87803b158015612b14575f80fd5b505af1925050508015611cf457505050565b5f612b3361271080612e4f565b82612b3e8587612e4f565b612b489190612e4f565b612b529190612e66565b949350505050565b5f60208284031215612b6a575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612b9c57858101830151858201604001528201612b80565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611515575f80fd5b5f8060408385031215612be1575f80fd5b8235612bec81612bbc565b946020939093013593505050565b5f805f60608486031215612c0c575f80fd5b8335612c1781612bbc565b92506020840135612c2781612bbc565b929592945050506040919091013590565b5f805f805f8060c08789031215612c4d575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b8015158114611515575f80fd5b5f60208284031215612c94575f80fd5b8135612c9f81612c77565b9392505050565b5f8083601f840112612cb6575f80fd5b50813567ffffffffffffffff811115612ccd575f80fd5b6020830191508360208260051b8501011115612ce7575f80fd5b9250929050565b5f805f8060408587031215612d01575f80fd5b843567ffffffffffffffff80821115612d18575f80fd5b612d2488838901612ca6565b90965094506020870135915080821115612d3c575f80fd5b50612d4987828801612ca6565b95989497509550505050565b5f60208284031215612d65575f80fd5b8135612c9f81612bbc565b5f8060408385031215612d81575f80fd5b50508035926020909101359150565b5f8060408385031215612da1575f80fd5b8235612dac81612bbc565b91506020830135612dbc81612c77565b809150509250929050565b5f8060408385031215612dd8575f80fd5b8235612de381612bbc565b91506020830135612dbc81612bbc565b5f805f60608486031215612e05575f80fd5b8335612e1081612bbc565b92506020840135612e2081612bbc565b91506040840135612e3081612bbc565b809150509250925092565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176109dc576109dc612e3b565b5f82612e8057634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b80851115612ebf57815f1904821115612ea557612ea5612e3b565b80851615612eb257918102915b93841c9390800290612e8a565b509250929050565b5f82612ed5575060016109dc565b81612ee157505f6109dc565b8160018114612ef75760028114612f0157612f1d565b60019150506109dc565b60ff841115612f1257612f12612e3b565b50506001821b6109dc565b5060208310610133831016604e8410600b8410161715612f40575081810a6109dc565b612f4a8383612e85565b805f1904821115612f5d57612f5d612e3b565b029392505050565b5f612c9f60ff841683612ec7565b818103818111156109dc576109dc612e3b565b808201808211156109dc576109dc612e3b565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612fbe57612fbe612e3b565b5060010190565b60208082526017908201527f416464726573732073686f756c64206e6f742062652030000000000000000000604082015260600190565b5f6020828403121561300c575f80fd5b8151612c9f81612bbc565b5f60208284031215613027575f80fd5b5051919050565b5f6020828403121561303e575f80fd5b8151612c9f81612c77565b5f805f6060848603121561305b575f80fd5b8351925060208401519150604084015190509250925092565b60208082526024908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152633ab73a1760e11b606082015260800190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156131065784516001600160a01b0316835293830193918301916001016130e1565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220814cc869f2b30a08a66f1f4d23423c8980f21e19f6416210ca1f131b3cdd3eac64736f6c63430008150033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000a576463273e4a459b39a518be7fc79ebecf6b7c7000000000000000000000000a576463273e4a459b39a518be7fc79ebecf6b7c7000000000000000000000000a576463273e4a459b39a518be7fc79ebecf6b7c7

Deployed Bytecode

0x60806040526004361061032a575f3560e01c80638da5cb5b116101a3578063d10aab47116100f2578063eb7b098011610092578063f2fde38b1161006d578063f2fde38b146108c6578063f5384b9e146108e5578063fb36abda146108fa578063fda1a43b1461091a575f80fd5b8063eb7b098014610896578063ee1748a81461089e578063eec02b71146108b3575f80fd5b8063e0d2f9eb116100cd578063e0d2f9eb1461082b578063e52fb9ec1461083e578063e5e31b1314610853578063e7b7d91c14610881575f80fd5b8063d10aab47146107a6578063dbe66ca0146107b9578063dd62ed3e146107e7575f80fd5b8063bbde77c11161015d578063c845a52311610138578063c845a52314610754578063c8c8ebe414610769578063cc1776d31461077e578063cfd1940e14610793575f80fd5b8063bbde77c1146106ed578063befe781b14610702578063c3f4f54f14610717575f80fd5b80638da5cb5b1461064457806395d89b41146106605780639697519e1461068957806397e78f351461069c578063a457c2d7146106af578063a9059cbb146106ce575f80fd5b80636940213a116102795780637b9e987a1161021957806384f21453116101f457806384f21453146105b7578063868b0141146105ca5780638912168b146105dd578063893d20e814610614575f80fd5b80637b9e987a146105875780638124f7ac1461058f57806384168dda146105a4575f80fd5b806370a082311161025457806370a0823114610517578063715018a61461054b57806372f903eb1461055f5780637822857114610574575f80fd5b80636940213a146104b85780636b672f12146104ef5780636edefa1014610504575f80fd5b80632d48f84f116102e45780634362e002116102bf5780634362e0021461045d57806345a35184146104705780634f7041a51461048357806351bc3c8514610498575f80fd5b80632d48f84f14610410578063313ce56714610423578063395093511461043e575f80fd5b8063065f4b411461033557806306fdde031461034a578063095ea7b31461038c57806318160ddd146103bb57806323b872dd146103dd5780632b112e49146103fc575f80fd5b3661033157005b5f80fd5b610348610343366004612b5a565b610939565b005b348015610355575f80fd5b506040805180820190915260088152676e737572616e636560c01b60208201525b6040516103839190612b71565b60405180910390f35b348015610397575f80fd5b506103ab6103a6366004612bd0565b6109cc565b6040519015158152602001610383565b3480156103c6575f80fd5b506103cf6109e2565b604051908152602001610383565b3480156103e8575f80fd5b506103ab6103f7366004612bfa565b610a03565b348015610407575f80fd5b506103cf610a9d565b61034861041e366004612c38565b610af0565b34801561042e575f80fd5b5060405160128152602001610383565b348015610449575f80fd5b506103ab610458366004612bd0565b610c46565b61034861046b366004612c84565b610c7c565b61034861047e366004612cee565b610cb8565b34801561048e575f80fd5b506103cf60075481565b3480156104a3575f80fd5b50601b546103ab90600160b01b900460ff1681565b3480156104c3575f80fd5b506103ab6104d2366004612d55565b6001600160a01b03165f9081526003602052604090205460ff1690565b3480156104fa575f80fd5b506103cf60115481565b610348610512366004612d70565b610e9f565b348015610522575f80fd5b506103cf610531366004612d55565b6001600160a01b03165f9081526001602052604090205490565b348015610556575f80fd5b50610348611070565b34801561056a575f80fd5b506103cf60125481565b610348610582366004612d90565b611083565b610348611104565b34801561059a575f80fd5b506103cf60095481565b6103486105b2366004612bd0565b611396565b6103486105c5366004612d55565b611502565b6103486105d8366004612c84565b611518565b3480156105e8575f80fd5b506103ab6105f7366004612d55565b6001600160a01b03165f9081526004602052604090205460ff1690565b34801561061f575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610383565b34801561064f575f80fd5b505f546001600160a01b031661062c565b34801561066b575f80fd5b506040805180820190915260018152603760f91b6020820152610376565b610348610697366004612d55565b611578565b6103486106aa366004612d55565b61158a565b3480156106ba575f80fd5b506103ab6106c9366004612bd0565b611656565b3480156106d9575f80fd5b506103ab6106e8366004612bd0565b6116d1565b3480156106f8575f80fd5b506103cf60155481565b34801561070d575f80fd5b506103cf60135481565b348015610722575f80fd5b5061dead5f5260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d546103cf565b34801561075f575f80fd5b506103cf600d5481565b348015610774575f80fd5b506103cf60145481565b348015610789575f80fd5b506103cf60085481565b6103486107a1366004612b5a565b6116dd565b6103486107b4366004612d90565b611727565b3480156107c4575f80fd5b506103ab6107d3366004612d55565b60056020525f908152604090205460ff1681565b3480156107f2575f80fd5b506103cf610801366004612dc7565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b610348610839366004612d90565b6117a8565b348015610849575f80fd5b506103cf600f5481565b34801561085e575f80fd5b506103ab61086d366004612d55565b60066020525f908152604090205460ff1681565b34801561088c575f80fd5b506103cf600c5481565b610348611881565b3480156108a9575f80fd5b506103cf600b5481565b6103486108c1366004612df3565b611945565b3480156108d1575f80fd5b506103486108e0366004612d55565b611a2c565b3480156108f0575f80fd5b506103cf600e5481565b348015610905575f80fd5b50601b546103ab90600160a01b900460ff1681565b348015610925575f80fd5b50610348610934366004612c84565b611aa2565b610941611ac8565b475f3360646109508585612e4f565b61095a9190612e66565b6040515f81818185875af1925050503d805f8114610993576040519150601f19603f3d011682016040523d82523d5f602084013e610998565b606091505b5050604051600192507fbfeaf8c13ada34fe89b506c8975a67daaf69c220fef97229c731f6cf3b3e741e91505f90a1505050565b5f6109d8338484611b21565b5060015b92915050565b5f6109ef6012600a612f65565b6109fe9064e8d4a51000612e4f565b905090565b5f610a0f848484611c13565b6001600160a01b0384165f90815260026020908152604080832033845290915290205482811015610a7e5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b60448201526064015b60405180910390fd5b610a928533610a8d8685612f73565b611b21565b506001949350505050565b61dead5f90815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54610ad76012600a612f65565b610ae69064e8d4a51000612e4f565b6109fe9190612f73565b610af8611ac8565b6103e88611158015610b0c57506103e88511155b8015610b1a57506103e88411155b610b5b5760405162461bcd60e51b81526020600482015260126024820152710a8c2f040caf0c6cacac8e640dac2f0a8c2f60731b6044820152606401610a75565b61271081610b698486612f86565b610b739190612f86565b14610bca5760405162461bcd60e51b815260206004820152602160248201527f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f6044820152603960f91b6064820152608401610a75565b600786905560088590556009849055600b839055600c829055600d8190556040805187815260208101879052908101859052606081018490526080810183905260a081018290527f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c99060c00160405180910390a1505050505050565b335f8181526002602090815260408083206001600160a01b038716845290915281205490916109d8918590610a8d908690612f86565b610c84611ac8565b610c8d81611d55565b6040517f703db25eb5fd328335fc797436bbbbd25d5575588bd991102facd962c4d41b92905f90a150565b610cc0611ac8565b82818114610d105760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d6174636865640000000000000000006044820152606401610a75565b5f805b82811015610e3857848482818110610d2d57610d2d612f99565b9050602002013560015f898985818110610d4957610d49612f99565b9050602002016020810190610d5e9190612d55565b6001600160a01b03166001600160a01b031681526020019081526020015f205f828254610d8b9190612f86565b909155508590508482818110610da357610da3612f99565b9050602002013582610db59190612f86565b9150868682818110610dc957610dc9612f99565b9050602002016020810190610dde9190612d55565b6001600160a01b0316335f80516020613128833981519152878785818110610e0857610e08612f99565b90506020020135604051610e1e91815260200190565b60405180910390a380610e3081612fad565b915050610d13565b50335f9081526001602052604081208054839290610e57908490612f73565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b610ea7611ac8565b600a821015610ee35760405162461bcd60e51b81526020600482015260086024820152676d696e20302e312560c01b6044820152606401610a75565b612710821115610f205760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b6044820152606401610a75565b61271082610f306012600a612f65565b610f3f9064e8d4a51000612e4f565b610f499190612e4f565b610f539190612e66565b6015556040518281527f9cbd2e55e2abf49d29273c1b9fb343c2828844b2aec156cfe2aec98ae1b72a999060200160405180910390a1600a811015610fc55760405162461bcd60e51b81526020600482015260086024820152676d696e20302e312560c01b6044820152606401610a75565b6127108111156110025760405162461bcd60e51b81526020600482015260086024820152676d6178203130302560c01b6044820152606401610a75565b612710816110126012600a612f65565b6110219064e8d4a51000612e4f565b61102b9190612e4f565b6110359190612e66565b6014556040518181527f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac906020015b60405180910390a15050565b611078611ac8565b6110815f6121ca565b565b61108b611ac8565b6001600160a01b0382166110b15760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0382165f81815260046020526040808220805460ff191685151590811790915590519092917ff97938e9b0678b0c6364c122dba242f377461e90bfc58e36611fafe49de26cf391a35050565b61110c611ac8565b6010541561114e5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e53185d5b98da1959608a1b6044820152606401610a75565b601754601680546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156111a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111cc9190612ffc565b6001600160a01b031663c9c653963060165f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124f9190612ffc565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611299573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd9190612ffc565b601880546001600160a01b0319166001600160a01b039290921691821790555f908152600660205260409020805460ff191660011790556112fc612219565b4360105561271061130f6012600a612f65565b61131e9064e8d4a51000612e4f565b61132990600c612e4f565b6113339190612e66565b6015556127106113456012600a612f65565b6113549064e8d4a51000612e4f565b61135f90600c612e4f565b6113699190612e66565b6014556040517f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc1905f90a1565b61139e611ac8565b6001600160a01b0382166113b0575f80fd5b6018546001600160a01b03908116908316036113ca575f80fd5b6040516370a0823160e01b815230600482015282905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611410573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114349190613017565b90506001600160a01b03821663a9059cbb3360646114528786612e4f565b61145c9190612e66565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156114a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c8919061302e565b506040518181527f567295618043fa7c5a9781a71d338407d59e2f8f20079734425da602e2ce9c229060200160405180910390a150505050565b61150a611ac8565b6115158160016122f8565b50565b611520611ac8565b601b8054821515600160b01b0260ff60b01b199091161790556040517f3db17fb4d29ca5a33dc4750f7205263855fb8b82cc89d6c418a04b60f58b429d9061156d90831515815260200190565b60405180910390a150565b611580611ac8565b611515815f6122f8565b611592611ac8565b6001600160a01b0381166115b85760405162461bcd60e51b8152600401610a7590612fc5565b6017546001600160a01b03908116908216036116085760405162461bcd60e51b815260206004820152600f60248201526e416464726573732069732073616d6560881b6044820152606401610a75565b601780546001600160a01b0319166001600160a01b0383169081179091556040519081527f117661539ed67d391940fa7b78853c234b4e9a40d616d75923ae8db26672833a9060200161156d565b335f9081526002602090815260408083206001600160a01b0386168452909152812054828110156116b85760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610a75565b6116c73385610a8d8685612f73565b5060019392505050565b5f6109d8338484611c13565b6116e5611ac8565b600a8111156116f2575f80fd5b600f8190556040518181527fc075380b8410207b8cc14f0d254ab8c8a6766469631275e4500db835a1ba02cc9060200161156d565b61172f611ac8565b6001600160a01b0382166117555760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0382165f81815260036020526040808220805460ff191685151590811790915590519092917f5da21567fb41924febf168d8f55dfcc045e2f686ae380b38a2132493e49713ac91a35050565b6117b0611ac8565b306001600160a01b038316036118085760405162461bcd60e51b815260206004820152601a60248201527f63616e277420496e636c7564652074686520636f6e74726163740000000000006044820152606401610a75565b6001600160a01b03821661182e5760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0382165f81815260056020526040808220805460ff191685151590811790915590519092917fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed491a35050565b611889611ac8565b600a5461189890600190612f73565b600e54106118e85760405162461bcd60e51b815260206004820152601e60248201527f416c726561647920617420746865206c6f7765737420746178207261746500006044820152606401610a75565b600e8054905f6118f783612fad565b9190505550600a600e548154811061191157611911612f99565b905f5260205f200154600781905550600a600e548154811061193557611935612f99565b5f91825260209091200154600855565b61194d611ac8565b6001600160a01b0383166119735760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0382166119995760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0381166119bf5760405162461bcd60e51b8152600401610a7590612fc5565b601980546001600160a01b03199081166001600160a01b03868116918217909355601a80548316868516908117909155601b80549093169385169384179092556040517fb9a09165bb21ee40ffcf207be749a7431e0ebedc4304b97c7043b34cf5ae537f905f90a4505050565b611a34611ac8565b6001600160a01b038116611a995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a75565b611515816121ca565b611aaa611ac8565b601b8054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b031633146110815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a75565b6001600160a01b038316611b6b5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610a75565b6001600160a01b038216611bb35760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610a75565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c5e5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610a75565b6001600160a01b038216611ca75760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610a75565b6001600160a01b0383165f9081526005602052604090205460ff1680611ce457506001600160a01b0382165f9081526005602052604090205460ff165b15611cf957611cf48383836123ca565b505050565b5f60105411611d4a5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610a75565b611cf48383836124c7565b601b805460ff60a81b1916600160a81b179055305f90815260016020526040812054600d54600c54600b54929392611d8d9190612f86565b611d979190612f86565b600f546018546001600160a01b03165f90815260016020526040812054929350916103e891611dc591612e4f565b611dcf9190612e66565b9050815f03611de0575050506121ba565b8315611dfb5750305f90815260016020526040902054611e0b565b80831015611e0b575050506121ba565b47611e15826129df565b5f611e208247612f73565b90505f8190505f85600b5486611e369190612e4f565b611e409190612e66565b90505f86600c5487611e529190612e4f565b611e5c9190612e66565b90505f87600d5488611e6e9190612e4f565b611e789190612e66565b90505f87611e868587612e4f565b611e909190612e66565b90505f88611e9e8588612e4f565b611ea89190612e66565b90505f89611eb68589612e4f565b611ec09190612e66565b90508515611f8f576019546040515f916001600160a01b03169085908381818185875af1925050503d805f8114611f12576040519150601f19603f3d011682016040523d82523d5f602084013e611f17565b606091505b5050905080611f775760405162461bcd60e51b815260206004820152602660248201527f4661696c656420746f2073656e642045544820746f20496e737572616e6365206044820152651dd85b1b195d60d21b6064820152608401610a75565b8660115f828254611f889190612f73565b9091555050505b841561205757601a546040515f916001600160a01b03169084908381818185875af1925050503d805f8114611fdf576040519150601f19603f3d011682016040523d82523d5f602084013e611fe4565b606091505b505090508061203f5760405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f2073656e642045544820746f2042335f312077616c6c656044820152601d60fa1b6064820152608401610a75565b8560125f8282546120509190612f73565b9091555050505b83156121ad57601b54600160a01b900460ff16156120eb57601b546001600160a01b03165f9081526001602052604081208054869290612098908490612f86565b925050819055508360135f8282546120b09190612f73565b9091555050601b546040518581526001600160a01b039091169030905f805160206131288339815191529060200160405180910390a36121ad565b601b546040515f916001600160a01b03169083908381818185875af1925050503d805f8114612135576040519150601f19603f3d011682016040523d82523d5f602084013e61213a565b606091505b50509050806121955760405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f2073656e642045544820746f2042335f322077616c6c656044820152601d60fa1b6064820152608401610a75565b8460135f8282546121a69190612f73565b9091555050505b5050505050505050505050505b50601b805460ff60a81b19169055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b305f818152600160205260409020546016549091612240916001600160a01b031683611b21565b6016546001600160a01b031663f305d7194730845f806122675f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156122cd573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906122f29190613049565b50505050565b6018546001600160a01b03908116908316036123495760405162461bcd60e51b815260206004820152601060248201526f31b0b713ba103932b0b232103830b4b960811b6044820152606401610a75565b6001600160a01b03821661236f5760405162461bcd60e51b8152600401610a7590612fc5565b6001600160a01b0382165f81815260066020908152604091829020805460ff19168515159081179091558251938452908301527f6765bb5e5ecad4581ce8f9322a9c218e75a54a7c4af6217752833adb834511ac9101611064565b6001600160a01b0383165f908152600160205260409020548181101561242d5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610a75565b6001600160a01b0384165f9081526001602052604081208054849290612454908490612f73565b90915550506001600160a01b0383165f9081526001602052604081208054849290612480908490612f86565b92505081905550826001600160a01b0316846001600160a01b03165f80516020613128833981519152846040516124b991815260200190565b60405180910390a350505050565b6001600160a01b0383165f908152600160205260409020548181101561252a5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610a75565b6001600160a01b0384165f9081526003602052604081205460ff168061256757506001600160a01b0384165f9081526003602052604090205460ff165b6001600160a01b0386165f908152600460205260408120549192509060ff16806125a857506001600160a01b0385165f9081526004602052604090205460ff165b6001600160a01b0387165f9081526006602052604090205490915060ff1680156125d0575081155b15612686578061263d5760145484111561263d5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a75565b6001600160a01b0385165f908152600160205260409020546015546126628683612f86565b11156126805760405162461bcd60e51b8152600401610a7590613074565b50612728565b6001600160a01b0385165f9081526006602052604090205460ff1680156126ab575080155b15612728576014548411156127285760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610a75565b6001600160a01b038087165f9081526006602052604080822054928816825281205460ff928316921690811561278757601054600a90612769908290612f86565b43101561277b576123285b9150612781565b60085491505b5061282a565b82156127b757601054600a9061279e908290612f86565b4310156127ad57612328612774565b505060075461282a565b6001600160a01b0388165f90815260016020526040902054856127ff576015546127e18983612f86565b11156127ff5760405162461bcd60e51b8152600401610a7590613074565b601054600a90612810908290612f86565b431015612821576123289250612827565b60095492505b50505b6018546001600160a01b038a81169116148015906128525750601b54600160b01b900460ff16155b80156128685750601b54600160a81b900460ff16155b15612876576128765f611d55565b5f61289e8883600d54600c54600b5461288f9190612f86565b6128999190612f86565b612b26565b90506128ad8883600b54612b26565b60115f8282546128bd9190612f86565b925050819055506128d18883600c54612b26565b60125f8282546128e19190612f86565b925050819055506128f58883600d54612b26565b60135f8282546129059190612f86565b909155505f9050612916828a612f73565b6001600160a01b038c165f90815260016020526040812080549293508b92909190612942908490612f73565b9091555050305f9081526001602052604081208054849290612965908490612f86565b90915550506001600160a01b038a165f9081526001602052604081208054839290612991908490612f86565b92505081905550896001600160a01b03168b6001600160a01b03165f80516020613128833981519152836040516129ca91815260200190565b60405180910390a35050505050505050505050565b6016546129f79030906001600160a01b031683611b21565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612a2a57612a2a612f99565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612aa59190612ffc565b81600181518110612ab857612ab8612f99565b6001600160a01b03928316602091820292909201015260165460405163791ac94760e01b815291169063791ac94790612afd9085905f908690309042906004016130b8565b5f604051808303815f87803b158015612b14575f80fd5b505af1925050508015611cf457505050565b5f612b3361271080612e4f565b82612b3e8587612e4f565b612b489190612e4f565b612b529190612e66565b949350505050565b5f60208284031215612b6a575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612b9c57858101830151858201604001528201612b80565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611515575f80fd5b5f8060408385031215612be1575f80fd5b8235612bec81612bbc565b946020939093013593505050565b5f805f60608486031215612c0c575f80fd5b8335612c1781612bbc565b92506020840135612c2781612bbc565b929592945050506040919091013590565b5f805f805f8060c08789031215612c4d575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b8015158114611515575f80fd5b5f60208284031215612c94575f80fd5b8135612c9f81612c77565b9392505050565b5f8083601f840112612cb6575f80fd5b50813567ffffffffffffffff811115612ccd575f80fd5b6020830191508360208260051b8501011115612ce7575f80fd5b9250929050565b5f805f8060408587031215612d01575f80fd5b843567ffffffffffffffff80821115612d18575f80fd5b612d2488838901612ca6565b90965094506020870135915080821115612d3c575f80fd5b50612d4987828801612ca6565b95989497509550505050565b5f60208284031215612d65575f80fd5b8135612c9f81612bbc565b5f8060408385031215612d81575f80fd5b50508035926020909101359150565b5f8060408385031215612da1575f80fd5b8235612dac81612bbc565b91506020830135612dbc81612c77565b809150509250929050565b5f8060408385031215612dd8575f80fd5b8235612de381612bbc565b91506020830135612dbc81612bbc565b5f805f60608486031215612e05575f80fd5b8335612e1081612bbc565b92506020840135612e2081612bbc565b91506040840135612e3081612bbc565b809150509250925092565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176109dc576109dc612e3b565b5f82612e8057634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b80851115612ebf57815f1904821115612ea557612ea5612e3b565b80851615612eb257918102915b93841c9390800290612e8a565b509250929050565b5f82612ed5575060016109dc565b81612ee157505f6109dc565b8160018114612ef75760028114612f0157612f1d565b60019150506109dc565b60ff841115612f1257612f12612e3b565b50506001821b6109dc565b5060208310610133831016604e8410600b8410161715612f40575081810a6109dc565b612f4a8383612e85565b805f1904821115612f5d57612f5d612e3b565b029392505050565b5f612c9f60ff841683612ec7565b818103818111156109dc576109dc612e3b565b808201808211156109dc576109dc612e3b565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612fbe57612fbe612e3b565b5060010190565b60208082526017908201527f416464726573732073686f756c64206e6f742062652030000000000000000000604082015260600190565b5f6020828403121561300c575f80fd5b8151612c9f81612bbc565b5f60208284031215613027575f80fd5b5051919050565b5f6020828403121561303e575f80fd5b8151612c9f81612c77565b5f805f6060848603121561305b575f80fd5b8351925060208401519150604084015190509250925092565b60208082526024908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152633ab73a1760e11b606082015260800190565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156131065784516001600160a01b0316835293830193918301916001016130e1565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220814cc869f2b30a08a66f1f4d23423c8980f21e19f6416210ca1f131b3cdd3eac64736f6c63430008150033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000a576463273e4a459b39a518be7fc79ebecf6b7c7000000000000000000000000a576463273e4a459b39a518be7fc79ebecf6b7c7000000000000000000000000a576463273e4a459b39a518be7fc79ebecf6b7c7

-----Decoded View---------------
Arg [0] : _DexRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _insWallet (address): 0xA576463273E4A459B39a518be7fc79EbecF6B7c7
Arg [2] : _b3_1Wallet (address): 0xA576463273E4A459B39a518be7fc79EbecF6B7c7
Arg [3] : _b3_2Wallet (address): 0xA576463273E4A459B39a518be7fc79EbecF6B7c7

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000a576463273e4a459b39a518be7fc79ebecf6b7c7
Arg [2] : 000000000000000000000000a576463273e4a459b39a518be7fc79ebecf6b7c7
Arg [3] : 000000000000000000000000a576463273e4a459b39a518be7fc79ebecf6b7c7


Deployed Bytecode Sourcemap

6536:28933:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34452:280;;;;;;:::i;:::-;;:::i;:::-;;31799:78;;;;;;;;;;-1:-1:-1;31870:5:0;;;;;;;;;;;;-1:-1:-1;;;31870:5:0;;;;31799:78;;;;;;;:::i;:::-;;;;;;;;32834:158;;;;;;;;;;-1:-1:-1;32834:158:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;32834:158:0;1208:187:1;32055:84:0;;;;;;;;;;;;;:::i;:::-;;;1546:25:1;;;1534:2;1519:18;32055:84:0;1400:177:1;33302:382:0;;;;;;;;;;-1:-1:-1;33302:382:0;;;;;:::i;:::-;;:::i;24595:123::-;;;;;;;;;;;;;:::i;20099:722::-;;;;;;:::i;:::-;;:::i;31971:78::-;;;;;;;;;;-1:-1:-1;31971:78:0;;7981:2;2713:36:1;;2701:2;2686:18;31971:78:0;2571:184:1;33690:202:0;;;;;;;;;;-1:-1:-1;33690:202:0;;;;;:::i;:::-;;:::i;26117:132::-;;;;;;:::i;:::-;;:::i;28556:689::-;;;;;;:::i;:::-;;:::i;7180:25::-;;;;;;;;;;;;;;;;8476:22;;;;;;;;;;-1:-1:-1;8476:22:0;;;;-1:-1:-1;;;8476:22:0;;;;;;32251:122;;;;;;;;;;-1:-1:-1;32251:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;32338:33:0;32324:4;32338:33;;;:24;:33;;;;;;;;;32251:122;7845:30;;;;;;;;;;;;;;;;27839:492;;;;;;:::i;:::-;;:::i;32145:100::-;;;;;;;;;;-1:-1:-1;32145:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;32225:18:0;32211:4;32225:18;;;:9;:18;;;;;;;32145:100;5719:103;;;;;;;;;;;;;:::i;7882:25::-;;;;;;;;;;;;;;;;30133:299;;;;;;:::i;:::-;;:::i;31123:547::-;;;:::i;7245:29::-;;;;;;;;;;;;;;;;35019:445;;;;;;:::i;:::-;;:::i;25300:94::-;;;;;;:::i;:::-;;:::i;25797:141::-;;;;;;:::i;:::-;;:::i;32379:129::-;;;;;;;;;;-1:-1:-1;32379:129:0;;;;;:::i;:::-;-1:-1:-1;;;;;32468:38:0;32454:4;32468:38;;;:29;:38;;;;;;;;;32379:129;31715:78;;;;;;;;;;-1:-1:-1;31767:7:0;5144:6;-1:-1:-1;;;;;5144:6:0;31715:78;;;-1:-1:-1;;;;;5335:32:1;;;5317:51;;5305:2;5290:18;31715:78:0;5171:203:1;5071:87:0;;;;;;;;;;-1:-1:-1;5117:7:0;5144:6;-1:-1:-1;;;;;5144:6:0;5071:87;;31883:82;;;;;;;;;;-1:-1:-1;31956:7:0;;;;;;;;;;;;-1:-1:-1;;;31956:7:0;;;;31883:82;;25529:98;;;;;;:::i;:::-;;:::i;26420:265::-;;;;;;:::i;:::-;;:::i;33898:334::-;;;;;;;;;;-1:-1:-1;33898:334:0;;;;;:::i;:::-;;:::i;32514:164::-;;;;;;;;;;-1:-1:-1;32514:164:0;;;;;:::i;:::-;;:::i;8032:31::-;;;;;;;;;;;;;;;;7914:25;;;;;;;;;;;;;;;;24369:104;;;;;;;;;;-1:-1:-1;24457:6:0;24416:4;24439:26;:9;:26;;;;24369:104;;7479:24;;;;;;;;;;;;;;;;7990:35;;;;;;;;;;;;;;;;7212:26;;;;;;;;;;;;;;;;19277:260;;;;;;:::i;:::-;;:::i;30720:284::-;;;;;;:::i;:::-;;:::i;6833:48::-;;;;;;;;;;-1:-1:-1;6833:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32684:144;;;;;;;;;;-1:-1:-1;32684:144:0;;;;;:::i;:::-;-1:-1:-1;;;;;32792:19:0;;;32768:4;32792:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;32684:144;29505:326;;;;;;:::i;:::-;;:::i;7781:26::-;;;;;;;;;;;;;;;;6890:36;;;;;;;;;;-1:-1:-1;6890:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7448:24;;;;;;;;;;;;;;;;13553:399;;;:::i;7418:23::-;;;;;;;;;;;;;;;;26994:624;;;;;;:::i;:::-;;:::i;5977:201::-;;;;;;;;;;-1:-1:-1;5977:201:0;;;;;:::i;:::-;;:::i;7696:31::-;;;;;;;;;;;;;;;;8396:26;;;;;;;;;;-1:-1:-1;8396:26:0;;;;-1:-1:-1;;;8396:26:0;;;;;;11185:99;;;;;;;;;;-1:-1:-1;11185:99:0;;;;;:::i;:::-;;:::i;34452:280::-;4957:13;:11;:13::i;:::-;34566:21:::1;34546:17;34611:10;34664:3;34633:28;34645:16:::0;34566:21;34633:28:::1;:::i;:::-;:34;;;;:::i;:::-;34611:61;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;34712:12:0::1;::::0;34692:4:::1;::::0;-1:-1:-1;34712:12:0::1;::::0;-1:-1:-1;34712:12:0;;::::1;34535:197;;34452:280:::0;:::o;32834:158::-;32908:4;32925:37;32934:10;32946:7;32955:6;32925:8;:37::i;:::-;-1:-1:-1;32980:4:0;32834:158;;;;;:::o;32055:84::-;32110:4;7115:13;7981:2;7115;:13;:::i;:::-;7095:33;;:17;:33;:::i;:::-;32117:20;;32055:84;:::o;33302:382::-;33399:4;33416:36;33426:6;33434:9;33445:6;33416:9;:36::i;:::-;-1:-1:-1;;;;;33487:19:0;;33463:21;33487:19;;;:11;:19;;;;;;;;33507:10;33487:31;;;;;;;;33537:26;;;;33529:59;;;;-1:-1:-1;;;33529:59:0;;8628:2:1;33529:59:0;;;8610:21:1;8667:2;8647:18;;;8640:30;-1:-1:-1;;;8686:18:1;;;8679:50;8746:18;;33529:59:0;;;;;;;;;33599:55;33608:6;33616:10;33628:25;33647:6;33628:16;:25;:::i;:::-;33599:8;:55::i;:::-;-1:-1:-1;33672:4:0;;33302:382;-1:-1:-1;;;;33302:382:0:o;24595:123::-;24702:6;24647:4;24684:26;;;:9;:26;;;;7115:13;7981:2;7115;:13;:::i;:::-;7095:33;;:17;:33;:::i;:::-;24670:40;;;;:::i;20099:722::-;4957:13;:11;:13::i;:::-;7587:4:::1;20311:3;:25;;:69;;;;;7685:4;20353;:27;;20311:69;:122;;;;;7638:4;20397:9;:36;;20311:122;20289:190;;;::::0;-1:-1:-1;;;20289:190:0;;9110:2:1;20289:190:0::1;::::0;::::1;9092:21:1::0;9149:2;9129:18;;;9122:30;-1:-1:-1;;;9168:18:1;;;9161:48;9226:18;;20289:190:0::1;8908:342:1::0;20289:190:0::1;7540:5;20521:4:::0;20512:8:::1;20516:4:::0;20512:3;:8:::1;:::i;:::-;:13;;;;:::i;:::-;:30;20490:113;;;::::0;-1:-1:-1;;;20490:113:0;;9587:2:1;20490:113:0::1;::::0;::::1;9569:21:1::0;9626:2;9606:18;;;9599:30;9665:34;9645:18;;;9638:62;-1:-1:-1;;;9716:18:1;;;9709:31;9757:19;;20490:113:0::1;9385:397:1::0;20490:113:0::1;20616:6;:10:::0;;;20637:7:::1;:12:::0;;;20660:11:::1;:21:::0;;;20692:6:::1;:10:::0;;;20713:7:::1;:12:::0;;;20736:7:::1;:12:::0;;;20764:49:::1;::::0;;10074:25:1;;;10130:2;10115:18;;10108:34;;;10158:18;;;10151:34;;;10216:2;10201:18;;10194:34;;;10259:3;10244:19;;10237:35;;;10303:3;10288:19;;10281:35;;;20764:49:0::1;::::0;10061:3:1;10046:19;20764:49:0::1;;;;;;;20099:722:::0;;;;;;:::o;33690:202::-;33795:10;33769:4;33816:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;33816:32:0;;;;;;;;;;33769:4;;33786:76;;33807:7;;33816:45;;33851:10;;33816:45;:::i;26117:132::-;4957:13;:11;:13::i;:::-;26191:23:::1;26210:3;26191:18;:23::i;:::-;26230:11;::::0;::::1;::::0;;;::::1;26117:132:::0;:::o;28556:689::-;4957:13;:11;:13::i;:::-;28688:8;28723:24;;::::1;28714:61;;;::::0;-1:-1:-1;;;28714:61:0;;10529:2:1;28714:61:0::1;::::0;::::1;10511:21:1::0;10568:2;10548:18;;;10541:30;10607:25;10587:18;;;10580:53;10650:18;;28714:61:0::1;10327:347:1::0;28714:61:0::1;28786:21;28837:9:::0;28832:289:::1;28856:6;28852:1;:10;28832:289;;;28992:7;;29000:1;28992:10;;;;;;;:::i;:::-;;;;;;;28966:9;:22;28976:8;;28985:1;28976:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28966:22:0::1;-1:-1:-1::0;;;;;28966:22:0::1;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;29034:7:0;;-1:-1:-1;29034:7:0;29042:1;29034:10;;::::1;;;;;:::i;:::-;;;;;;;29017:27;;;;;:::i;:::-;;;29085:8;;29094:1;29085:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29064:45:0::1;29073:10;-1:-1:-1::0;;;;;;;;;;;29098:7:0;;29106:1;29098:10;;::::1;;;;;:::i;:::-;;;;;;;29064:45;;;;1546:25:1::0;;1534:2;1519:18;;1400:177;29064:45:0::1;;;;;;;;28864:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28832:289;;;-1:-1:-1::0;29141:10:0::1;29131:21;::::0;;;:9:::1;:21;::::0;;;;:38;;29156:13;;29131:21;:38:::1;::::0;29156:13;;29131:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;29187:50:0::1;::::0;;11125:25:1;;;11181:2;11166:18;;11159:34;;;29203:10:0::1;::::0;29187:50:::1;::::0;11098:18:1;29187:50:0::1;;;;;;;28660:585;;28556:689:::0;;;;:::o;27839:492::-;4957:13;:11;:13::i;:::-;27946:2:::1;27936:6;:12;;27928:33;;;::::0;-1:-1:-1;;;27928:33:0;;11406:2:1;27928:33:0::1;::::0;::::1;11388:21:1::0;11445:1;11425:18;;;11418:29;-1:-1:-1;;;11463:18:1;;;11456:38;11511:18;;27928:33:0::1;11204:331:1::0;27928:33:0::1;27990:5;27980:6;:15;;27972:36;;;::::0;-1:-1:-1;;;27972:36:0;;11742:2:1;27972:36:0::1;::::0;::::1;11724:21:1::0;11781:1;11761:18;;;11754:29;-1:-1:-1;;;11799:18:1;;;11792:38;11847:18;;27972:36:0::1;11540:331:1::0;27972:36:0::1;28063:5;28054:6:::0;7115:13:::1;7981:2;7115;:13;:::i;:::-;7095:33;::::0;:17:::1;:33;:::i;:::-;28038:22;;;;:::i;:::-;:30;;;;:::i;:::-;28019:16;:49:::0;28084:31:::1;::::0;1546:25:1;;;28084:31:0::1;::::0;1534:2:1;1519:18;28084:31:0::1;;;;;;;28146:2;28136:6;:12;;28128:33;;;::::0;-1:-1:-1;;;28128:33:0;;11406:2:1;28128:33:0::1;::::0;::::1;11388:21:1::0;11445:1;11425:18;;;11418:29;-1:-1:-1;;;11463:18:1;;;11456:38;11511:18;;28128:33:0::1;11204:331:1::0;28128:33:0::1;28190:5;28180:6;:15;;28172:36;;;::::0;-1:-1:-1;;;28172:36:0;;11742:2:1;28172:36:0::1;::::0;::::1;11724:21:1::0;11781:1;11761:18;;;11754:29;-1:-1:-1;;;11799:18:1;;;11792:38;11847:18;;28172:36:0::1;11540:331:1::0;28172:36:0::1;28267:5;28258:6:::0;7115:13:::1;7981:2;7115;:13;:::i;:::-;7095:33;::::0;:17:::1;:33;:::i;:::-;28242:22;;;;:::i;:::-;:30;;;;:::i;:::-;28219:20;:53:::0;28288:35:::1;::::0;1546:25:1;;;28288:35:0::1;::::0;1534:2:1;1519:18;28288:35:0::1;;;;;;;;27839:492:::0;;:::o;5719:103::-;4957:13;:11;:13::i;:::-;5784:30:::1;5811:1;5784:18;:30::i;:::-;5719:103::o:0;30133:299::-;4957:13;:11;:13::i;:::-;-1:-1:-1;;;;;30258:21:0;::::1;30250:56;;;;-1:-1:-1::0;;;30250:56:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30317:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:46;;-1:-1:-1;;30317:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30379:45;;30317:46;;:38;30379:45:::1;::::0;::::1;30133:299:::0;;:::o;31123:547::-;4957:13;:11;:13::i;:::-;31198:11:::1;::::0;:14;31190:41:::1;;;::::0;-1:-1:-1;;;31190:41:0;;12430:2:1;31190:41:0::1;::::0;::::1;12412:21:1::0;12469:2;12449:18;;;12442:30;-1:-1:-1;;;12488:18:1;;;12481:45;12543:18;;31190:41:0::1;12228:339:1::0;31190:41:0::1;31268:9;::::0;31244:10:::1;:34:::0;;-1:-1:-1;;;;;;31244:34:0::1;-1:-1:-1::0;;;;;31268:9:0;;::::1;31244:34:::0;;::::1;::::0;;31319:20:::1;::::0;;-1:-1:-1;;;31319:20:0;;;;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;31268:9;31319:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31307:44:0::1;;31360:4;31367:10;;;;;;;;;-1:-1:-1::0;;;;;31367:10:0::1;-1:-1:-1::0;;;;;31367:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31307:78;::::0;-1:-1:-1;;;;;;31307:78:0::1;::::0;;;;;;-1:-1:-1;;;;;13058:15:1;;;31307:78:0::1;::::0;::::1;13040:34:1::0;13110:15;;13090:18;;;13083:43;12975:18;;31307:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31289:15;:96:::0;;-1:-1:-1;;;;;;31289:96:0::1;-1:-1:-1::0;;;;;31289:96:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;31396:23:0;;;:6:::1;:23;::::0;;;;:28;;-1:-1:-1;;31396:28:0::1;-1:-1:-1::0;31396:28:0::1;::::0;;31437:19:::1;:17;:19::i;:::-;31481:12;31469:11;:24:::0;31546:5:::1;7115:13;7981:2;7115;:13;:::i;:::-;7095:33;::::0;:17:::1;:33;:::i;:::-;31525:18;::::0;31541:2:::1;31525:18;:::i;:::-;:26;;;;:::i;:::-;31506:16;:45:::0;31615:5:::1;7115:13;7981:2;7115;:13;:::i;:::-;7095:33;::::0;:17:::1;:33;:::i;:::-;31594:18;::::0;31610:2:::1;31594:18;:::i;:::-;:26;;;;:::i;:::-;31571:20;:49:::0;31645:17:::1;::::0;::::1;::::0;;;::::1;31123:547::o:0;35019:445::-;4957:13;:11;:13::i;:::-;-1:-1:-1;;;;;35145:24:0;::::1;35137:33;;;::::0;::::1;;35211:15;::::0;-1:-1:-1;;;;;35211:15:0;;::::1;35189:38:::0;;::::1;::::0;35181:47:::1;;;::::0;::::1;;35307:30;::::0;-1:-1:-1;;;35307:30:0;;35331:4:::1;35307:30;::::0;::::1;5317:51:1::0;35261:12:0;;35239::::1;::::0;-1:-1:-1;;;;;35307:15:0;::::1;::::0;::::1;::::0;5290:18:1;;35307:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35285:52:::0;-1:-1:-1;;;;;;35348:14:0;::::1;;35363:10;35408:3;35375:30;35389:16:::0;35285:52;35375:30:::1;:::i;:::-;:36;;;;:::i;:::-;35348:64;::::0;-1:-1:-1;;;;;;35348:64:0::1;::::0;;;;;;-1:-1:-1;;;;;13518:32:1;;;35348:64:0::1;::::0;::::1;13500:51:1::0;13567:18;;;13560:34;13473:18;;35348:64:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35430:26:0::1;::::0;1546:25:1;;;35430:26:0::1;::::0;1534:2:1;1519:18;35430:26:0::1;;;;;;;35126:338;;35019:445:::0;;:::o;25300:94::-;4957:13;:11;:13::i;:::-;25368:18:::1;25376:4;25381;25368:7;:18::i;:::-;25300:94:::0;:::o;25797:141::-;4957:13;:11;:13::i;:::-;25873:10:::1;:17:::0;;;::::1;;-1:-1:-1::0;;;25873:17:0::1;-1:-1:-1::0;;;;25873:17:0;;::::1;;::::0;;25906:24:::1;::::0;::::1;::::0;::::1;::::0;25884:6;1373:14:1;1366:22;1348:41;;1336:2;1321:18;;1208:187;25906:24:0::1;;;;;;;;25797:141:::0;:::o;25529:98::-;4957:13;:11;:13::i;:::-;25600:19:::1;25608:4;25613:5;25600:7;:19::i;26420:265::-:0;4957:13;:11;:13::i;:::-;-1:-1:-1;;;;;26504:21:0;::::1;26496:56;;;;-1:-1:-1::0;;;26496:56:0::1;;;;;;;:::i;:::-;26582:9;::::0;-1:-1:-1;;;;;26582:9:0;;::::1;26571:20:::0;;::::1;::::0;26563:47:::1;;;::::0;-1:-1:-1;;;26563:47:0;;14057:2:1;26563:47:0::1;::::0;::::1;14039:21:1::0;14096:2;14076:18;;;14069:30;-1:-1:-1;;;14115:18:1;;;14108:45;14170:18;;26563:47:0::1;13855:339:1::0;26563:47:0::1;26621:9;:19:::0;;-1:-1:-1;;;;;;26621:19:0::1;-1:-1:-1::0;;;;;26621:19:0;::::1;::::0;;::::1;::::0;;;26656:21:::1;::::0;5317:51:1;;;26656:21:0::1;::::0;5305:2:1;5290:18;26656:21:0::1;5171:203:1::0;33898:334:0;34035:10;33982:4;34023:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;34023:32:0;;;;;;;;;;34074:35;;;;34066:60;;;;-1:-1:-1;;;34066:60:0;;14401:2:1;34066:60:0;;;14383:21:1;14440:2;14420:18;;;14413:30;-1:-1:-1;;;14459:18:1;;;14452:42;14511:18;;34066:60:0;14199:336:1;34066:60:0;34137:65;34146:10;34158:7;34167:34;34186:15;34167:16;:34;:::i;34137:65::-;-1:-1:-1;34220:4:0;;33898:334;-1:-1:-1;;;33898:334:0:o;32514:164::-;32591:4;32608:40;32618:10;32630:9;32641:6;32608:9;:40::i;19277:260::-;4957:13;:11;:13::i;:::-;19402:2:::1;19377:23;:27;;19369:36;;;::::0;::::1;;19433:12;:36:::0;;;19485:44:::1;::::0;1546:25:1;;;19485:44:0::1;::::0;1534:2:1;1519:18;19485:44:0::1;1400:177:1::0;30720:284:0;4957:13;:11;:13::i;:::-;-1:-1:-1;;;;;30840:21:0;::::1;30832:56;;;;-1:-1:-1::0;;;30832:56:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30899:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:41;;-1:-1:-1;;30899:41:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30956:40;;30899:41;;:33;30956:40:::1;::::0;::::1;30720:284:::0;;:::o;29505:326::-;4957:13;:11;:13::i;:::-;29630:4:::1;-1:-1:-1::0;;;;;29613:22:0;::::1;::::0;29605:60:::1;;;::::0;-1:-1:-1;;;29605:60:0;;14742:2:1;29605:60:0::1;::::0;::::1;14724:21:1::0;14781:2;14761:18;;;14754:30;14820:28;14800:18;;;14793:56;14866:18;;29605:60:0::1;14540:350:1::0;29605:60:0::1;-1:-1:-1::0;;;;;29684:21:0;::::1;29676:56;;;;-1:-1:-1::0;;;29676:56:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29743:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;:33;;-1:-1:-1;;29743:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29792:31;;29743:33;;:25;29792:31:::1;::::0;::::1;29505:326:::0;;:::o;13553:399::-;4957:13;:11;:13::i;:::-;13644:12:::1;:19:::0;:23:::1;::::0;13666:1:::1;::::0;13644:23:::1;:::i;:::-;13626:15;;:41;13618:84;;;::::0;-1:-1:-1;;;13618:84:0;;15097:2:1;13618:84:0::1;::::0;::::1;15079:21:1::0;15136:2;15116:18;;;15109:30;15175:32;15155:18;;;15148:60;15225:18;;13618:84:0::1;14895:354:1::0;13618:84:0::1;13780:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;13865:12;13878:15;;13865:29;;;;;;;;:::i;:::-;;;;;;;;;13856:6;:38;;;;13915:12;13928:15;;13915:29;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;13905:7:::1;:39:::0;13553:399::o;26994:624::-;4957:13;:11;:13::i;:::-;-1:-1:-1;;;;;27166:26:0;::::1;27158:61;;;;-1:-1:-1::0;;;27158:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27238:27:0;::::1;27230:62;;;;-1:-1:-1::0;;;27230:62:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27311:27:0;::::1;27303:62;;;;-1:-1:-1::0;;;27303:62:0::1;;;;;;;:::i;:::-;27378:15;:30:::0;;-1:-1:-1;;;;;;27378:30:0;;::::1;-1:-1:-1::0;;;;;27378:30:0;;::::1;::::0;;::::1;::::0;;;27419:10:::1;:26:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;27456:10:::1;:26:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;27498:112:::1;::::0;::::1;::::0;-1:-1:-1;;27498:112:0::1;26994:624:::0;;;:::o;5977:201::-;4957:13;:11;:13::i;:::-;-1:-1:-1;;;;;6066:22:0;::::1;6058:73;;;::::0;-1:-1:-1;;;6058:73:0;;15456:2:1;6058:73:0::1;::::0;::::1;15438:21:1::0;15495:2;15475:18;;;15468:30;15534:34;15514:18;;;15507:62;-1:-1:-1;;;15585:18:1;;;15578:36;15631:19;;6058:73:0::1;15254:402:1::0;6058:73:0::1;6142:28;6161:8;6142:18;:28::i;11185:99::-:0;4957:13;:11;:13::i;:::-;11254:14:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;11254:22:0::1;-1:-1:-1::0;;;;11254:22:0;;::::1;::::0;;;::::1;::::0;;11185:99::o;5236:132::-;5117:7;5144:6;-1:-1:-1;;;;;5144:6:0;3729:10;5300:23;5292:68;;;;-1:-1:-1;;;5292:68:0;;15863:2:1;5292:68:0;;;15845:21:1;;;15882:18;;;15875:30;15941:34;15921:18;;;15914:62;15993:18;;5292:68:0;15661:356:1;32998:298:0;-1:-1:-1;;;;;33089:20:0;;33081:50;;;;-1:-1:-1;;;33081:50:0;;16224:2:1;33081:50:0;;;16206:21:1;16263:2;16243:18;;;16236:30;-1:-1:-1;;;16282:18:1;;;16275:47;16339:18;;33081:50:0;16022:341:1;33081:50:0;-1:-1:-1;;;;;33150:21:0;;33142:49;;;;-1:-1:-1;;;33142:49:0;;16570:2:1;33142:49:0;;;16552:21:1;16609:2;16589:18;;;16582:30;-1:-1:-1;;;16628:18:1;;;16621:45;16683:18;;33142:49:0;16368:339:1;33142:49:0;-1:-1:-1;;;;;33202:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;33255:33;;1546:25:1;;;33255:33:0;;1519:18:1;33255:33:0;;;;;;;32998:298;;;:::o;14059:484::-;-1:-1:-1;;;;;14154:20:0;;14146:51;;;;-1:-1:-1;;;14146:51:0;;16914:2:1;14146:51:0;;;16896:21:1;16953:2;16933:18;;;16926:30;-1:-1:-1;;;16972:18:1;;;16965:48;17030:18;;14146:51:0;16712:342:1;14146:51:0;-1:-1:-1;;;;;14216:23:0;;14208:52;;;;-1:-1:-1;;;14208:52:0;;17261:2:1;14208:52:0;;;17243:21:1;17300:2;17280:18;;;17273:30;-1:-1:-1;;;17319:18:1;;;17312:46;17375:18;;14208:52:0;17059:340:1;14208:52:0;-1:-1:-1;;;;;14276:24:0;;;;;;:16;:24;;;;;;;;;:55;;-1:-1:-1;;;;;;14304:27:0;;;;;;:16;:27;;;;;;;;14276:55;14273:263;;;14346:43;14363:6;14371:9;14382:6;14346:16;:43::i;:::-;14059:484;;;:::o;14273:263::-;14442:1;14430:11;;:13;14422:48;;;;-1:-1:-1;;;14422:48:0;;17606:2:1;14422:48:0;;;17588:21:1;17645:2;17625:18;;;17618:30;17684:25;17664:18;;;17657:53;17727:18;;14422:48:0;17404:347:1;14422:48:0;14485:39;14500:6;14507:9;14517:6;14485:14;:39::i;20978:2147::-;8556:27;:34;;-1:-1:-1;;;;8556:34:0;-1:-1:-1;;;8556:34:0;;;21098:4:::1;8556:34:::0;21080:24;;;8586:4;21080:24:::1;::::0;;;;;21150:7:::1;::::0;21140::::1;::::0;21131:6:::1;::::0;21080:24;;8556:34;21131:16:::1;::::0;21140:7;21131:16:::1;:::i;:::-;:26;;;;:::i;:::-;21218:12;::::0;21199:15:::1;::::0;-1:-1:-1;;;;;21199:15:0::1;21168:17;21189:26:::0;;;:9:::1;:26;::::0;;;;;21115:42;;-1:-1:-1;21168:17:0;21234:4:::1;::::0;21189:41:::1;::::0;::::1;:::i;:::-;21188:50;;;;:::i;:::-;21168:70;;21255:8;21267:1;21255:13:::0;21251:26:::1;;21270:7;;;;;21251:26;21293:12;21289:159;;;-1:-1:-1::0;21355:4:0::1;21337:24;::::0;;;:9:::1;:24;::::0;;;;;21289:159:::1;;;21401:12;21383:15;:30;21379:69;;;21430:7;;;;;21379:69;21485:21;21519:30;21536:12:::0;21519:16:::1;:30::i;:::-;21562:11;21576:41;21600:17:::0;21576:21:::1;:41;:::i;:::-;21562:55;;21628:15;21646:6;21628:24;;21665:27;21721:8;21711:6;;21696:12;:21;;;;:::i;:::-;21695:34;;;;:::i;:::-;21665:64;;21740:22;21792:8;21781:7;;21766:12;:22;;;;:::i;:::-;21765:35;;;;:::i;:::-;21740:60;;21811:22;21863:8;21852:7;;21837:12;:22;;;;:::i;:::-;21836:35;;;;:::i;:::-;21811:60:::0;-1:-1:-1;21882:20:0::1;21945:12:::0;21906:35:::1;21919:22:::0;21906:10;:35:::1;:::i;:::-;21905:52;;;;:::i;:::-;21882:75:::0;-1:-1:-1;21968:15:0::1;22021:12:::0;21987:30:::1;22000:17:::0;21987:10;:30:::1;:::i;:::-;21986:47;;;;:::i;:::-;21968:65:::0;-1:-1:-1;22044:15:0::1;22097:12:::0;22063:30:::1;22076:17:::0;22063:10;:30:::1;:::i;:::-;22062:47;;;;:::i;:::-;22044:65:::0;-1:-1:-1;22126:27:0;;22122:252:::1;;22185:15;::::0;:48:::1;::::0;22171:9:::1;::::0;-1:-1:-1;;;;;22185:15:0::1;::::0;22213;;22171:9;22185:48;22171:9;22185:48;22213:15;22185;:48:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22170:63;;;22256:4;22248:55;;;::::0;-1:-1:-1;;;22248:55:0;;17958:2:1;22248:55:0::1;::::0;::::1;17940:21:1::0;17997:2;17977:18;;;17970:30;18036:34;18016:18;;;18009:62;-1:-1:-1;;;18087:18:1;;;18080:36;18133:19;;22248:55:0::1;17756:402:1::0;22248:55:0::1;22340:22;22318:18;;:44;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;22122:252:0::1;22390:22:::0;;22386:222:::1;;22444:10;::::0;:38:::1;::::0;22430:9:::1;::::0;-1:-1:-1;;;;;22444:10:0::1;::::0;22467;;22430:9;22444:38;22430:9;22444:38;22467:10;22444;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22429:53;;;22505:4;22497:50;;;::::0;-1:-1:-1;;;22497:50:0;;18365:2:1;22497:50:0::1;::::0;::::1;18347:21:1::0;18404:2;18384:18;;;18377:30;18443:34;18423:18;;;18416:62;-1:-1:-1;;;18494:18:1;;;18487:31;18535:19;;22497:50:0::1;18163:397:1::0;22497:50:0::1;22579:17;22562:13;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;22386:222:0::1;22624:22:::0;;22620:498:::1;;22667:14;::::0;-1:-1:-1;;;22667:14:0;::::1;;;22663:444;;;22712:10;::::0;-1:-1:-1;;;;;22712:10:0::1;22702:21;::::0;;;:9:::1;:21;::::0;;;;:42;;22727:17;;22702:21;:42:::1;::::0;22727:17;;22702:42:::1;:::i;:::-;;;;;;;;22780:17;22763:13;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22845:10:0::1;::::0;22821:54:::1;::::0;1546:25:1;;;-1:-1:-1;;;;;22845:10:0;;::::1;::::0;22838:4:::1;::::0;-1:-1:-1;;;;;;;;;;;22821:54:0;1534:2:1;1519:18;22821:54:0::1;;;;;;;22663:444;;;22931:10;::::0;:38:::1;::::0;22917:9:::1;::::0;-1:-1:-1;;;;;22931:10:0::1;::::0;22954;;22917:9;22931:38;22917:9;22931:38;22954:10;22931;:38:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22916:53;;;22996:4;22988:50;;;::::0;-1:-1:-1;;;22988:50:0;;18767:2:1;22988:50:0::1;::::0;::::1;18749:21:1::0;18806:2;18786:18;;;18779:30;18845:34;18825:18;;;18818:62;-1:-1:-1;;;18896:18:1;;;18889:31;18937:19;;22988:50:0::1;18565:397:1::0;22988:50:0::1;23074:17;23057:13;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;22663:444:0::1;21046:2079;;;;;;;;;;;;8601:1;-1:-1:-1::0;8613:27:0;:35;;-1:-1:-1;;;;8613:35:0;;;20978:2147::o;6338:191::-;6412:16;6431:6;;-1:-1:-1;;;;;6448:17:0;;;-1:-1:-1;;;;;;6448:17:0;;;;;;6481:40;;6431:6;;;;;;;6481:40;;6412:16;6481:40;6401:128;6338:191;:::o;23875:383::-;23960:4;23923:16;32225:18;;;:9;:18;;;;;;24009:10;;32225:18;;23977:57;;-1:-1:-1;;;;;24009:10:0;32225:18;23977:8;:57::i;:::-;24045:10;;-1:-1:-1;;;;;24045:10:0;:26;24079:21;24124:4;24144:11;24045:10;;24202:7;5117;5144:6;-1:-1:-1;;;;;5144:6:0;;5071:87;24202:7;24045:205;;;;;;-1:-1:-1;;;;;;24045:205:0;;;-1:-1:-1;;;;;19326:15:1;;;24045:205:0;;;19308:34:1;19358:18;;;19351:34;;;;19401:18;;;19394:34;;;;19444:18;;;19437:34;19508:15;;;19487:19;;;19480:44;24224:15:0;19540:19:1;;;19533:35;19242:19;;24045:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23912:346;23875:383::o;24920:245::-;24995:15;;-1:-1:-1;;;;;24995:15:0;;;24989:21;;;;24981:49;;;;-1:-1:-1;;;24981:49:0;;20092:2:1;24981:49:0;;;20074:21:1;20131:2;20111:18;;;20104:30;-1:-1:-1;;;20150:18:1;;;20143:46;20206:18;;24981:49:0;19890:340:1;24981:49:0;-1:-1:-1;;;;;25049:18:0;;25041:53;;;;-1:-1:-1;;;25041:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25105:12:0;;;;;;:6;:12;;;;;;;;;:16;;-1:-1:-1;;25105:16:0;;;;;;;;;;25137:20;;20403:51:1;;;20470:18;;;20463:50;25137:20:0;;20376:18:1;25137:20:0;20235:284:1;18752:335:0;-1:-1:-1;;;;;18867:17:0;;18846:18;18867:17;;;:9;:17;;;;;;18903:23;;;;18895:60;;;;-1:-1:-1;;;18895:60:0;;20726:2:1;18895:60:0;;;20708:21:1;20765:2;20745:18;;;20738:30;-1:-1:-1;;;20784:18:1;;;20777:54;20848:18;;18895:60:0;20524:348:1;18895:60:0;-1:-1:-1;;;;;18966:17:0;;;;;;:9;:17;;;;;:25;;18985:6;;18966:17;:25;;18985:6;;18966:25;:::i;:::-;;;;-1:-1:-1;;;;;;;19002:20:0;;;;;;:9;:20;;;;;:28;;19024:6;;19002:20;:28;;19024:6;;19002:28;:::i;:::-;;;;;;;;19062:9;-1:-1:-1;;;;;19046:33:0;19055:6;-1:-1:-1;;;;;19046:33:0;-1:-1:-1;;;;;;;;;;;19072:6:0;19046:33;;;;1546:25:1;;1534:2;1519:18;;1400:177;19046:33:0;;;;;;;;18835:252;18752:335;;;:::o;14795:2984::-;-1:-1:-1;;;;;14908:17:0;;14887:18;14908:17;;;:9;:17;;;;;;14944:23;;;;14936:60;;;;-1:-1:-1;;;14936:60:0;;20726:2:1;14936:60:0;;;20708:21:1;20765:2;20745:18;;;20738:30;-1:-1:-1;;;20784:18:1;;;20777:54;20848:18;;14936:60:0;20524:348:1;14936:60:0;-1:-1:-1;;;;;15046:32:0;;15007:36;15046:32;;;:24;:32;;;;;;;;;:71;;-1:-1:-1;;;;;;15082:35:0;;;;;;:24;:35;;;;;;;;15046:71;-1:-1:-1;;;;;15164:37:0;;15128:33;15164:37;;;:29;:37;;;;;;15007:110;;-1:-1:-1;15128:33:0;15164:37;;;:81;;-1:-1:-1;;;;;;15205:40:0;;;;;;:29;:40;;;;;;;;15164:81;-1:-1:-1;;;;;15274:14:0;;;;;;:6;:14;;;;;;15128:117;;-1:-1:-1;15274:14:0;;:63;;;;;15306:31;15305:32;15274:63;15256:786;;;15368:28;15364:204;;15452:20;;15442:6;:30;;15416:136;;;;-1:-1:-1;;;15416:136:0;;21079:2:1;15416:136:0;;;21061:21:1;21118:2;21098:18;;;21091:30;21157:34;21137:18;;;21130:62;-1:-1:-1;;;21208:18:1;;;21201:38;21256:19;;15416:136:0;20877:404:1;15416:136:0;-1:-1:-1;;;;;32225:18:0;;15582:32;32225:18;;;:9;:18;;;;;;15715:16;;15678:33;15705:6;32225:18;15678:33;:::i;:::-;:53;;15652:151;;;;-1:-1:-1;;;15652:151:0;;;;;;;:::i;:::-;15349:466;15256:786;;;-1:-1:-1;;;;;15839:17:0;;;;;;:6;:17;;;;;;;;:63;;;;;15874:28;15873:29;15839:63;15821:221;;;15947:20;;15937:6;:30;;15929:101;;;;-1:-1:-1;;;15929:101:0;;21893:2:1;15929:101:0;;;21875:21:1;21932:2;21912:18;;;21905:30;21971:34;21951:18;;;21944:62;22042:28;22022:18;;;22015:56;22088:19;;15929:101:0;21691:422:1;15929:101:0;-1:-1:-1;;;;;16065:14:0;;;16054:10;16065:14;;;:6;:14;;;;;;;16102:17;;;;;;;;16065:14;;;;;16102:17;;16151:984;;;;16274:11;;16241:2;;16274:27;;16241:2;;16274:27;:::i;:::-;16261:12;:40;16258:114;;;17983:4;16325:14;16321:18;;16258:114;;;16365:7;;16361:11;;16258:114;16162:222;16151:984;;;16402:5;16399:736;;;16523:11;;16490:2;;16523:26;;16490:2;;16523:26;:::i;:::-;16510:12;:39;16507:112;;;17983:4;16573:14;17906:115;16507:112;-1:-1:-1;;16613:6:0;;16399:736;;;-1:-1:-1;;;;;32225:18:0;;16653:32;32225:18;;;:9;:18;;;;;;16727:31;16723:222;;16837:16;;16800:33;16827:6;16800:24;:33;:::i;:::-;:53;;16774:155;;;;-1:-1:-1;;;16774:155:0;;;;;;;:::i;:::-;17017:11;;16984:2;;17017:31;;16984:2;;17017:31;:::i;:::-;17004:12;:44;17001:122;;;17983:4;17068:18;;17001:122;;;17112:11;;17108:15;;17001:122;16637:498;;16399:736;17159:15;;-1:-1:-1;;;;;17151:23:0;;;17159:15;;17151:23;;;;17150:40;;-1:-1:-1;17179:10:0;;-1:-1:-1;;;17179:10:0;;;;17178:11;17150:40;:72;;;;-1:-1:-1;17194:27:0;;-1:-1:-1;;;17194:27:0;;;;17193:28;17150:72;17147:111;;;17233:25;17252:5;17233:18;:25::i;:::-;17269:18;17288:50;17302:6;17310:3;17330:7;;17322;;17315:6;;:14;;;;:::i;:::-;:22;;;;:::i;:::-;17288:13;:50::i;:::-;17269:69;;17369:34;17383:6;17391:3;17396:6;;17369:13;:34::i;:::-;17349:18;;:54;;;;;;;:::i;:::-;;;;;;;;17429:35;17443:6;17451:3;17456:7;;17429:13;:35::i;:::-;17414:13;;:50;;;;;;;:::i;:::-;;;;;;;;17490:35;17504:6;17512:3;17517:7;;17490:13;:35::i;:::-;17475:13;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;17536:16:0;;-1:-1:-1;17553:20:0;17560:13;17553:6;:20;:::i;:::-;-1:-1:-1;;;;;17586:17:0;;;;;;:9;:17;;;;;:25;;17536:37;;-1:-1:-1;17605:6:0;;17586:17;;;:25;;17605:6;;17586:25;:::i;:::-;;;;-1:-1:-1;;17640:4:0;17622:24;;;;:9;:24;;;;;:41;;17650:13;;17622:24;:41;;17650:13;;17622:41;:::i;:::-;;;;-1:-1:-1;;;;;;;17674:20:0;;;;;;:9;:20;;;;;:33;;17696:11;;17674:20;:33;;17696:11;;17674:33;:::i;:::-;;;;;;;;17749:9;-1:-1:-1;;;;;17733:38:0;17742:6;-1:-1:-1;;;;;17733:38:0;-1:-1:-1;;;;;;;;;;;17759:11:0;17733:38;;;;1546:25:1;;1534:2;1519:18;;1400:177;17733:38:0;;;;;;;;14876:2903;;;;;;;;14795:2984;;;:::o;23287:462::-;23377:10;;23345:52;;23362:4;;-1:-1:-1;;;;;23377:10:0;23390:6;23345:8;:52::i;:::-;23432:16;;;23446:1;23432:16;;;;;;;;23408:21;;23432:16;;;;;;;;;;-1:-1:-1;23432:16:0;23408:40;;23477:4;23459;23464:1;23459:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23459:23:0;;;:7;;;;;;;;;;:23;;;;23503:10;;:17;;;-1:-1:-1;;;23503:17:0;;;;:10;;;;;:15;;:17;;;;;23459:7;;23503:17;;;;;:10;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23493:4;23498:1;23493:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23493:27:0;;;:7;;;;;;;;;:27;23537:10;;:186;;-1:-1:-1;;;23537:186:0;;:10;;;:61;;:186;;23613:6;;23537:10;;23650:4;;23677;;23697:15;;23537:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23334:415;23287:462;:::o;18260:177::-;18346:4;18397:31;7540:5;;18397:31;:::i;:::-;18382:10;18371;18378:3;18371:6;:10;:::i;:::-;:21;;;;:::i;:::-;18370:59;;;;:::i;:::-;18363:66;18260:177;-1:-1:-1;;;;18260:177:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;888:315;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;1582:456::-;1659:6;1667;1675;1728:2;1716:9;1707:7;1703:23;1699:32;1696:52;;;1744:1;1741;1734:12;1696:52;1783:9;1770:23;1802:31;1827:5;1802:31;:::i;:::-;1852:5;-1:-1:-1;1909:2:1;1894:18;;1881:32;1922:33;1881:32;1922:33;:::i;:::-;1582:456;;1974:7;;-1:-1:-1;;;2028:2:1;2013:18;;;;2000:32;;1582:456::o;2043:523::-;2147:6;2155;2163;2171;2179;2187;2240:3;2228:9;2219:7;2215:23;2211:33;2208:53;;;2257:1;2254;2247:12;2208:53;-1:-1:-1;;2280:23:1;;;2350:2;2335:18;;2322:32;;-1:-1:-1;2401:2:1;2386:18;;2373:32;;2452:2;2437:18;;2424:32;;-1:-1:-1;2503:3:1;2488:19;;2475:33;;-1:-1:-1;2555:3:1;2540:19;2527:33;;-1:-1:-1;2043:523:1;-1:-1:-1;2043:523:1:o;2760:118::-;2846:5;2839:13;2832:21;2825:5;2822:32;2812:60;;2868:1;2865;2858:12;2883:241;2939:6;2992:2;2980:9;2971:7;2967:23;2963:32;2960:52;;;3008:1;3005;2998:12;2960:52;3047:9;3034:23;3066:28;3088:5;3066:28;:::i;:::-;3113:5;2883:241;-1:-1:-1;;;2883:241:1:o;3129:367::-;3192:8;3202:6;3256:3;3249:4;3241:6;3237:17;3233:27;3223:55;;3274:1;3271;3264:12;3223:55;-1:-1:-1;3297:20:1;;3340:18;3329:30;;3326:50;;;3372:1;3369;3362:12;3326:50;3409:4;3401:6;3397:17;3385:29;;3469:3;3462:4;3452:6;3449:1;3445:14;3437:6;3433:27;3429:38;3426:47;3423:67;;;3486:1;3483;3476:12;3423:67;3129:367;;;;;:::o;3501:773::-;3623:6;3631;3639;3647;3700:2;3688:9;3679:7;3675:23;3671:32;3668:52;;;3716:1;3713;3706:12;3668:52;3756:9;3743:23;3785:18;3826:2;3818:6;3815:14;3812:34;;;3842:1;3839;3832:12;3812:34;3881:70;3943:7;3934:6;3923:9;3919:22;3881:70;:::i;:::-;3970:8;;-1:-1:-1;3855:96:1;-1:-1:-1;4058:2:1;4043:18;;4030:32;;-1:-1:-1;4074:16:1;;;4071:36;;;4103:1;4100;4093:12;4071:36;;4142:72;4206:7;4195:8;4184:9;4180:24;4142:72;:::i;:::-;3501:773;;;;-1:-1:-1;4233:8:1;-1:-1:-1;;;;3501:773:1:o;4279:247::-;4338:6;4391:2;4379:9;4370:7;4366:23;4362:32;4359:52;;;4407:1;4404;4397:12;4359:52;4446:9;4433:23;4465:31;4490:5;4465:31;:::i;4531:248::-;4599:6;4607;4660:2;4648:9;4639:7;4635:23;4631:32;4628:52;;;4676:1;4673;4666:12;4628:52;-1:-1:-1;;4699:23:1;;;4769:2;4754:18;;;4741:32;;-1:-1:-1;4531:248:1:o;4784:382::-;4849:6;4857;4910:2;4898:9;4889:7;4885:23;4881:32;4878:52;;;4926:1;4923;4916:12;4878:52;4965:9;4952:23;4984:31;5009:5;4984:31;:::i;:::-;5034:5;-1:-1:-1;5091:2:1;5076:18;;5063:32;5104:30;5063:32;5104:30;:::i;:::-;5153:7;5143:17;;;4784:382;;;;;:::o;5379:388::-;5447:6;5455;5508:2;5496:9;5487:7;5483:23;5479:32;5476:52;;;5524:1;5521;5514:12;5476:52;5563:9;5550:23;5582:31;5607:5;5582:31;:::i;:::-;5632:5;-1:-1:-1;5689:2:1;5674:18;;5661:32;5702:33;5661:32;5702:33;:::i;5772:529::-;5849:6;5857;5865;5918:2;5906:9;5897:7;5893:23;5889:32;5886:52;;;5934:1;5931;5924:12;5886:52;5973:9;5960:23;5992:31;6017:5;5992:31;:::i;:::-;6042:5;-1:-1:-1;6099:2:1;6084:18;;6071:32;6112:33;6071:32;6112:33;:::i;:::-;6164:7;-1:-1:-1;6223:2:1;6208:18;;6195:32;6236:33;6195:32;6236:33;:::i;:::-;6288:7;6278:17;;;5772:529;;;;;:::o;6306:127::-;6367:10;6362:3;6358:20;6355:1;6348:31;6398:4;6395:1;6388:15;6422:4;6419:1;6412:15;6438:168;6511:9;;;6542;;6559:15;;;6553:22;;6539:37;6529:71;;6580:18;;:::i;6611:217::-;6651:1;6677;6667:132;;6721:10;6716:3;6712:20;6709:1;6702:31;6756:4;6753:1;6746:15;6784:4;6781:1;6774:15;6667:132;-1:-1:-1;6813:9:1;;6611:217::o;7043:422::-;7132:1;7175:5;7132:1;7189:270;7210:7;7200:8;7197:21;7189:270;;;7269:4;7265:1;7261:6;7257:17;7251:4;7248:27;7245:53;;;7278:18;;:::i;:::-;7328:7;7318:8;7314:22;7311:55;;;7348:16;;;;7311:55;7427:22;;;;7387:15;;;;7189:270;;;7193:3;7043:422;;;;;:::o;7470:806::-;7519:5;7549:8;7539:80;;-1:-1:-1;7590:1:1;7604:5;;7539:80;7638:4;7628:76;;-1:-1:-1;7675:1:1;7689:5;;7628:76;7720:4;7738:1;7733:59;;;;7806:1;7801:130;;;;7713:218;;7733:59;7763:1;7754:10;;7777:5;;;7801:130;7838:3;7828:8;7825:17;7822:43;;;7845:18;;:::i;:::-;-1:-1:-1;;7901:1:1;7887:16;;7916:5;;7713:218;;8015:2;8005:8;8002:16;7996:3;7990:4;7987:13;7983:36;7977:2;7967:8;7964:16;7959:2;7953:4;7950:12;7946:35;7943:77;7940:159;;;-1:-1:-1;8052:19:1;;;8084:5;;7940:159;8131:34;8156:8;8150:4;8131:34;:::i;:::-;8201:6;8197:1;8193:6;8189:19;8180:7;8177:32;8174:58;;;8212:18;;:::i;:::-;8250:20;;7470:806;-1:-1:-1;;;7470:806:1:o;8281:140::-;8339:5;8368:47;8409:4;8399:8;8395:19;8389:4;8368:47;:::i;8775:128::-;8842:9;;;8863:11;;;8860:37;;;8877:18;;:::i;9255:125::-;9320:9;;;9341:10;;;9338:36;;;9354:18;;:::i;10679:127::-;10740:10;10735:3;10731:20;10728:1;10721:31;10771:4;10768:1;10761:15;10795:4;10792:1;10785:15;10811:135;10850:3;10871:17;;;10868:43;;10891:18;;:::i;:::-;-1:-1:-1;10938:1:1;10927:13;;10811:135::o;11876:347::-;12078:2;12060:21;;;12117:2;12097:18;;;12090:30;12156:25;12151:2;12136:18;;12129:53;12214:2;12199:18;;11876:347::o;12572:251::-;12642:6;12695:2;12683:9;12674:7;12670:23;12666:32;12663:52;;;12711:1;12708;12701:12;12663:52;12743:9;12737:16;12762:31;12787:5;12762:31;:::i;13137:184::-;13207:6;13260:2;13248:9;13239:7;13235:23;13231:32;13228:52;;;13276:1;13273;13266:12;13228:52;-1:-1:-1;13299:16:1;;13137:184;-1:-1:-1;13137:184:1:o;13605:245::-;13672:6;13725:2;13713:9;13704:7;13700:23;13696:32;13693:52;;;13741:1;13738;13731:12;13693:52;13773:9;13767:16;13792:28;13814:5;13792:28;:::i;19579:306::-;19667:6;19675;19683;19736:2;19724:9;19715:7;19711:23;19707:32;19704:52;;;19752:1;19749;19742:12;19704:52;19781:9;19775:16;19765:26;;19831:2;19820:9;19816:18;19810:25;19800:35;;19875:2;19864:9;19860:18;19854:25;19844:35;;19579:306;;;;;:::o;21286:400::-;21488:2;21470:21;;;21527:2;21507:18;;;21500:30;21566:34;21561:2;21546:18;;21539:62;-1:-1:-1;;;21632:2:1;21617:18;;21610:34;21676:3;21661:19;;21286:400::o;22250:980::-;22512:4;22560:3;22549:9;22545:19;22591:6;22580:9;22573:25;22617:2;22655:6;22650:2;22639:9;22635:18;22628:34;22698:3;22693:2;22682:9;22678:18;22671:31;22722:6;22757;22751:13;22788:6;22780;22773:22;22826:3;22815:9;22811:19;22804:26;;22865:2;22857:6;22853:15;22839:29;;22886:1;22896:195;22910:6;22907:1;22904:13;22896:195;;;22975:13;;-1:-1:-1;;;;;22971:39:1;22959:52;;23066:15;;;;23031:12;;;;23007:1;22925:9;22896:195;;;-1:-1:-1;;;;;;;23147:32:1;;;;23142:2;23127:18;;23120:60;-1:-1:-1;;;23211:3:1;23196:19;23189:35;23108:3;22250:980;-1:-1:-1;;;22250:980:1:o

Swarm Source

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