ETH Price: $3,323.92 (-4.15%)

Token

NYX CIPHER ($NXCP)
 

Overview

Max Total Supply

100,000,000 $NXCP

Holders

875 ( -0.457%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
0.00000001 $NXCP

Value
$0.00
0x8ec894c6d4966fbfd985c588edcf5a8d1613b94f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Nyx Cipher combats the crypto space's paid shilling and bot-driven misinformation by focusing on social data rather than solely on-chain analysis.

# Exchange Pair Price  24H Volume % Volume

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xE039cc88...32F736130
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
NyxCipher

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 1 : NyxCipher.sol
/**
 *Submitted for verification at Etherscan.io on 2024-09-20
 */

/**

    ███╗░░██╗██╗░░░██╗██╗░░██╗░█████╗░██╗██████╗░██╗░░██╗███████╗██████╗░
    ████╗░██║╚██╗░██╔╝╚██╗██╔╝██╔══██╗██║██╔══██╗██║░░██║██╔════╝██╔══██╗
    ██╔██╗██║░╚████╔╝░░╚███╔╝░██║░░╚═╝██║██████╔╝███████║█████╗░░██████╔╝
    ██║╚████║░░╚██╔╝░░░██╔██╗░██║░░██╗██║██╔═══╝░██╔══██║██╔══╝░░██╔══██╗
    ██║░╚███║░░░██║░░░██╔╝╚██╗╚█████╔╝██║██║░░░░░██║░░██║███████╗██║░░██║
    ╚═╝░░╚══╝░░░╚═╝░░░╚═╝░░╚═╝░╚════╝░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝

    𝙰𝚗 𝙰𝙸-𝚙𝚘𝚠𝚎𝚛𝚎𝚍 𝚂𝚘𝚕𝚒𝚍𝚒𝚝𝚢 𝚂𝚖𝚊𝚛𝚝 𝙲𝚘𝚗𝚝𝚛𝚊𝚌𝚝 𝙰𝚞𝚍𝚒𝚝𝚘𝚛 𝚝𝚑𝚊𝚝 𝚞𝚜𝚎𝚜 𝙰𝙸 𝚝𝚘 𝚊𝚗𝚊𝚕𝚢𝚣𝚎 𝚊𝚗𝚍 𝚊𝚞𝚍𝚒𝚝 𝚜𝚖𝚊𝚛𝚝 
    𝚌𝚘𝚗𝚝𝚛𝚊𝚌𝚝 𝚌𝚘𝚍𝚎, 𝚏𝚒𝚗𝚍𝚜 𝚎𝚛𝚛𝚘𝚛𝚜 𝚊𝚗𝚍 𝚟𝚞𝚕𝚗𝚎𝚛𝚊𝚋𝚒𝚕𝚒𝚝𝚒𝚎𝚜, 𝚊𝚗𝚍 𝚙𝚛𝚘𝚟𝚒𝚍𝚎𝚜 𝚍𝚎𝚝𝚊𝚒𝚕𝚎𝚍 𝚛𝚎𝚙𝚘𝚛𝚝𝚜 𝚏𝚘𝚛 
    𝚜𝚎𝚌𝚞𝚛𝚎 𝚊𝚗𝚍 𝚎𝚛𝚛𝚘𝚛-𝚏𝚛𝚎𝚎 𝚜𝚖𝚊𝚛𝚝 𝚌𝚘𝚗𝚝𝚛𝚊𝚌𝚝𝚜.

    Home Page

    https://nyxcipher.ai/

    Web App

    https://app.nyxcipher.ai/

    Join our Telegram!

    https://t.me/nyxcipherportal

    Twitter

    https://x.com/nyxcipherai


*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

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 IFactoryV2 {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address lpPair,
        uint
    );
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address lpPair);
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface Initializer {
    function setLaunch(
        address _initialLpPair,
        uint32 _liqAddBlock,
        uint64 _liqAddStamp,
        uint8 dec
    ) external;
    function getConfig() external returns (address, address);
    function getInits(uint256 amount) external returns (uint256, uint256);
    function setLpPair(address pair, bool enabled) external;
}

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

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

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

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

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

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

contract NyxCipher is IERC20 {
    using SafeMath for uint256;
    mapping(address => uint256) private _tOwned;
    mapping(address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _liquidityHolders;
    mapping(address => bool) private _isExcludedFromProtection;
    mapping(address => bool) private _isExcludedFromFees;
    uint256 private constant startingSupply = 100_000_000;
    string private constant _name = "NYX CIPHER";
    string private constant _symbol = "$NXCP";
    uint8 private constant _decimals = 8;
    uint256 private constant _tTotal = startingSupply * 10 ** _decimals;

    // Add these as state variables
    uint256 public constant initialTaxRate = 2500; // 25%
    uint256 public constant finalTaxRate = 500;    // 5%
    uint256 public constant taxReductionPerMinute = 500; // 5% reduction per minute
    uint256 public constant maxReductionMinutes = 4;     // Tax reduces for 4 minutes (25% -> 5%)


    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 marketing;
        uint16 development;
        uint16 buyBackBurnLP;
        uint16 totalSwap;
    }
    // Define the Lock struct to store the amount and release time of locked tokens
    struct Lock {
        uint256 totalAmount;  // Total tokens to be vested/locked
        uint256 releaseTime;  // Time when initial lock period ends
        uint256 vestingStart; // When vesting starts (after lock period)
        uint256 vestingDuration;  // Total duration for linear vesting
        uint256 claimed;  // Tokens that have been claimed already
    }
    // Set the vesting parameters
    uint256 public constant TEAM_LOCK_PERIOD = 90 days;  // 3 months lock period
    uint256 public constant TEAM_VESTING_DURATION = 720 days;  // 24 months for vesting


    Fees public _taxRates = Fees({buyFee: 500, sellFee: 500, transferFee: 0});

    Ratios public _ratios =
        Ratios({
            marketing: 2,
            development: 2,
            buyBackBurnLP: 1,
            totalSwap: 5
        });

    uint256 public constant maxBuyTaxes = 1000;
    uint256 public constant maxSellTaxes = 1000;
    uint256 public constant maxTransferTaxes = 1000;
    uint256 constant masterTaxDivisor = 10000;
    // Mapping to keep track of locked tokens and their release times for each address
    mapping(address => Lock) public lockedTokens;

    bool public taxesAreLocked;
    IRouter02 public dexRouter;
    address public lpPair;
    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable development;
        address payable buyBackBurnLP;
    }

    TaxWallets public _taxWallets =
        TaxWallets({
            marketing: payable(0x0000000000000000000000000000000000000000),
            development: payable(0x0000000000000000000000000000000000000000),
            buyBackBurnLP: payable(0x0000000000000000000000000000000000000000)
        });

    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold = _tTotal / 10000;
    uint256 public swapAmount =  _tTotal / 10000;
    bool public piContractSwapsEnabled = false;
    uint256 public piSwapPercent = 10;
    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    Initializer initializer;
    uint256 public launchStamp;

    uint256 public maxTransferAmount; // Maximum transfer amount (1% of total supply)
    uint256 public maxWalletAmount;   // Maximum wallet amount (1% of total supply)


    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);

    modifier inSwapFlag() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor(
        address payable marketingWallet,
        address payable developmentWallet,
        address payable buyBackBurnLPWallet,
        address payable teamFoundationWallet
    ) payable {
        // Set the owner.
        _owner = msg.sender;

        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        // Exclude certain addresses from fees
        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[_owner] = true;

        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; // PinkLock
        _isExcludedFromFees[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // Unicrypt (ETH)
        _isExcludedFromFees[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true; // Unicrypt (ETH)

        // Set the tax wallets
        _taxWallets = TaxWallets({
            marketing: marketingWallet,
            development: developmentWallet,
            buyBackBurnLP: buyBackBurnLPWallet
        });

        // Distribute initial supply to designated wallets
        uint256 marketingTokens = (_tTotal * 10) / 100;
        uint256 developmentTokens = (_tTotal * 5) / 100;
        uint256 teamFoundationTokens = (_tTotal * 15) / 100;

        _tOwned[marketingWallet] = marketingTokens;
        _tOwned[developmentWallet] = developmentTokens;
        _tOwned[teamFoundationWallet] = teamFoundationTokens;

        // Set up the teamFoundationWallet's lock and vesting
        lockedTokens[teamFoundationWallet] = Lock({
            totalAmount: (_tTotal * 15) / 100,  // 15% of total supply
            releaseTime: block.timestamp + TEAM_LOCK_PERIOD,  // Lock for 3 months
            vestingStart: block.timestamp + TEAM_LOCK_PERIOD,  // Vesting starts after 3 months
            vestingDuration: TEAM_VESTING_DURATION,  // Linear vesting over 24 months
            claimed: 0  // No tokens claimed initially
        });
        
        // Initialize max transfer and holding limits as 1% of total supply
        maxTransferAmount = _tTotal / 100; // 1% of total supply
        maxWalletAmount = _tTotal / 100;   // 1% of total supply

        // Adjust owner's balance
        _tOwned[_owner] = _tTotal - (marketingTokens + developmentTokens + teamFoundationTokens);
        emit Transfer(_owner, marketingWallet, marketingTokens);
        emit Transfer(_owner, developmentWallet, developmentTokens);
        emit Transfer(_owner, teamFoundationWallet, teamFoundationTokens);
    }
    //===============================================================================================================
    //===============================================================================================================
    //===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.

    address private _owner;

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    function transferOwner(address newOwner) external onlyOwner {
        require(
            newOwner != address(0),
            "Call renounceOwnership to transfer owner to the zero address."
        );
        require(
            newOwner != DEAD,
            "Call renounceOwnership to transfer owner to the zero address."
        );
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);

        if (balanceOf(_owner) > 0) {
            finalizeTransfer(
                _owner,
                newOwner,
                balanceOf(_owner),
                false,
                false,
                true
            );
        }

        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    function renounceOwnership() external onlyOwner {
        require(
            tradingEnabled,
            "Cannot renounce until trading has been enabled."
        );
        setExcludedFromFees(_owner, false);
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

    //===============================================================================================================
    //===============================================================================================================
    //===============================================================================================================

    receive() external payable {}
    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }
    function decimals() external pure override returns (uint8) {
        return _decimals;
    }
    function symbol() external pure override returns (string memory) {
        return _symbol;
    }
    function name() external pure override returns (string memory) {
        return _name;
    }
    function getOwner() external view override returns (address) {
        return _owner;
    }
    function allowance(
        address holder,
        address spender
    ) external view override returns (uint256) {
        return _allowances[holder][spender];
    }
    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function approve(
        address spender,
        uint256 amount
    ) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(
        address sender,
        address spender,
        uint256 amount
    ) internal {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function approveContractContingency() external onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }


    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= _allowances[sender][msg.sender].sub(amount);
        }

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(
            address(this),
            _newRouter.WETH()
        );
        lpPairs[lpPair] = false;
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(
                address(this),
                _newRouter.WETH()
            );
        } else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        lpPairs[lpPair] = true;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (!enabled) {
            lpPairs[pair] = false;
            initializer.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(
                    block.timestamp - timeSinceLastPair > 3 days,
                    "3 Day cooldown."
                );
            }
            require(!lpPairs[pair], "Pair already added to list.");
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            initializer.setLpPair(pair, true);
        }
    }

    function setInitializer(address init) public onlyOwner {
        require(!tradingEnabled);
        require(init != address(this), "Can't be self.");
        initializer = Initializer(init);
        try initializer.getConfig() returns (
            address router,
            address constructorLP
        ) {
            dexRouter = IRouter02(router);
            lpPair = constructorLP;
            lpPairs[lpPair] = true;
            _approve(_owner, address(dexRouter), type(uint256).max);
            _approve(address(this), address(dexRouter), type(uint256).max);
        } catch {
            revert();
        }
    }

    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function setExcludedFromFees(
        address account,
        bool enabled
    ) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function isExcludedFromProtection(
        address account
    ) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

    function setExcludedFromProtection(
        address account,
        bool enabled
    ) external onlyOwner {
        _isExcludedFromProtection[account] = enabled;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

    function lockTaxes() external onlyOwner {
        // This will lock taxes at their current value forever, do not call this unless you're sure.
        taxesAreLocked = true;
    }

    function setTaxes(
        uint16 buyFee,
        uint16 sellFee,
        uint16 transferFee
    ) external onlyOwner {
        require(!taxesAreLocked, "Taxes are locked.");
        require(
            buyFee <= maxBuyTaxes &&
                sellFee <= maxSellTaxes &&
                transferFee <= maxTransferTaxes,
            "Cannot exceed maximums."
        );
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(
        uint16 marketing,
        uint16 development,
        uint16 buyBackBurnLP
    ) external onlyOwner {
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.buyBackBurnLP = buyBackBurnLP;
        _ratios.totalSwap = marketing + development + buyBackBurnLP;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(
            _ratios.totalSwap <= total,
            "Cannot exceed sum of buy and sell fees."
        );
    }

    function setWallets(
        address payable marketing,
        address payable development,
        address payable buyBackBurnLP
    ) external onlyOwner {
        require(
            marketing != address(0) &&
                development != address(0) &&
                buyBackBurnLP != address(0),
            "Cannot be zero address."
        );
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
        _taxWallets.buyBackBurnLP = payable(buyBackBurnLP);
    }

    function getTokenAmountAtPriceImpact(
        uint256 priceImpactInHundreds
    ) external view returns (uint256) {
        return ((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setSwapSettings(
        uint256 thresholdPercent,
        uint256 thresholdDivisor,
        uint256 amountPercent,
        uint256 amountDivisor
    ) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(
            swapThreshold <= swapAmount,
            "Threshold cannot be above amount."
        );
        require(
            swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor,
            "Cannot be above 1.5% of current PI."
        );
        require(
            swapAmount >= _tTotal / 1_000_000,
            "Cannot be lower than 0.00001% of total supply."
        );
        require(
            swapThreshold >= _tTotal / 1_000_000,
            "Cannot be lower than 0.00001% of total supply."
        );
    }

    function setPriceImpactSwapAmount(
        uint256 priceImpactSwapPercent
    ) external onlyOwner {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(
        bool swapEnabled,
        bool priceImpactSwapEnabled
    ) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return
            from != _owner &&
            to != _owner &&
            tx.origin != _owner &&
            !_liquidityHolders[to] &&
            !_liquidityHolders[from] &&
            to != DEAD &&
            to != address(0) &&
            from != address(this) &&
            from != address(initializer) &&
            to != address(initializer);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        // Check if the wallet is excluded from max transfer and max wallet restrictions
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            // Enforce the maximum transfer amount (only if not excluded)
            require(amount <= maxTransferAmount, "Transfer amount exceeds the 1% limit");

            // Check if the recipient's balance would exceed the max wallet limit (only if not excluded)
            uint256 recipientBalanceAfterTransfer = _tOwned[to] + amount;
            require(recipientBalanceAfterTransfer <= maxWalletAmount, "Recipient exceeds maximum wallet balance limit");
        }
        
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }

        // Restrict the buyBackBurnLP wallet transfers to only the DEX pair and DEAD addresses
        if (from == _taxWallets.buyBackBurnLP) {
            require(to == lpPair || to == DEAD, "buyBackBurnLP can only send to DEX pair or burn address");
        }
        
        if (_hasLimits(from, to)) {
            if (!tradingEnabled) {
                if (!other) {
                    revert("Trading not yet enabled!");
                } else if (
                    !_isExcludedFromProtection[from] &&
                    !_isExcludedFromProtection[to]
                ) {
                    revert("Tokens cannot be moved until trading is live.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) {
                            swapAmt =
                                (balanceOf(lpPair) * piSwapPercent) /
                                masterTaxDivisor;
                        }
                        if (contractTokenBalance >= swapAmt) {
                            contractTokenBalance = swapAmt;
                        }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        }
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if (
            _allowances[address(this)][address(dexRouter)] != type(uint256).max
        ) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try
            dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                contractTokenBalance,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch {
            return;
        }

        uint256 amtBalance = address(this).balance;
        bool success;
        uint256 developmentBalance = (amtBalance * ratios.development) /
            ratios.totalSwap;
        uint256 externalBuybackBalance = (amtBalance * ratios.buyBackBurnLP) /
            ratios.totalSwap;
        uint256 marketingBalance = amtBalance -
            (developmentBalance + externalBuybackBalance);
        if (ratios.marketing > 0) {
            (success, ) = _taxWallets.marketing.call{
                value: marketingBalance,
                gas: 55000
            }("");
        }
        if (ratios.development > 0) {
            (success, ) = _taxWallets.development.call{
                value: developmentBalance,
                gas: 55000
            }("");
        }
        if (ratios.buyBackBurnLP > 0) {
            (success, ) = _taxWallets.buyBackBurnLP.call{
                value: externalBuybackBalance,
                gas: 55000
            }("");
        }
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _isExcludedFromFees[from] = true;
            _hasLiqBeenAdded = true;
            if (address(initializer) == address(0)) {
                initializer = Initializer(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(initializer) == address(0)) {
            initializer = Initializer(address(this));
        }
        try
            initializer.setLaunch(
                lpPair,
                uint32(block.number),
                uint64(block.timestamp),
                _decimals
            )
        {} catch {}
        try initializer.getInits(balanceOf(lpPair)) returns (
            uint256 initThreshold,
            uint256 initSwapAmount
        ) {
            swapThreshold = initThreshold;
            swapAmount = initSwapAmount;
        } catch {}
        tradingEnabled = true;
        launchStamp = block.timestamp;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    function sweepExternalTokens(address token) external onlyOwner {
        if (_hasLiqBeenAdded) {
            require(token != address(this), "Cannot sweep native tokens.");
        }
        IERC20 TOKEN = IERC20(token);
        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));
    }

    function multiSendTokens(
        address[] memory accounts,
        uint256[] memory amounts
    ) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint16 i = 0; i < accounts.length; i++) {
            require(
                balanceOf(msg.sender) >= amounts[i] * 10 ** _decimals,
                "Not enough tokens."
            );
            finalizeTransfer(
                msg.sender,
                accounts[i],
                amounts[i] * 10 ** _decimals,
                false,
                false,
                true
            );
        }
    }

    // Calculate the vested amount that can be claimed
    function vestedAndClaimable(address account) public view returns (uint256) {
        Lock memory lock = lockedTokens[account];
        
        if (block.timestamp < lock.releaseTime) {
            return 0;  // Still in lock period
        }
        
        uint256 elapsedTime = block.timestamp - lock.vestingStart;
        
        if (elapsedTime >= lock.vestingDuration) {
            // All tokens are fully vested after the vesting duration
            return lock.totalAmount - lock.claimed;
        }
        
        // Calculate linear vesting amount
        uint256 vested = (lock.totalAmount * elapsedTime) / lock.vestingDuration;
        
        // Return the claimable amount (vested minus already claimed)
        return vested - lock.claimed;
    }

    function finalizeTransfer(
        address from,
        address to,
        uint256 amount,
        bool buy,
        bool sell,
        bool other
    ) internal returns (bool) {

        uint256 availableBalance = _tOwned[from];
        // If the sender has locked tokens, calculate the vested amount
        if (lockedTokens[from].totalAmount > 0) {
            uint256 claimable = vestedAndClaimable(from);
            availableBalance = availableBalance.sub(lockedTokens[from].totalAmount - claimable);
            
            require(amount <= availableBalance, "Amount exceeds unlocked tokens");
            
            // Update the claimed amount in the lock
            lockedTokens[from].claimed = lockedTokens[from].claimed.add(amount);
        }

        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee)
            ? takeTaxes(from, amount, buy, sell)
            : amount;
        
        _tOwned[to] += amountReceived;
        emit Transfer(from, to, amountReceived);

        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (
                !_hasLiqBeenAdded &&
                _hasLimits(from, to) &&
                !_isExcludedFromProtection[from] &&
                !_isExcludedFromProtection[to] &&
                !other
            ) {
                revert("Pre-liquidity transfer protection.");
            }
        }
        return true;
    }

    function takeTaxes(
        address from,
        uint256 amount,
        bool buy,
        bool sell
    ) internal returns (uint256) {
        uint256 currentFee = getDynamicTaxRate(buy, sell);

        if (currentFee == 0) {
            return amount;
        }

        uint256 feeAmount = (amount * currentFee) / masterTaxDivisor;
        if (feeAmount > 0) {
            _tOwned[address(this)] += feeAmount;
            emit Transfer(from, address(this), feeAmount);
        }

        return amount - feeAmount;
    }

    function getDynamicTaxRate(bool buy, bool sell) public view returns (uint256) {
        uint256 baseRate;

        if (buy) {
            baseRate = _taxRates.buyFee;
        } else if (sell) {
            baseRate = _taxRates.sellFee;
        } else {
            baseRate = _taxRates.transferFee;
        }

        if (block.timestamp >= launchStamp) {
            uint256 minutesSinceLaunch = (block.timestamp - launchStamp) / 60;
            
            if (minutesSinceLaunch >= maxReductionMinutes) {
                // After 4 minutes, tax is reduced to the final rate of 5%
                return finalTaxRate;  // 5%
            } else {
                // Each minute, reduce tax by 5% starting from 25%
                uint256 reducedRate = initialTaxRate - (minutesSinceLaunch * taxReductionPerMinute); 
                return reducedRate;  // Return the dynamic rate
            }
        }

        return baseRate; // Return the base rate before the launch
    }

    function setMaxTransferAmount(uint256 _maxTransferAmount) external onlyOwner {
        require(_maxTransferAmount > 0, "Max transfer amount must be greater than zero");
        maxTransferAmount = _maxTransferAmount;
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(_maxWalletAmount > 0, "Max wallet amount must be greater than zero");
        maxWalletAmount = _maxWalletAmount;
    }


}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"developmentWallet","type":"address"},{"internalType":"address payable","name":"buyBackBurnLPWallet","type":"address"},{"internalType":"address payable","name":"teamFoundationWallet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_LOCK_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_VESTING_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"buyBackBurnLP","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"buyBackBurnLP","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"bool","name":"sell","type":"bool"}],"name":"getDynamicTaxRate","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":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lockedTokens","outputs":[{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"vestingStart","type":"uint256"},{"internalType":"uint256","name":"vestingDuration","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxReductionMinutes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"init","type":"address"}],"name":"setInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransferAmount","type":"uint256"}],"name":"setMaxTransferAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"buyBackBurnLP","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address payable","name":"buyBackBurnLP","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"sweepExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxReductionPerMinute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxesAreLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"vestedAndClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060028181556101f4608081905260a05260c08290526007805465ffffffffffff19166301f401f417905560e0819052610100526001610120526005610140526008805466050001000200026001600160401b03199091161781556101c06040526101608290526101808290526101a091909152600c80546001600160a01b0319908116909155600d805482169055600e80549091169055600f805461ff001916905561271090620000b490600a62000755565b620000c4906305f5e1006200076d565b620000d0919062000787565b601055612710620000e46008600a62000755565b620000f4906305f5e1006200076d565b62000100919062000787565b6011556012805460ff19169055600a6013556014805461ffff19169055604051620048ac388190039081908339810160408190526200013f91620007c7565b601880546001600160a01b031916331790556200015f6008600a62000755565b6200016f906305f5e1006200076d565b601880546001600160a01b03908116600090815260208190526040812093909355905416906000805160206200488c833981519152620001b26008600a62000755565b620001c2906305f5e1006200076d565b60405190815260200160405180910390a3601880546001600160a01b0390811660009081526006602081815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548216831790559654861685526004835281852080548816821790559282527f9f0450866e340883c5637ebf25d629ea9e0ea06bf9caa3748b581238b1bc2bb980548716841790557f9b00c99845a242ceea732a2478bee8e7b057d22892cafbdc32d0e607c88ddea0805487168417905573dba68f07d1b7ca219f78ae8582c213d975c25caf84527fab9d0a02af394b8961be3a9588d91fbbf70984385fd8d3031385f593b62a4bf9805490961690921790945580516060810182528884168082528885169582018690529387169101819052600c80546001600160a01b03199081169094179055600d80548416909417909355600e805490921690921790556064620003426008600a62000755565b62000352906305f5e1006200076d565b6200035f90600a6200076d565b6200036b919062000787565b9050600060646200037f6008600a62000755565b6200038f906305f5e1006200076d565b6200039c9060056200076d565b620003a8919062000787565b905060006064620003bc6008600a62000755565b620003cc906305f5e1006200076d565b620003d990600f6200076d565b620003e5919062000787565b6001600160a01b0380891660009081526020819052604080822087905589831682528082208690559187168152819020829055805160a08101909152909150806064620004356008600a62000755565b62000445906305f5e1006200076d565b6200045290600f6200076d565b6200045e919062000787565b8152602001620004726276a7004262000824565b8152602001620004866276a7004262000824565b81526303b53800602080830191909152600060409283018190526001600160a01b03881681526009825282902083518155908301516001820155908201516002820155606082015160038201556080909101516004909101556064620004ef6008600a62000755565b620004ff906305f5e1006200076d565b6200050b919062000787565b60165560646200051e6008600a62000755565b6200052e906305f5e1006200076d565b6200053a919062000787565b601755806200054a838562000824565b62000556919062000824565b620005646008600a62000755565b62000574906305f5e1006200076d565b6200058091906200083a565b601880546001600160a01b039081166000908152602081815260409182902094909455915491518681528a82169392909116916000805160206200488c833981519152910160405180910390a36018546040518381526001600160a01b038881169216906000805160206200488c8339815191529060200160405180910390a36018546040518281526001600160a01b038681169216906000805160206200488c8339815191529060200160405180910390a35050505050505062000850565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006975781600019048211156200067b576200067b62000640565b808516156200068957918102915b93841c93908002906200065b565b509250929050565b600082620006b0575060016200074f565b81620006bf575060006200074f565b8160018114620006d85760028114620006e35762000703565b60019150506200074f565b60ff841115620006f757620006f762000640565b50506001821b6200074f565b5060208310610133831016604e8410600b841016171562000728575081810a6200074f565b62000734838362000656565b80600019048211156200074b576200074b62000640565b0290505b92915050565b60006200076660ff8416836200069f565b9392505050565b80820281158282048414176200074f576200074f62000640565b600082620007a557634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b0381168114620007c257600080fd5b919050565b60008060008060808587031215620007de57600080fd5b620007e985620007aa565b9350620007f960208601620007aa565b92506200080960408601620007aa565b91506200081960608601620007aa565b905092959194509250565b808201808211156200074f576200074f62000640565b818103818111156200074f576200074f62000640565b61402c80620008606000396000f3fe6080604052600436106103c75760003560e01c806370a08231116101f2578063ab558e4d1161010d578063de7c2ed2116100a0578063fb78680d1161006f578063fb78680d14610bf8578063fdb78c0e14610c18578063fe48d6f914610af8578063feadde9c14610c3757600080fd5b8063de7c2ed214610b54578063eafb5a3c14610b6c578063ee5d9c2d14610b8c578063f94aa1b414610ba157600080fd5b8063bfc2fc35116100dc578063bfc2fc3514610a70578063cf84770614610a90578063d5299ff314610af8578063dd62ed3e14610b0e57600080fd5b8063ab558e4d14610a36578063b1b08f7114610606578063b3d514fb14610606578063b7df8b3614610a5657600080fd5b80638b13678411610185578063a9059cbb11610154578063a9059cbb146109ca578063a9e75723146109ea578063aa22b17214610a00578063aa4bde2814610a2057600080fd5b80638b136784146109465780638bf554091461095c57806395d89b411461097c5780639febf582146109aa57600080fd5b806380c581d1116101c157806380c581d1146108de578063893d20e8146108fe5780638a63bd9b1461091c5780638a8c523c1461093157600080fd5b806370a0823114610874578063715018a61461089457806375cb1bd1146108a957806378648edf146108c957600080fd5b8063313ce567116102e25780634fb2e45d116102755780635a6f0918116102445780635a6f0918146107ac5780635c24b074146107c25780635eb7413a146107e2578063606b89b71461085457600080fd5b80634fb2e45d146107145780634fbee1931461073457806350a8e0161461076d578063590ffdce1461078c57600080fd5b8063452ed4f1116102b1578063452ed4f11461069a5780634ada218b146106ba5780634bbb93eb146106d45780634e718e48146106f457600080fd5b8063313ce5671461063257806332cde6641461064e578063359289981461066e578063394188be1461068557600080fd5b806318160ddd1161035a578063285777511161032957806328577751146105db5780632b112e49146105f15780632b28fc7a146106065780632e8fa8211461061c57600080fd5b806318160ddd1461056457806323b872dd146105795780632610eaca1461059957806327a14fc2146105bb57600080fd5b80630758d924116103965780630758d924146104bc57806307dd79e0146104e1578063095ea7b31461050b5780630dcbcf1c1461052b57600080fd5b806303fd2a45146103d35780630445b66714610406578063069d955f1461042a57806306fdde031461048057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061041c60105481565b6040519081526020016103fd565b34801561043657600080fd5b5060075461045b9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b34801561048c57600080fd5b5060408051808201909152600a815269272cac1021a4a82422a960b11b60208201525b6040516103fd9190613839565b3480156104c857600080fd5b50600a546103e99061010090046001600160a01b031681565b3480156104ed57600080fd5b50600a546104fb9060ff1681565b60405190151581526020016103fd565b34801561051757600080fd5b506104fb61052636600461389d565b610c57565b34801561053757600080fd5b506104fb6105463660046138c9565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561057057600080fd5b5061041c610c6e565b34801561058557600080fd5b506104fb6105943660046138e6565b610c8f565b3480156105a557600080fd5b506105b96105b4366004613a01565b610d35565b005b3480156105c757600080fd5b506105b96105d6366004613ac3565b610ebb565b3480156105e757600080fd5b5061041c60135481565b3480156105fd57600080fd5b5061041c610f4e565b34801561061257600080fd5b5061041c6103e881565b34801561062857600080fd5b5061041c60115481565b34801561063e57600080fd5b50604051600881526020016103fd565b34801561065a57600080fd5b506105b9610669366004613af3565b610f93565b34801561067a57600080fd5b5061041c6276a70081565b34801561069157600080fd5b5061041c600481565b3480156106a657600080fd5b50600b546103e9906001600160a01b031681565b3480156106c657600080fd5b506014546104fb9060ff1681565b3480156106e057600080fd5b5061041c6106ef366004613ac3565b6110bd565b34801561070057600080fd5b506105b961070f366004613ac3565b6110ef565b34801561072057600080fd5b506105b961072f3660046138c9565b611168565b34801561074057600080fd5b506104fb61074f3660046138c9565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561077957600080fd5b506014546104fb90610100900460ff1681565b34801561079857600080fd5b506105b96107a7366004613b44565b611291565b3480156107b857600080fd5b5061041c60155481565b3480156107ce57600080fd5b506105b96107dd3660046138c9565b6112e6565b3480156107ee57600080fd5b5061082c6107fd3660046138c9565b600960205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103fd565b34801561086057600080fd5b5061041c61086f366004613b7d565b61148a565b34801561088057600080fd5b5061041c61088f3660046138c9565b611531565b3480156108a057600080fd5b506105b961154c565b3480156108b557600080fd5b506105b96108c4366004613b9b565b611645565b3480156108d557600080fd5b506105b961172e565b3480156108ea57600080fd5b506105b96108f9366004613b44565b611767565b34801561090a57600080fd5b506018546001600160a01b03166103e9565b34801561092857600080fd5b506104fb611946565b34801561093d57600080fd5b506105b9611998565b34801561095257600080fd5b5061041c6109c481565b34801561096857600080fd5b506105b9610977366004613ac3565b611bc2565b34801561098857600080fd5b506040805180820190915260058152640244e5843560dc1b60208201526104af565b3480156109b657600080fd5b5061041c6109c53660046138c9565b611c57565b3480156109d657600080fd5b506104fb6109e536600461389d565b611d25565b3480156109f657600080fd5b5061041c60165481565b348015610a0c57600080fd5b506105b9610a1b366004613af3565b611d3c565b348015610a2c57600080fd5b5061041c60175481565b348015610a4257600080fd5b506105b9610a513660046138c9565b611e63565b348015610a6257600080fd5b506012546104fb9060ff1681565b348015610a7c57600080fd5b506105b9610a8b366004613b7d565b611fdf565b348015610a9c57600080fd5b50600854610aca9061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103fd565b348015610b0457600080fd5b5061041c6101f481565b348015610b1a57600080fd5b5061041c610b29366004613be6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b6057600080fd5b5061041c6303b5380081565b348015610b7857600080fd5b506105b9610b873660046138c9565b612068565b348015610b9857600080fd5b506105b961243e565b348015610bad57600080fd5b50600c54600d54600e54610bce926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103fd565b348015610c0457600080fd5b506105b9610c13366004613c14565b6124f9565b348015610c2457600080fd5b50600f546104fb90610100900460ff1681565b348015610c4357600080fd5b506105b9610c52366004613b44565b612703565b6000610c64338484612758565b5060015b92915050565b6000610c7c6008600a613d40565b610c8a906305f5e100613d4f565b905090565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610d22576001600160a01b0384166000908152600360209081526040808320338452909152902054610ce99083612851565b6001600160a01b038516600090815260036020908152604080832033845290915281208054909190610d1c908490613d66565b90915550505b610d2d848484612893565b949350505050565b6018546001600160a01b03163314610d685760405162461bcd60e51b8152600401610d5f90613d79565b60405180910390fd5b8051825114610db15760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610d5f565b60005b82518161ffff161015610eb657610dcd6008600a613d40565b828261ffff1681518110610de357610de3613da4565b6020026020010151610df59190613d4f565b610dfe33611531565b1015610e415760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610d5f565b610ea333848361ffff1681518110610e5b57610e5b613da4565b60200260200101516008600a610e719190613d40565b858561ffff1681518110610e8757610e87613da4565b6020026020010151610e999190613d4f565b6000806001612db1565b5080610eae81613dba565b915050610db4565b505050565b6018546001600160a01b03163314610ee55760405162461bcd60e51b8152600401610d5f90613d79565b60008111610f495760405162461bcd60e51b815260206004820152602b60248201527f4d61782077616c6c657420616d6f756e74206d7573742062652067726561746560448201526a72207468616e207a65726f60a81b6064820152608401610d5f565b601755565b6000610f5a6000611531565b610f6561dead611531565b610f6f9190613ddb565b610f7b6008600a613d40565b610f89906305f5e100613d4f565b610c8a9190613d66565b6018546001600160a01b03163314610fbd5760405162461bcd60e51b8152600401610d5f90613d79565b600a5460ff16156110045760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610d5f565b6103e88361ffff161115801561102057506103e88261ffff1611155b801561103257506103e88161ffff1611155b61107e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610d5f565b6007805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b600b546000906127109083906110db906001600160a01b0316611531565b6110e59190613d4f565b610c689190613dee565b6018546001600160a01b031633146111195760405162461bcd60e51b8152600401610d5f90613d79565b60968111156111635760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610d5f565b601355565b6018546001600160a01b031633146111925760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b0381166111b85760405162461bcd60e51b8152600401610d5f90613e10565b61deac196001600160a01b038216016111e35760405162461bcd60e51b8152600401610d5f90613e10565b6018546111fa906001600160a01b03166000611291565b611205816001611291565b60185460009061121d906001600160a01b0316611531565b111561123f5760185461123d906001600160a01b031682610e9982611531565b505b601880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6018546001600160a01b031633146112bb5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6018546001600160a01b031633146113105760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff161561132057600080fd5b306001600160a01b038216036113695760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610d5f565b6014805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af19250505080156113ef575060408051601f3d908101601f191682019092526113ec91810190613e6d565b60015b6113f857600080fd5b600a8054610100600160a81b0319166101006001600160a01b038581168202929092178355600b80546001600160a01b0319168584169081179091556000908152600160208190526040909120805460ff1916909117905560185492546114689383169291900416600019612758565b600a54610eb690309061010090046001600160a01b0316600019612758565b50565b60008083156114a0575060075461ffff166114ca565b82156114b9575060075462010000900461ffff166114ca565b50600754640100000000900461ffff165b601554421061152a576000603c601554426114e59190613d66565b6114ef9190613dee565b905060048110611505576101f492505050610c68565b60006115136101f483613d4f565b61151f906109c4613d66565b9350610c6892505050565b9392505050565b6001600160a01b031660009081526020819052604090205490565b6018546001600160a01b031633146115765760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff166115e05760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201526e39903132b2b71032b730b13632b21760891b6064820152608401610d5f565b6018546115f7906001600160a01b03166000611291565b601880546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6018546001600160a01b0316331461166f5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b0383161580159061168f57506001600160a01b03821615155b80156116a357506001600160a01b03811615155b6116ef5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610d5f565b600c80546001600160a01b039485166001600160a01b031991821617909155600d805493851693821693909317909255600e8054919093169116179055565b6018546001600160a01b031633146117585760405162461bcd60e51b8152600401610d5f90613d79565b600a805460ff19166001179055565b6018546001600160a01b031633146117915760405162461bcd60e51b8152600401610d5f90613d79565b80611821576001600160a01b03828116600081815260016020526040808220805460ff1916905560145490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b15801561180557600080fd5b505af1158015611819573d6000803e3d6000fd5b505050505050565b6002541561187a576203f4806002544261183b9190613d66565b1161187a5760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610d5f565b6001600160a01b03821660009081526001602052604090205460ff16156118e35760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610d5f565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560145491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d1906044016117eb565b5050565b6018546000906001600160a01b031633146119735760405162461bcd60e51b8152600401610d5f90613d79565b600a5461199290309061010090046001600160a01b0316600019612758565b50600190565b6018546001600160a01b031633146119c25760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff1615611a155760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d5f565b601454610100900460ff16611a6c5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d5f565b6014546201000090046001600160a01b0316611a9c576014805462010000600160b01b0319163062010000021790555b601454600b54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260086064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611b0e57600080fd5b505af1925050508015611b1f575060015b50601454600b546001600160a01b03620100009092048216916325a71cae91611b489116611531565b6040518263ffffffff1660e01b8152600401611b6691815260200190565b60408051808303816000875af1925050508015611ba0575060408051601f3d908101601f19168201909252611b9d91810190613e9c565b60015b15611baf576010919091556011555b6014805460ff1916600117905542601555565b6018546001600160a01b03163314611bec5760405162461bcd60e51b8152600401610d5f90613d79565b60008111611c525760405162461bcd60e51b815260206004820152602d60248201527f4d6178207472616e7366657220616d6f756e74206d757374206265206772656160448201526c746572207468616e207a65726f60981b6064820152608401610d5f565b601655565b6001600160a01b0381166000908152600960209081526040808320815160a0810183528154815260018201549381018490526002820154928101929092526003810154606083015260040154608082015290421015611cb95750600092915050565b6000816040015142611ccb9190613d66565b905081606001518110611ce95760808201518251610d2d9190613d66565b60008260600151828460000151611d009190613d4f565b611d0a9190613dee565b9050826080015181611d1c9190613d66565b95945050505050565b6000611d32338484612893565b5060019392505050565b6018546001600160a01b03163314611d665760405162461bcd60e51b8152600401610d5f90613d79565b6008805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff1990941692881692909217929092171617905580611daa8385613ec0565b611db49190613ec0565b6008805467ffff0000000000001916600160301b61ffff93841602179055600754600091611deb9162010000810482169116613ec0565b60085461ffff9182169250600160301b900416811015611e5d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d5f565b50505050565b6018546001600160a01b03163314611e8d5760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff1615611ef557306001600160a01b03821603611ef55760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610d5f565b6018546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f709190613ee2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb69190613efb565b6018546001600160a01b031633146120095760405162461bcd60e51b8152600401610d5f90613d79565b600f805461ff001916610100841515908102919091179091556012805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6018546001600160a01b031633146120925760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff16156120ea5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d5f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121539190613f18565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c49190613f18565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561220f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122339190613f18565b600b546001600160a01b039081166000908152600160205260409020805460ff1916905590915081166123c957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561229e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c29190613f18565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190613f18565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a49190613f18565b600b80546001600160a01b0319166001600160a01b03929092169190911790556123e5565b600b80546001600160a01b0319166001600160a01b0383161790555b600a8054610100600160a81b0319166101006001600160a01b038581168202929092178355600b5482166000908152600160208190526040909120805460ff191690911790559154610eb6923092910416600019612758565b6018546001600160a01b031633146124685760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff16156124c05760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d5f565b6018546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611487573d6000803e3d6000fd5b6018546001600160a01b031633146125235760405162461bcd60e51b8152600401610d5f90613d79565b82846125316008600a613d40565b61253f906305f5e100613d4f565b6125499190613d4f565b6125539190613dee565b60105580826125646008600a613d40565b612572906305f5e100613d4f565b61257c9190613d4f565b6125869190613dee565b601181905560105411156125e65760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d5f565b600b54612710906125ff906001600160a01b0316611531565b61260a906096613d4f565b6126149190613dee565b60115411156126715760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d5f565b620f42406126816008600a613d40565b61268f906305f5e100613d4f565b6126999190613dee565b60115410156126ba5760405162461bcd60e51b8152600401610d5f90613f35565b620f42406126ca6008600a613d40565b6126d8906305f5e100613d4f565b6126e29190613dee565b6010541015611e5d5760405162461bcd60e51b8152600401610d5f90613f35565b6018546001600160a01b0316331461272d5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166127a45760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d5f565b6001600160a01b0382166127f05760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d5f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061152a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130b9565b60006001600160a01b0384166128f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d5f565b6001600160a01b03831661295b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d5f565b600082116129bd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d5f565b6001600160a01b03841660009081526006602052604090205460ff161580156129ff57506001600160a01b03831660009081526006602052604090205460ff16155b15612af357601654821115612a625760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657220616d6f756e74206578636565647320746865203125206c6044820152631a5b5a5d60e21b6064820152608401610d5f565b6001600160a01b038316600090815260208190526040812054612a86908490613ddb565b9050601754811115612af15760405162461bcd60e51b815260206004820152602e60248201527f526563697069656e742065786365656473206d6178696d756d2077616c6c657460448201526d0818985b185b98d9481b1a5b5a5d60921b6064820152608401610d5f565b505b6001600160a01b0384166000908152600160205260408120548190819060ff1615612b215760019250612b4f565b6001600160a01b03861660009081526001602052604090205460ff1615612b4b5760019150612b4f565b5060015b600e546001600160a01b0390811690881603612bfd57600b546001600160a01b0387811691161480612b8b57506001600160a01b03861661dead145b612bfd5760405162461bcd60e51b815260206004820152603760248201527f6275794261636b4275726e4c502063616e206f6e6c792073656e6420746f204460448201527f45582070616972206f72206275726e20616464726573730000000000000000006064820152608401610d5f565b612c0787876130ea565b15612d085760145460ff16612d085780612c635760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d5f565b6001600160a01b03871660009081526005602052604090205460ff16158015612ca557506001600160a01b03861660009081526005602052604090205460ff16155b15612d085760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d5f565b8115612d9857600f5460ff16612d9857600f54610100900460ff1615612d98576000612d3330611531565b90506010548110612d965760115460125460ff1615612d8057601354600b546127109190612d69906001600160a01b0316611531565b612d739190613d4f565b612d7d9190613dee565b90505b808210612d8b578091505b612d94826131ff565b505b505b612da6878787868686612db1565b979650505050505050565b6001600160a01b03861660009081526020818152604080832054600990925282205415612eab576000612de389611c57565b6001600160a01b038a16600090815260096020526040902054909150612e1590612e0e908390613d66565b8390612851565b915081871115612e675760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206578636565647320756e6c6f636b656420746f6b656e7300006044820152606401610d5f565b6001600160a01b038916600090815260096020526040902060040154612e8d90886135ea565b6001600160a01b038a16600090815260096020526040902060040155505b6001600160a01b03881660009081526006602052604090205460019060ff1680612eed57506001600160a01b03881660009081526006602052604090205460ff165b15612ef6575060005b6001600160a01b03891660009081526020819052604081208054899290612f1e908490613d66565b909155506000905081612f315787612f3d565b612f3d8a898989613649565b9050806000808b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612f739190613ddb565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fbf91815260200190565b60405180910390a3601454610100900460ff166130a957612fe08a8a6136f9565b601454610100900460ff16158015612ffd5750612ffd8a8a6130ea565b801561302257506001600160a01b038a1660009081526005602052604090205460ff16155b801561304757506001600160a01b03891660009081526005602052604090205460ff16155b8015613051575084155b156130a95760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d5f565b5060019998505050505050505050565b600081848411156130dd5760405162461bcd60e51b8152600401610d5f9190613839565b506000611d1c8486613d66565b6018546000906001600160a01b0384811691161480159061311957506018546001600160a01b03838116911614155b801561313057506018546001600160a01b03163214155b801561315557506001600160a01b03821660009081526004602052604090205460ff16155b801561317a57506001600160a01b03831660009081526004602052604090205460ff16155b801561319157506001600160a01b03821661dead14155b80156131a557506001600160a01b03821615155b80156131ba57506001600160a01b0383163014155b80156131da57506014546001600160a01b03848116620100009092041614155b801561152a5750506014546201000090046001600160a01b0390811691161415919050565b600f805460ff191660011790556040805160808101825260085461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b90049091166060820181905260000361325d57506135dd565b306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902054600019146132c057306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132f5576132f5613da4565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338c9190613f18565b8160018151811061339f5761339f613da4565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b81526101009091049091169063791ac947906133ec908690600090869030904290600401613f83565b600060405180830381600087803b15801561340657600080fd5b505af1925050508015613417575060015b6134225750506135dd565b6000479050600080846060015161ffff16856020015161ffff16846134479190613d4f565b6134519190613dee565b90506000856060015161ffff16866040015161ffff16856134729190613d4f565b61347c9190613dee565b9050600061348a8284613ddb565b6134949086613d66565b875190915061ffff16156134ff57600c546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d80600081146134f4576040519150601f19603f3d011682016040523d82523d6000602084013e6134f9565b606091505b50909450505b602087015161ffff161561356a57600d546040516001600160a01b039091169061d6d89085906000818181858888f193505050503d806000811461355f576040519150601f19603f3d011682016040523d82523d6000602084013e613564565b606091505b50909450505b604087015161ffff16156135d557600e546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d80600081146135ca576040519150601f19603f3d011682016040523d82523d6000602084013e6135cf565b606091505b50909450505b505050505050505b50600f805460ff19169055565b6000806135f78385613ddb565b90508381101561152a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d5f565b600080613656848461148a565b9050806000036136695784915050610d2d565b60006127106136788388613d4f565b6136829190613dee565b905080156136ef5730600090815260208190526040812080548392906136a9908490613ddb565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b612da68187613d66565b601454610100900460ff161561375d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d5f565b61376782826130ea565b1580156137815750600b546001600160a01b038281169116145b15611942576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556014805461ff0019166101001790819055620100009004166137f9576014805462010000600160b01b0319163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161205c565b60006020808352835180602085015260005b818110156138675785810183015185820160400152820161384b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461148757600080fd5b600080604083850312156138b057600080fd5b82356138bb81613888565b946020939093013593505050565b6000602082840312156138db57600080fd5b813561152a81613888565b6000806000606084860312156138fb57600080fd5b833561390681613888565b9250602084013561391681613888565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561396657613966613927565b604052919050565b600067ffffffffffffffff82111561398857613988613927565b5060051b60200190565b600082601f8301126139a357600080fd5b813560206139b86139b38361396e565b61393d565b8083825260208201915060208460051b8701019350868411156139da57600080fd5b602086015b848110156139f657803583529183019183016139df565b509695505050505050565b60008060408385031215613a1457600080fd5b823567ffffffffffffffff80821115613a2c57600080fd5b818501915085601f830112613a4057600080fd5b81356020613a506139b38361396e565b82815260059290921b84018101918181019089841115613a6f57600080fd5b948201945b83861015613a96578535613a8781613888565b82529482019490820190613a74565b96505086013592505080821115613aac57600080fd5b50613ab985828601613992565b9150509250929050565b600060208284031215613ad557600080fd5b5035919050565b803561ffff81168114613aee57600080fd5b919050565b600080600060608486031215613b0857600080fd5b613b1184613adc565b9250613b1f60208501613adc565b9150613b2d60408501613adc565b90509250925092565b801515811461148757600080fd5b60008060408385031215613b5757600080fd5b8235613b6281613888565b91506020830135613b7281613b36565b809150509250929050565b60008060408385031215613b9057600080fd5b8235613b6281613b36565b600080600060608486031215613bb057600080fd5b8335613bbb81613888565b92506020840135613bcb81613888565b91506040840135613bdb81613888565b809150509250925092565b60008060408385031215613bf957600080fd5b8235613c0481613888565b91506020830135613b7281613888565b60008060008060808587031215613c2a57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613c97578160001904821115613c7d57613c7d613c46565b80851615613c8a57918102915b93841c9390800290613c61565b509250929050565b600082613cae57506001610c68565b81613cbb57506000610c68565b8160018114613cd15760028114613cdb57613cf7565b6001915050610c68565b60ff841115613cec57613cec613c46565b50506001821b610c68565b5060208310610133831016604e8410600b8410161715613d1a575081810a610c68565b613d248383613c5c565b8060001904821115613d3857613d38613c46565b029392505050565b600061152a60ff841683613c9f565b8082028115828204841417610c6857610c68613c46565b81810381811115610c6857610c68613c46565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103613dd157613dd1613c46565b6001019392505050565b80820180821115610c6857610c68613c46565b600082613e0b57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60008060408385031215613e8057600080fd5b8251613e8b81613888565b6020840151909250613b7281613888565b60008060408385031215613eaf57600080fd5b505080516020909101519092909150565b61ffff818116838216019080821115613edb57613edb613c46565b5092915050565b600060208284031215613ef457600080fd5b5051919050565b600060208284031215613f0d57600080fd5b815161152a81613b36565b600060208284031215613f2a57600080fd5b815161152a81613888565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015613fd55784516001600160a01b031683529383019391830191600101613fb0565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212201b515c8275897495199493ee27bf3bb71553992de62ede03588bf5c9010dfefb64736f6c63430008180033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000003e50546092076300a8f1fdcc43d8c221a42fbf18000000000000000000000000ea4ebd03ed27a6c246749437ccf2cbef006bd1c90000000000000000000000003cdbbdf0588f60116b0a0651ed4bc6c62c7fcf40000000000000000000000000f7fb9dea516d351881c5d72f330cfc49ef52abbd

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806370a08231116101f2578063ab558e4d1161010d578063de7c2ed2116100a0578063fb78680d1161006f578063fb78680d14610bf8578063fdb78c0e14610c18578063fe48d6f914610af8578063feadde9c14610c3757600080fd5b8063de7c2ed214610b54578063eafb5a3c14610b6c578063ee5d9c2d14610b8c578063f94aa1b414610ba157600080fd5b8063bfc2fc35116100dc578063bfc2fc3514610a70578063cf84770614610a90578063d5299ff314610af8578063dd62ed3e14610b0e57600080fd5b8063ab558e4d14610a36578063b1b08f7114610606578063b3d514fb14610606578063b7df8b3614610a5657600080fd5b80638b13678411610185578063a9059cbb11610154578063a9059cbb146109ca578063a9e75723146109ea578063aa22b17214610a00578063aa4bde2814610a2057600080fd5b80638b136784146109465780638bf554091461095c57806395d89b411461097c5780639febf582146109aa57600080fd5b806380c581d1116101c157806380c581d1146108de578063893d20e8146108fe5780638a63bd9b1461091c5780638a8c523c1461093157600080fd5b806370a0823114610874578063715018a61461089457806375cb1bd1146108a957806378648edf146108c957600080fd5b8063313ce567116102e25780634fb2e45d116102755780635a6f0918116102445780635a6f0918146107ac5780635c24b074146107c25780635eb7413a146107e2578063606b89b71461085457600080fd5b80634fb2e45d146107145780634fbee1931461073457806350a8e0161461076d578063590ffdce1461078c57600080fd5b8063452ed4f1116102b1578063452ed4f11461069a5780634ada218b146106ba5780634bbb93eb146106d45780634e718e48146106f457600080fd5b8063313ce5671461063257806332cde6641461064e578063359289981461066e578063394188be1461068557600080fd5b806318160ddd1161035a578063285777511161032957806328577751146105db5780632b112e49146105f15780632b28fc7a146106065780632e8fa8211461061c57600080fd5b806318160ddd1461056457806323b872dd146105795780632610eaca1461059957806327a14fc2146105bb57600080fd5b80630758d924116103965780630758d924146104bc57806307dd79e0146104e1578063095ea7b31461050b5780630dcbcf1c1461052b57600080fd5b806303fd2a45146103d35780630445b66714610406578063069d955f1461042a57806306fdde031461048057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e961dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561041257600080fd5b5061041c60105481565b6040519081526020016103fd565b34801561043657600080fd5b5060075461045b9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103fd565b34801561048c57600080fd5b5060408051808201909152600a815269272cac1021a4a82422a960b11b60208201525b6040516103fd9190613839565b3480156104c857600080fd5b50600a546103e99061010090046001600160a01b031681565b3480156104ed57600080fd5b50600a546104fb9060ff1681565b60405190151581526020016103fd565b34801561051757600080fd5b506104fb61052636600461389d565b610c57565b34801561053757600080fd5b506104fb6105463660046138c9565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561057057600080fd5b5061041c610c6e565b34801561058557600080fd5b506104fb6105943660046138e6565b610c8f565b3480156105a557600080fd5b506105b96105b4366004613a01565b610d35565b005b3480156105c757600080fd5b506105b96105d6366004613ac3565b610ebb565b3480156105e757600080fd5b5061041c60135481565b3480156105fd57600080fd5b5061041c610f4e565b34801561061257600080fd5b5061041c6103e881565b34801561062857600080fd5b5061041c60115481565b34801561063e57600080fd5b50604051600881526020016103fd565b34801561065a57600080fd5b506105b9610669366004613af3565b610f93565b34801561067a57600080fd5b5061041c6276a70081565b34801561069157600080fd5b5061041c600481565b3480156106a657600080fd5b50600b546103e9906001600160a01b031681565b3480156106c657600080fd5b506014546104fb9060ff1681565b3480156106e057600080fd5b5061041c6106ef366004613ac3565b6110bd565b34801561070057600080fd5b506105b961070f366004613ac3565b6110ef565b34801561072057600080fd5b506105b961072f3660046138c9565b611168565b34801561074057600080fd5b506104fb61074f3660046138c9565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561077957600080fd5b506014546104fb90610100900460ff1681565b34801561079857600080fd5b506105b96107a7366004613b44565b611291565b3480156107b857600080fd5b5061041c60155481565b3480156107ce57600080fd5b506105b96107dd3660046138c9565b6112e6565b3480156107ee57600080fd5b5061082c6107fd3660046138c9565b600960205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016103fd565b34801561086057600080fd5b5061041c61086f366004613b7d565b61148a565b34801561088057600080fd5b5061041c61088f3660046138c9565b611531565b3480156108a057600080fd5b506105b961154c565b3480156108b557600080fd5b506105b96108c4366004613b9b565b611645565b3480156108d557600080fd5b506105b961172e565b3480156108ea57600080fd5b506105b96108f9366004613b44565b611767565b34801561090a57600080fd5b506018546001600160a01b03166103e9565b34801561092857600080fd5b506104fb611946565b34801561093d57600080fd5b506105b9611998565b34801561095257600080fd5b5061041c6109c481565b34801561096857600080fd5b506105b9610977366004613ac3565b611bc2565b34801561098857600080fd5b506040805180820190915260058152640244e5843560dc1b60208201526104af565b3480156109b657600080fd5b5061041c6109c53660046138c9565b611c57565b3480156109d657600080fd5b506104fb6109e536600461389d565b611d25565b3480156109f657600080fd5b5061041c60165481565b348015610a0c57600080fd5b506105b9610a1b366004613af3565b611d3c565b348015610a2c57600080fd5b5061041c60175481565b348015610a4257600080fd5b506105b9610a513660046138c9565b611e63565b348015610a6257600080fd5b506012546104fb9060ff1681565b348015610a7c57600080fd5b506105b9610a8b366004613b7d565b611fdf565b348015610a9c57600080fd5b50600854610aca9061ffff808216916201000081048216916401000000008204811691600160301b90041684565b6040805161ffff958616815293851660208501529184169183019190915290911660608201526080016103fd565b348015610b0457600080fd5b5061041c6101f481565b348015610b1a57600080fd5b5061041c610b29366004613be6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b6057600080fd5b5061041c6303b5380081565b348015610b7857600080fd5b506105b9610b873660046138c9565b612068565b348015610b9857600080fd5b506105b961243e565b348015610bad57600080fd5b50600c54600d54600e54610bce926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103fd565b348015610c0457600080fd5b506105b9610c13366004613c14565b6124f9565b348015610c2457600080fd5b50600f546104fb90610100900460ff1681565b348015610c4357600080fd5b506105b9610c52366004613b44565b612703565b6000610c64338484612758565b5060015b92915050565b6000610c7c6008600a613d40565b610c8a906305f5e100613d4f565b905090565b6001600160a01b038316600090815260036020908152604080832033845290915281205460001914610d22576001600160a01b0384166000908152600360209081526040808320338452909152902054610ce99083612851565b6001600160a01b038516600090815260036020908152604080832033845290915281208054909190610d1c908490613d66565b90915550505b610d2d848484612893565b949350505050565b6018546001600160a01b03163314610d685760405162461bcd60e51b8152600401610d5f90613d79565b60405180910390fd5b8051825114610db15760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610d5f565b60005b82518161ffff161015610eb657610dcd6008600a613d40565b828261ffff1681518110610de357610de3613da4565b6020026020010151610df59190613d4f565b610dfe33611531565b1015610e415760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610d5f565b610ea333848361ffff1681518110610e5b57610e5b613da4565b60200260200101516008600a610e719190613d40565b858561ffff1681518110610e8757610e87613da4565b6020026020010151610e999190613d4f565b6000806001612db1565b5080610eae81613dba565b915050610db4565b505050565b6018546001600160a01b03163314610ee55760405162461bcd60e51b8152600401610d5f90613d79565b60008111610f495760405162461bcd60e51b815260206004820152602b60248201527f4d61782077616c6c657420616d6f756e74206d7573742062652067726561746560448201526a72207468616e207a65726f60a81b6064820152608401610d5f565b601755565b6000610f5a6000611531565b610f6561dead611531565b610f6f9190613ddb565b610f7b6008600a613d40565b610f89906305f5e100613d4f565b610c8a9190613d66565b6018546001600160a01b03163314610fbd5760405162461bcd60e51b8152600401610d5f90613d79565b600a5460ff16156110045760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610d5f565b6103e88361ffff161115801561102057506103e88261ffff1611155b801561103257506103e88161ffff1611155b61107e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610d5f565b6007805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b600b546000906127109083906110db906001600160a01b0316611531565b6110e59190613d4f565b610c689190613dee565b6018546001600160a01b031633146111195760405162461bcd60e51b8152600401610d5f90613d79565b60968111156111635760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610d5f565b601355565b6018546001600160a01b031633146111925760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b0381166111b85760405162461bcd60e51b8152600401610d5f90613e10565b61deac196001600160a01b038216016111e35760405162461bcd60e51b8152600401610d5f90613e10565b6018546111fa906001600160a01b03166000611291565b611205816001611291565b60185460009061121d906001600160a01b0316611531565b111561123f5760185461123d906001600160a01b031682610e9982611531565b505b601880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6018546001600160a01b031633146112bb5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6018546001600160a01b031633146113105760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff161561132057600080fd5b306001600160a01b038216036113695760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610d5f565b6014805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301816000875af19250505080156113ef575060408051601f3d908101601f191682019092526113ec91810190613e6d565b60015b6113f857600080fd5b600a8054610100600160a81b0319166101006001600160a01b038581168202929092178355600b80546001600160a01b0319168584169081179091556000908152600160208190526040909120805460ff1916909117905560185492546114689383169291900416600019612758565b600a54610eb690309061010090046001600160a01b0316600019612758565b50565b60008083156114a0575060075461ffff166114ca565b82156114b9575060075462010000900461ffff166114ca565b50600754640100000000900461ffff165b601554421061152a576000603c601554426114e59190613d66565b6114ef9190613dee565b905060048110611505576101f492505050610c68565b60006115136101f483613d4f565b61151f906109c4613d66565b9350610c6892505050565b9392505050565b6001600160a01b031660009081526020819052604090205490565b6018546001600160a01b031633146115765760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff166115e05760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201526e39903132b2b71032b730b13632b21760891b6064820152608401610d5f565b6018546115f7906001600160a01b03166000611291565b601880546001600160a01b031981169091556040516001600160a01b039091169060009082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6018546001600160a01b0316331461166f5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b0383161580159061168f57506001600160a01b03821615155b80156116a357506001600160a01b03811615155b6116ef5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610d5f565b600c80546001600160a01b039485166001600160a01b031991821617909155600d805493851693821693909317909255600e8054919093169116179055565b6018546001600160a01b031633146117585760405162461bcd60e51b8152600401610d5f90613d79565b600a805460ff19166001179055565b6018546001600160a01b031633146117915760405162461bcd60e51b8152600401610d5f90613d79565b80611821576001600160a01b03828116600081815260016020526040808220805460ff1916905560145490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d1906044015b600060405180830381600087803b15801561180557600080fd5b505af1158015611819573d6000803e3d6000fd5b505050505050565b6002541561187a576203f4806002544261183b9190613d66565b1161187a5760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610d5f565b6001600160a01b03821660009081526001602052604090205460ff16156118e35760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610d5f565b6001600160a01b03828116600081815260016020819052604091829020805460ff1916821790554260025560145491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d1906044016117eb565b5050565b6018546000906001600160a01b031633146119735760405162461bcd60e51b8152600401610d5f90613d79565b600a5461199290309061010090046001600160a01b0316600019612758565b50600190565b6018546001600160a01b031633146119c25760405162461bcd60e51b8152600401610d5f90613d79565b60145460ff1615611a155760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d5f565b601454610100900460ff16611a6c5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d5f565b6014546201000090046001600160a01b0316611a9c576014805462010000600160b01b0319163062010000021790555b601454600b54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260086064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611b0e57600080fd5b505af1925050508015611b1f575060015b50601454600b546001600160a01b03620100009092048216916325a71cae91611b489116611531565b6040518263ffffffff1660e01b8152600401611b6691815260200190565b60408051808303816000875af1925050508015611ba0575060408051601f3d908101601f19168201909252611b9d91810190613e9c565b60015b15611baf576010919091556011555b6014805460ff1916600117905542601555565b6018546001600160a01b03163314611bec5760405162461bcd60e51b8152600401610d5f90613d79565b60008111611c525760405162461bcd60e51b815260206004820152602d60248201527f4d6178207472616e7366657220616d6f756e74206d757374206265206772656160448201526c746572207468616e207a65726f60981b6064820152608401610d5f565b601655565b6001600160a01b0381166000908152600960209081526040808320815160a0810183528154815260018201549381018490526002820154928101929092526003810154606083015260040154608082015290421015611cb95750600092915050565b6000816040015142611ccb9190613d66565b905081606001518110611ce95760808201518251610d2d9190613d66565b60008260600151828460000151611d009190613d4f565b611d0a9190613dee565b9050826080015181611d1c9190613d66565b95945050505050565b6000611d32338484612893565b5060019392505050565b6018546001600160a01b03163314611d665760405162461bcd60e51b8152600401610d5f90613d79565b6008805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff1990941692881692909217929092171617905580611daa8385613ec0565b611db49190613ec0565b6008805467ffff0000000000001916600160301b61ffff93841602179055600754600091611deb9162010000810482169116613ec0565b60085461ffff9182169250600160301b900416811015611e5d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610d5f565b50505050565b6018546001600160a01b03163314611e8d5760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff1615611ef557306001600160a01b03821603611ef55760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610d5f565b6018546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015611f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f709190613ee2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb69190613efb565b6018546001600160a01b031633146120095760405162461bcd60e51b8152600401610d5f90613d79565b600f805461ff001916610100841515908102919091179091556012805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6018546001600160a01b031633146120925760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff16156120ea5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610d5f565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121539190613f18565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c49190613f18565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561220f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122339190613f18565b600b546001600160a01b039081166000908152600160205260409020805460ff1916905590915081166123c957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561229e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c29190613f18565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561230f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123339190613f18565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a49190613f18565b600b80546001600160a01b0319166001600160a01b03929092169190911790556123e5565b600b80546001600160a01b0319166001600160a01b0383161790555b600a8054610100600160a81b0319166101006001600160a01b038581168202929092178355600b5482166000908152600160208190526040909120805460ff191690911790559154610eb6923092910416600019612758565b6018546001600160a01b031633146124685760405162461bcd60e51b8152600401610d5f90613d79565b601454610100900460ff16156124c05760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610d5f565b6018546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611487573d6000803e3d6000fd5b6018546001600160a01b031633146125235760405162461bcd60e51b8152600401610d5f90613d79565b82846125316008600a613d40565b61253f906305f5e100613d4f565b6125499190613d4f565b6125539190613dee565b60105580826125646008600a613d40565b612572906305f5e100613d4f565b61257c9190613d4f565b6125869190613dee565b601181905560105411156125e65760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610d5f565b600b54612710906125ff906001600160a01b0316611531565b61260a906096613d4f565b6126149190613dee565b60115411156126715760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610d5f565b620f42406126816008600a613d40565b61268f906305f5e100613d4f565b6126999190613dee565b60115410156126ba5760405162461bcd60e51b8152600401610d5f90613f35565b620f42406126ca6008600a613d40565b6126d8906305f5e100613d4f565b6126e29190613dee565b6010541015611e5d5760405162461bcd60e51b8152600401610d5f90613f35565b6018546001600160a01b0316331461272d5760405162461bcd60e51b8152600401610d5f90613d79565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b0383166127a45760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d5f565b6001600160a01b0382166127f05760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610d5f565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061152a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130b9565b60006001600160a01b0384166128f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d5f565b6001600160a01b03831661295b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d5f565b600082116129bd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d5f565b6001600160a01b03841660009081526006602052604090205460ff161580156129ff57506001600160a01b03831660009081526006602052604090205460ff16155b15612af357601654821115612a625760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657220616d6f756e74206578636565647320746865203125206c6044820152631a5b5a5d60e21b6064820152608401610d5f565b6001600160a01b038316600090815260208190526040812054612a86908490613ddb565b9050601754811115612af15760405162461bcd60e51b815260206004820152602e60248201527f526563697069656e742065786365656473206d6178696d756d2077616c6c657460448201526d0818985b185b98d9481b1a5b5a5d60921b6064820152608401610d5f565b505b6001600160a01b0384166000908152600160205260408120548190819060ff1615612b215760019250612b4f565b6001600160a01b03861660009081526001602052604090205460ff1615612b4b5760019150612b4f565b5060015b600e546001600160a01b0390811690881603612bfd57600b546001600160a01b0387811691161480612b8b57506001600160a01b03861661dead145b612bfd5760405162461bcd60e51b815260206004820152603760248201527f6275794261636b4275726e4c502063616e206f6e6c792073656e6420746f204460448201527f45582070616972206f72206275726e20616464726573730000000000000000006064820152608401610d5f565b612c0787876130ea565b15612d085760145460ff16612d085780612c635760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d5f565b6001600160a01b03871660009081526005602052604090205460ff16158015612ca557506001600160a01b03861660009081526005602052604090205460ff16155b15612d085760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610d5f565b8115612d9857600f5460ff16612d9857600f54610100900460ff1615612d98576000612d3330611531565b90506010548110612d965760115460125460ff1615612d8057601354600b546127109190612d69906001600160a01b0316611531565b612d739190613d4f565b612d7d9190613dee565b90505b808210612d8b578091505b612d94826131ff565b505b505b612da6878787868686612db1565b979650505050505050565b6001600160a01b03861660009081526020818152604080832054600990925282205415612eab576000612de389611c57565b6001600160a01b038a16600090815260096020526040902054909150612e1590612e0e908390613d66565b8390612851565b915081871115612e675760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206578636565647320756e6c6f636b656420746f6b656e7300006044820152606401610d5f565b6001600160a01b038916600090815260096020526040902060040154612e8d90886135ea565b6001600160a01b038a16600090815260096020526040902060040155505b6001600160a01b03881660009081526006602052604090205460019060ff1680612eed57506001600160a01b03881660009081526006602052604090205460ff165b15612ef6575060005b6001600160a01b03891660009081526020819052604081208054899290612f1e908490613d66565b909155506000905081612f315787612f3d565b612f3d8a898989613649565b9050806000808b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254612f739190613ddb565b92505081905550886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fbf91815260200190565b60405180910390a3601454610100900460ff166130a957612fe08a8a6136f9565b601454610100900460ff16158015612ffd5750612ffd8a8a6130ea565b801561302257506001600160a01b038a1660009081526005602052604090205460ff16155b801561304757506001600160a01b03891660009081526005602052604090205460ff16155b8015613051575084155b156130a95760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610d5f565b5060019998505050505050505050565b600081848411156130dd5760405162461bcd60e51b8152600401610d5f9190613839565b506000611d1c8486613d66565b6018546000906001600160a01b0384811691161480159061311957506018546001600160a01b03838116911614155b801561313057506018546001600160a01b03163214155b801561315557506001600160a01b03821660009081526004602052604090205460ff16155b801561317a57506001600160a01b03831660009081526004602052604090205460ff16155b801561319157506001600160a01b03821661dead14155b80156131a557506001600160a01b03821615155b80156131ba57506001600160a01b0383163014155b80156131da57506014546001600160a01b03848116620100009092041614155b801561152a5750506014546201000090046001600160a01b0390811691161415919050565b600f805460ff191660011790556040805160808101825260085461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b90049091166060820181905260000361325d57506135dd565b306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902054600019146132c057306000908152600360209081526040808320600a5461010090046001600160a01b03168452909152902060001990555b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132f5576132f5613da4565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338c9190613f18565b8160018151811061339f5761339f613da4565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b81526101009091049091169063791ac947906133ec908690600090869030904290600401613f83565b600060405180830381600087803b15801561340657600080fd5b505af1925050508015613417575060015b6134225750506135dd565b6000479050600080846060015161ffff16856020015161ffff16846134479190613d4f565b6134519190613dee565b90506000856060015161ffff16866040015161ffff16856134729190613d4f565b61347c9190613dee565b9050600061348a8284613ddb565b6134949086613d66565b875190915061ffff16156134ff57600c546040516001600160a01b039091169061d6d89083906000818181858888f193505050503d80600081146134f4576040519150601f19603f3d011682016040523d82523d6000602084013e6134f9565b606091505b50909450505b602087015161ffff161561356a57600d546040516001600160a01b039091169061d6d89085906000818181858888f193505050503d806000811461355f576040519150601f19603f3d011682016040523d82523d6000602084013e613564565b606091505b50909450505b604087015161ffff16156135d557600e546040516001600160a01b039091169061d6d89084906000818181858888f193505050503d80600081146135ca576040519150601f19603f3d011682016040523d82523d6000602084013e6135cf565b606091505b50909450505b505050505050505b50600f805460ff19169055565b6000806135f78385613ddb565b90508381101561152a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d5f565b600080613656848461148a565b9050806000036136695784915050610d2d565b60006127106136788388613d4f565b6136829190613dee565b905080156136ef5730600090815260208190526040812080548392906136a9908490613ddb565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b612da68187613d66565b601454610100900460ff161561375d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d5f565b61376782826130ea565b1580156137815750600b546001600160a01b038281169116145b15611942576001600160a01b038083166000908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556014805461ff0019166101001790819055620100009004166137f9576014805462010000600160b01b0319163062010000021790555b600f805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200161205c565b60006020808352835180602085015260005b818110156138675785810183015185820160400152820161384b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461148757600080fd5b600080604083850312156138b057600080fd5b82356138bb81613888565b946020939093013593505050565b6000602082840312156138db57600080fd5b813561152a81613888565b6000806000606084860312156138fb57600080fd5b833561390681613888565b9250602084013561391681613888565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561396657613966613927565b604052919050565b600067ffffffffffffffff82111561398857613988613927565b5060051b60200190565b600082601f8301126139a357600080fd5b813560206139b86139b38361396e565b61393d565b8083825260208201915060208460051b8701019350868411156139da57600080fd5b602086015b848110156139f657803583529183019183016139df565b509695505050505050565b60008060408385031215613a1457600080fd5b823567ffffffffffffffff80821115613a2c57600080fd5b818501915085601f830112613a4057600080fd5b81356020613a506139b38361396e565b82815260059290921b84018101918181019089841115613a6f57600080fd5b948201945b83861015613a96578535613a8781613888565b82529482019490820190613a74565b96505086013592505080821115613aac57600080fd5b50613ab985828601613992565b9150509250929050565b600060208284031215613ad557600080fd5b5035919050565b803561ffff81168114613aee57600080fd5b919050565b600080600060608486031215613b0857600080fd5b613b1184613adc565b9250613b1f60208501613adc565b9150613b2d60408501613adc565b90509250925092565b801515811461148757600080fd5b60008060408385031215613b5757600080fd5b8235613b6281613888565b91506020830135613b7281613b36565b809150509250929050565b60008060408385031215613b9057600080fd5b8235613b6281613b36565b600080600060608486031215613bb057600080fd5b8335613bbb81613888565b92506020840135613bcb81613888565b91506040840135613bdb81613888565b809150509250925092565b60008060408385031215613bf957600080fd5b8235613c0481613888565b91506020830135613b7281613888565b60008060008060808587031215613c2a57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115613c97578160001904821115613c7d57613c7d613c46565b80851615613c8a57918102915b93841c9390800290613c61565b509250929050565b600082613cae57506001610c68565b81613cbb57506000610c68565b8160018114613cd15760028114613cdb57613cf7565b6001915050610c68565b60ff841115613cec57613cec613c46565b50506001821b610c68565b5060208310610133831016604e8410600b8410161715613d1a575081810a610c68565b613d248383613c5c565b8060001904821115613d3857613d38613c46565b029392505050565b600061152a60ff841683613c9f565b8082028115828204841417610c6857610c68613c46565b81810381811115610c6857610c68613c46565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600061ffff808316818103613dd157613dd1613c46565b6001019392505050565b80820180821115610c6857610c68613c46565b600082613e0b57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b60008060408385031215613e8057600080fd5b8251613e8b81613888565b6020840151909250613b7281613888565b60008060408385031215613eaf57600080fd5b505080516020909101519092909150565b61ffff818116838216019080821115613edb57613edb613c46565b5092915050565b600060208284031215613ef457600080fd5b5051919050565b600060208284031215613f0d57600080fd5b815161152a81613b36565b600060208284031215613f2a57600080fd5b815161152a81613888565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015613fd55784516001600160a01b031683529383019391830191600101613fb0565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212201b515c8275897495199493ee27bf3bb71553992de62ede03588bf5c9010dfefb64736f6c63430008180033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.