ETH Price: $3,178.33 (+1.81%)
Gas: 2 Gwei

Contract

0x60927b83DdD2096f38f22a8A2D84cf863402d1A1
 

Overview

ETH Balance

0.180067165420272916 ETH

Eth Value

$572.31 (@ $3,178.33/ETH)

More Info

Private Name Tags

TokenTracker

Eternal AI (MIND) (@$0.0062)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve203004592024-07-13 22:06:475 hrs ago1720908407IN
Eternal AI: MIND Token
0 ETH0.000114382.45719503
Approve202967212024-07-13 9:34:3517 hrs ago1720863275IN
Eternal AI: MIND Token
0 ETH0.000074281.5957998
Approve202958032024-07-13 6:30:1120 hrs ago1720852211IN
Eternal AI: MIND Token
0 ETH0.000119762.57274103
Approve202905492024-07-12 12:54:1138 hrs ago1720788851IN
Eternal AI: MIND Token
0 ETH0.000089283.67926227
Approve202768402024-07-10 14:56:593 days ago1720623419IN
Eternal AI: MIND Token
0 ETH0.0003561412.2118191
Approve202635192024-07-08 18:16:475 days ago1720462607IN
Eternal AI: MIND Token
0 ETH0.000247575.31129676
Transfer202634872024-07-08 18:10:235 days ago1720462223IN
Eternal AI: MIND Token
0 ETH0.00037815.20855723
Approve202613902024-07-08 11:07:595 days ago1720436879IN
Eternal AI: MIND Token
0 ETH0.000184213.95720605
Approve202611862024-07-08 10:26:115 days ago1720434371IN
Eternal AI: MIND Token
0 ETH0.000203674.37529048
Approve202570632024-07-07 20:36:596 days ago1720384619IN
Eternal AI: MIND Token
0 ETH0.000063792.62228025
Approve202501872024-07-06 21:34:477 days ago1720301687IN
Eternal AI: MIND Token
0 ETH0.000087321.88704663
Approve202459162024-07-06 7:15:597 days ago1720250159IN
Eternal AI: MIND Token
0 ETH0.000208744.48420786
Approve202430672024-07-05 21:43:118 days ago1720215791IN
Eternal AI: MIND Token
0 ETH0.000108412.3428692
Approve202421552024-07-05 18:39:598 days ago1720204799IN
Eternal AI: MIND Token
0 ETH0.000206824.44287823
Approve202362632024-07-04 22:55:599 days ago1720133759IN
Eternal AI: MIND Token
0 ETH0.000213974.62390477
Approve202119812024-07-01 13:31:1112 days ago1719840671IN
Eternal AI: MIND Token
0 ETH0.000178487.33677978
Approve202102202024-07-01 7:36:5912 days ago1719819419IN
Eternal AI: MIND Token
0 ETH0.000316876.80699586
Approve202079302024-06-30 23:56:2313 days ago1719791783IN
Eternal AI: MIND Token
0 ETH0.000184953.97303627
Transfer202071002024-06-30 21:09:5913 days ago1719781799IN
Eternal AI: MIND Token
0 ETH0.000416685.7400509
Approve202041872024-06-30 11:24:5913 days ago1719746699IN
Eternal AI: MIND Token
0 ETH0.000119122.57425815
Transfer202041712024-06-30 11:21:4713 days ago1719746507IN
Eternal AI: MIND Token
0 ETH0.000173442.38929061
Approve202009742024-06-30 0:38:2314 days ago1719707903IN
Eternal AI: MIND Token
0 ETH0.000086931.87816742
Approve201890282024-06-28 8:36:1115 days ago1719563771IN
Eternal AI: MIND Token
0 ETH0.000200774.31287959
Transfer201872162024-06-28 2:31:5916 days ago1719541919IN
Eternal AI: MIND Token
0 ETH0.000325966.37741056
Approve201781202024-06-26 20:02:4717 days ago1719432167IN
Eternal AI: MIND Token
0 ETH0.0006058113.01363651
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
203004612024-07-13 22:07:115 hrs ago1720908431
0x60927b83...63402d1A1
0 ETH
203004612024-07-13 22:07:115 hrs ago1720908431
0x60927b83...63402d1A1
0 ETH
203004612024-07-13 22:07:115 hrs ago1720908431
0x60927b83...63402d1A1
0 ETH
202967352024-07-13 9:37:2317 hrs ago1720863443
0x60927b83...63402d1A1
0 ETH
202967352024-07-13 9:37:2317 hrs ago1720863443
0x60927b83...63402d1A1
0 ETH
202967352024-07-13 9:37:2317 hrs ago1720863443
0x60927b83...63402d1A1
0 ETH
202962842024-07-13 8:06:5919 hrs ago1720858019
0x60927b83...63402d1A1
0 ETH
202962842024-07-13 8:06:5919 hrs ago1720858019
0x60927b83...63402d1A1
0 ETH
202962842024-07-13 8:06:5919 hrs ago1720858019
0x60927b83...63402d1A1
0 ETH
202962842024-07-13 8:06:5919 hrs ago1720858019
0x60927b83...63402d1A1
0 ETH
202958072024-07-13 6:31:1120 hrs ago1720852271
0x60927b83...63402d1A1
0 ETH
202958072024-07-13 6:31:1120 hrs ago1720852271
0x60927b83...63402d1A1
0 ETH
202958072024-07-13 6:31:1120 hrs ago1720852271
0x60927b83...63402d1A1
0 ETH
202768422024-07-10 14:57:233 days ago1720623443
0x60927b83...63402d1A1
0 ETH
202768422024-07-10 14:57:233 days ago1720623443
0x60927b83...63402d1A1
0 ETH
202768422024-07-10 14:57:233 days ago1720623443
0x60927b83...63402d1A1
0 ETH
202768422024-07-10 14:57:233 days ago1720623443
0x60927b83...63402d1A1
0 ETH
202768422024-07-10 14:57:233 days ago1720623443
0x60927b83...63402d1A1
0 ETH
202768422024-07-10 14:57:233 days ago1720623443
0x60927b83...63402d1A1
0 ETH
202768422024-07-10 14:57:233 days ago1720623443
0x60927b83...63402d1A1
0 ETH
202768422024-07-10 14:57:233 days ago1720623443
0x60927b83...63402d1A1
0 ETH
202731292024-07-10 2:32:234 days ago1720578743
0x60927b83...63402d1A1
0 ETH
202731292024-07-10 2:32:234 days ago1720578743
0x60927b83...63402d1A1
0 ETH
202731292024-07-10 2:32:234 days ago1720578743
0x60927b83...63402d1A1
0 ETH
202635212024-07-08 18:17:115 days ago1720462631
0x60927b83...63402d1A1
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EternalAI

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-28
*/

/**

ETERNAL AI - Immortality Starts Here.

Website: https://immortalitystartshere.io
Telegram: https://t.me/EternalAI
Linktree: https://linktr.ee/EternalAI

*/

// ██████  ███████ ██    ██  ██████  ██      ██    ██ ███████ ██  ██████  ███    ██                   
// ██   ██ ██      ██    ██ ██    ██ ██      ██    ██     ██  ██ ██    ██ ████   ██                  
// ██████  █████   ██    ██ ██    ██ ██      ██    ██   ██    ██ ██    ██ ██ ██  ██                   
// ██   ██ ██       ██  ██  ██    ██ ██      ██    ██  ██     ██ ██    ██ ██  ██ ██                   
// ██   ██ ███████   ████    ██████  ███████  ██████  ███████ ██  ██████  ██   ████    

// CONTRACT DEVELOPED BY REVOLUZION

// Revoluzion Ecosystem
// WEB: https://revoluzion.io
// DAPP: https://revoluzion.app

// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;

/********************************************************************************************
  INTERFACE
********************************************************************************************/

interface IERC20 {
    
    // EVENT 

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

    // FUNCTION

    function name() external view returns (string memory);
    
    function symbol() external view returns (string memory);
    
    function decimals() external view returns (uint8);
    
    function totalSupply() external view returns (uint256);
    
    function balanceOf(address account) external view returns (uint256);
    
    function transfer(address to, uint256 amount) external returns (bool);
    
    function allowance(address owner, address spender) external view returns (uint256);
    
    function approve(address spender, uint256 amount) external returns (bool);
    
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

interface IPair {

    // FUNCTION

    function token0() external view returns (address);

    function token1() external view returns (address);
}

interface IFactory {

    // FUNCTION

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

interface IRouter {

    // FUNCTION

    function WETH() external pure returns (address);
        
    function factory() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;
    
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable;
    
    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts);
}

interface ICommonError {

    // ERROR

    error CannotUseCurrentAddress(address current);

    error CannotUseCurrentValue(uint256 current);

    error CannotUseCurrentState(bool current);

    error InvalidAddress(address invalid);

    error InvalidValue(uint256 invalid);
}

/********************************************************************************************
  ACCESS
********************************************************************************************/

abstract contract Ownable {
    
    // DATA

    address private _owner;

    // MODIFIER

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    // ERROR

    error InvalidOwner(address account);

    error UnauthorizedAccount(address account);

    // CONSTRUCTOR

    constructor(address initialOwner) {
        _transferOwnership(initialOwner);
    }

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

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

    function _checkOwner() internal view virtual {
        if (owner() != msg.sender) {
            revert UnauthorizedAccount(msg.sender);
        }
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert InvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

/********************************************************************************************
  TOKEN
********************************************************************************************/

contract EternalAI is Ownable, ICommonError, IERC20 {

    // DATA

    IRouter public router;

    string private constant NAME = "Eternal AI";
    string private constant SYMBOL = "MIND";

    uint8 private constant DECIMALS = 18;

    uint256 private _totalSupply;
    
    uint256 public constant FEEDENOMINATOR = 10_000;

    uint256 public buyFee = 4_000;
    uint256 public sellFee = 4_000;
    uint256 public transferFee = 0;
    uint256 public walletLimit = 200;
    uint256 public tradeStartTime = 0;
    uint256 public totalFeeCollected = 0;
    uint256 public totalFeeRedeemed = 0;
    uint256 public totalTriggerZeusBuyback = 0;
    uint256 public lastTriggerZeusTimestamp = 0;
    uint256 public minSwap = 10_000 ether;

    bool private constant ISMIND = true;

    bool public tradeEnabled = false;
    bool public isFeeActive = false;
    bool public isFeeLocked = false;
    bool public isSwapEnabled = false;
    bool public inSwap = false;
    bool public isWalletLimited = true;

    address public constant PROJECTOWNER = 0xe17e01EAA9A6Eca41dBD87161736a0D76F21995A;

    address public feeReceiver = 0x3D0829EAdE8AF8d9FeC3924dEf36970fDEA82462;

    address public pair;
    
    // MAPPING

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isExcludeFromFees;
    mapping(address => bool) public isExcludeFromWalletLimits;
    mapping(address => bool) public isPairLP;

    // MODIFIER

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

    // ERROR

    error InvalidTradeEnabledState(bool current);

    error InvalidFeeActiveState(bool current);

    error InvalidSwapEnabledState(bool current);

    error ExceedMaxFeeAllowed(uint256 limit);

    error ExceedWalletLimit(uint256 limit);

    error TradeDisabled();

    error FeeUpdateLocked();

    error WalletLimitRemoved();

    // CONSTRUCTOR

    constructor() Ownable (msg.sender) {
        _mint(msg.sender, 10_000_000 * 10**DECIMALS);

        router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IFactory(router.factory()).createPair(address(this), router.WETH());

        isPairLP[pair] = true;

        isExcludeFromFees[msg.sender] = true;
        isExcludeFromFees[address(router)] = true;

        isExcludeFromWalletLimits[msg.sender] = true;
        isExcludeFromWalletLimits[pair] = true;
    }

    // EVENT

    event UpdateRouter(address oldRouter, address newRouter, address caller, uint256 timestamp);

    event UpdateMinSwap(uint256 oldMinSwap, uint256 newMinSwap, address caller, uint256 timestamp);

    event UpdateFeeActive(bool oldStatus, bool newStatus, address caller, uint256 timestamp);

    event UpdateFeeReceiver(address oldReceiver, address newReceiver, address caller, uint256 timestamp);

    event UpdateBuyFee(uint256 oldFee, uint256 newFee, address caller, uint256 timestamp);

    event UpdateSellFee(uint256 oldFee, uint256 newFee, address caller, uint256 timestamp);

    event UpdateTransferFee(uint256 oldFee, uint256 newFee, address caller, uint256 timestamp);

    event UpdateSwapEnabled(bool oldStatus, bool newStatus, address caller, uint256 timestamp);
        
    event AutoRedeem(uint256 feeDistribution, uint256 amountToRedeem, address caller, uint256 timestamp);

    event EnableTrading(address caller, uint256 timestamp);

    event ExcludeFromFees(bool oldStatus, bool newStatus, address caller, uint256 timestamp);
    
    event ExcludeFromWalletLimits(bool oldStatus, bool newStatus, address caller, uint256 timestamp);

    event FeeLocked(address caller, uint256 timestamp);

    event RemoveWalletLimit(address caller, uint256 timestamp);

    // FUNCTION

    /* General */

    receive() external payable {}

    function enableTrading() external onlyOwner {
        if (tradeEnabled) { revert InvalidTradeEnabledState(tradeEnabled); }
        if (isFeeActive) { revert InvalidFeeActiveState(isFeeActive); }
        if (isSwapEnabled) { revert InvalidSwapEnabledState(isSwapEnabled); }
        tradeEnabled = true;
        isFeeActive = true;
        isSwapEnabled = true;
        tradeStartTime = block.timestamp;
        emit EnableTrading(msg.sender, tradeStartTime);
    }

    /* Redeem */

    function autoRedeem(uint256 amountToRedeem) public swapping {          
        totalFeeRedeemed += amountToRedeem;

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

        _approve(address(this), address(router), amountToRedeem);
        
        emit AutoRedeem(amountToRedeem, amountToRedeem, msg.sender, block.timestamp);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToRedeem,
            0,
            path,
            feeReceiver,
            block.timestamp
        );
    }

    /* Check */

    function isEternalAI() external pure returns (bool) {
        return ISMIND;
    }

    function circulatingSupply() external view returns (uint256) {
        return totalSupply() - balanceOf(address(0xdead)) - balanceOf(address(0));
    }

    function checkWalletLimit(uint256 amount, address to) public view {
        uint256 limit = totalSupply() * walletLimit / FEEDENOMINATOR;
        if (!isExcludeFromWalletLimits[to]) {
            if (balanceOf(to) + amount > limit) {
                revert ExceedWalletLimit(limit);
            }
        }
    }

    /* Update */

    function updateRouter(address newRouter) external onlyOwner {
        if (address(router) == newRouter) { revert CannotUseCurrentAddress(newRouter); }
        address oldRouter = address(router);
        router = IRouter(newRouter);
        
        isExcludeFromFees[newRouter] = true;

        emit UpdateRouter(oldRouter, newRouter, msg.sender, block.timestamp);
        pair = IFactory(router.factory()).createPair(address(this), router.WETH());
        isPairLP[pair] = true;
        if (isWalletLimited) {
            isExcludeFromWalletLimits[pair] = true;
        }
    }

    function updateMinSwap(uint256 newMinSwap) external onlyOwner {
        if (minSwap == newMinSwap) { revert CannotUseCurrentValue(newMinSwap); }
        uint256 oldMinSwap = minSwap;
        minSwap = newMinSwap;
        emit UpdateMinSwap(oldMinSwap, newMinSwap, msg.sender, block.timestamp);
    }

    function lockFee() external onlyOwner {
        if (isFeeLocked) { revert FeeUpdateLocked(); }
        isFeeLocked = true;
        emit FeeLocked(msg.sender, block.timestamp);
    }

    function removeWalletLimit() external onlyOwner {
        if (!isWalletLimited) { revert WalletLimitRemoved(); }
        isWalletLimited = false;
        emit RemoveWalletLimit(msg.sender, block.timestamp);
    }

    function updateFeeActive(bool newStatus) external onlyOwner {
        if (isFeeLocked) { revert FeeUpdateLocked(); }
        if (isFeeActive == newStatus) { revert CannotUseCurrentState(newStatus); }
        bool oldStatus = isFeeActive;
        isFeeActive = newStatus;
        emit UpdateFeeActive(oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function updateBuyFee(uint256 newFee) external onlyOwner {
        if (isFeeLocked) { revert FeeUpdateLocked(); }
        if (newFee == buyFee) { revert CannotUseCurrentValue(newFee); }
        if (newFee > 4_000) { revert ExceedMaxFeeAllowed(4_000); }
        uint256 oldFee = buyFee;
        buyFee = newFee;
        emit UpdateBuyFee(oldFee, newFee, msg.sender, block.timestamp);
    }

    function updateSellFee(uint256 newFee) external onlyOwner {
        if (isFeeLocked) { revert FeeUpdateLocked(); }
        if (newFee == sellFee) { revert CannotUseCurrentValue(newFee); }
        if (newFee > 4_000) { revert ExceedMaxFeeAllowed(4_000); }
        uint256 oldFee = sellFee;
        sellFee = newFee;
        emit UpdateSellFee(oldFee, newFee, msg.sender, block.timestamp);
    }

    function updateTransferFee(uint256 newFee) external onlyOwner {
        if (isFeeLocked) { revert FeeUpdateLocked(); }
        if (newFee == transferFee) { revert CannotUseCurrentValue(newFee); }
        if (newFee > 4_000) { revert ExceedMaxFeeAllowed(4_000); }
        uint256 oldFee = transferFee;
        transferFee = newFee;
        emit UpdateTransferFee(oldFee, newFee, msg.sender, block.timestamp);
    }

    function updateFeeReceiver(address newReceiver) external onlyOwner {
        if (feeReceiver == newReceiver) { revert CannotUseCurrentAddress(newReceiver); }
        address oldReceiver = feeReceiver;
        feeReceiver = newReceiver;
        emit UpdateFeeReceiver(oldReceiver, newReceiver, msg.sender, block.timestamp);
    }

    function updateSwapEnabled(bool newStatus) external onlyOwner {
        if (isSwapEnabled == newStatus) { revert CannotUseCurrentState(newStatus); }
        bool oldStatus = isSwapEnabled;
        isSwapEnabled = newStatus;
        emit UpdateSwapEnabled(oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function setExcludeFromFees(address user, bool newStatus) external onlyOwner {
        if (isExcludeFromFees[user] == newStatus) { revert CannotUseCurrentState(newStatus); }
        bool oldStatus = isExcludeFromFees[user];
        isExcludeFromFees[user] = newStatus;
        emit ExcludeFromFees(oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function setExcludeFromWalletLimits(address user, bool newStatus) external onlyOwner {
        if (isExcludeFromWalletLimits[user] == newStatus) { revert CannotUseCurrentState(newStatus); }
        bool oldStatus = isExcludeFromWalletLimits[user];
        isExcludeFromWalletLimits[user] = newStatus;
        emit ExcludeFromWalletLimits(oldStatus, newStatus, msg.sender, block.timestamp);
    }

    function setPairLP(address lpPair, bool status) external onlyOwner {
        if (isPairLP[lpPair] == status) { revert CannotUseCurrentState(status); }
        if (IPair(lpPair).token0() != address(this) && IPair(lpPair).token1() != address(this)) { revert InvalidAddress(lpPair); }
        isPairLP[lpPair] = status;
    }

    /* Fee */

    function takeBuyFee(address from, uint256 amount, uint256 fee) internal swapping returns (uint256) {
        uint256 feeAmount = amount * fee / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        if (feeAmount > 0) {
            tallyCollection(from, feeAmount);
        }
        return newAmount;
    }

    function takeSellFee(address from, uint256 amount, uint256 fee) internal swapping returns (uint256) {
        uint256 feeAmount = amount * fee / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        if (feeAmount > 0) {
            tallyCollection(from, feeAmount);
        }
        return newAmount;
    }

    function takeTransferFee(address from, uint256 amount, uint256 fee) internal swapping returns (uint256) {
        uint256 feeAmount = amount * fee / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        if (feeAmount > 0) {
            tallyCollection(from, feeAmount);
        }
        return newAmount;
    }

    function tallyCollection(address from, uint256 collectFee) internal swapping {
        totalFeeCollected += collectFee;
        _basicTransfer(from, address(this), collectFee);
    }

    /* Buyback */

    function triggerZeusBuyback(uint256 amount) external onlyOwner {
        totalTriggerZeusBuyback += amount;
        lastTriggerZeusTimestamp = block.timestamp;
        buyTokens(amount, address(0xdead));
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        if (msg.sender == address(0xdead)) { revert InvalidAddress(address(0xdead)); }
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        } (0, path, to, block.timestamp);
    }

    /* ERC20 Standard */

    function name() external view virtual override returns (string memory) {
        return NAME;
    }
    
    function symbol() external view virtual override returns (string memory) {
        return SYMBOL;
    }
    
    function decimals() external view virtual override returns (uint8) {
        return DECIMALS;
    }
    
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    
    function transfer(address to, uint256 amount) external virtual override returns (bool) {
        address provider = msg.sender;
        return _transfer(provider, to, amount);
    }
    
    function allowance(address provider, address spender) public view virtual override returns (uint256) {
        return _allowances[provider][spender];
    }
    
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address provider = msg.sender;
        _approve(provider, spender, amount);
        return true;
    }
    
    function transferFrom(address from, address to, uint256 amount) external virtual override returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        return _transfer(from, to, amount);
    }
    
    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        address provider = msg.sender;
        _approve(provider, spender, allowance(provider, spender) + addedValue);
        return true;
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        address provider = msg.sender;
        uint256 currentAllowance = allowance(provider, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(provider, spender, currentAllowance - subtractedValue);
        }

        return true;
    }
    
    function _mint(address account, uint256 amount) internal virtual {
        if (account == address(0)) { revert InvalidAddress(account); }

        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

    function _approve(address provider, address spender, uint256 amount) internal virtual {
        if (provider == address(0)) { revert InvalidAddress(provider); }
        if (spender == address(0)) { revert InvalidAddress(spender); }

        _allowances[provider][spender] = amount;
        emit Approval(provider, spender, amount);
    }
    
    function _spendAllowance(address provider, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(provider, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(provider, spender, currentAllowance - amount);
            }
        }
    }

    /* Additional */

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

        emit Transfer(from, to, amount);
        return true;
    }
    
    /* Overrides */
 
    function _transfer(address from, address to, uint256 amount) internal virtual returns (bool) {
        if (from == address(0)) { revert InvalidAddress(from); }
        if (to == address(0)) { revert InvalidAddress(to); }

        if (!tradeEnabled && !isExcludeFromFees[from] && !isExcludeFromFees[to]) {
            revert TradeDisabled();
        }

        if (inSwap || isExcludeFromFees[from]) {
            return _basicTransfer(from, to, amount);
        }

        if (from != pair && isSwapEnabled && balanceOf(address(this)) >= minSwap && totalFeeCollected - totalFeeRedeemed >= minSwap) {
            autoRedeem(minSwap);
        }

        uint256 newAmount = amount;

        if (isFeeActive && !isExcludeFromFees[from] && !isExcludeFromFees[to]) {
            newAmount = _beforeTokenTransfer(from, to, amount);
        }

        if (isWalletLimited) {
            checkWalletLimit(newAmount, to);
        }

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

        emit Transfer(from, to, newAmount);

        return true;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal swapping virtual returns (uint256) {        
        if (isPairLP[from]) {
            if (buyFee > 0) {
                return takeBuyFee(from, amount, buyFee);
            }
        }
        if (isPairLP[to]) {
            if (sellFee > 0) {
                return takeSellFee(from, amount, sellFee);
            }
        }
        if (!isPairLP[from] && !isPairLP[to]) {
            if (transferFee > 0) {
                return takeTransferFee(from, amount, transferFee);
            }
        }
        return amount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"current","type":"address"}],"name":"CannotUseCurrentAddress","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"CannotUseCurrentState","type":"error"},{"inputs":[{"internalType":"uint256","name":"current","type":"uint256"}],"name":"CannotUseCurrentValue","type":"error"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"ExceedMaxFeeAllowed","type":"error"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"ExceedWalletLimit","type":"error"},{"inputs":[],"name":"FeeUpdateLocked","type":"error"},{"inputs":[{"internalType":"address","name":"invalid","type":"address"}],"name":"InvalidAddress","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"InvalidFeeActiveState","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"InvalidOwner","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"InvalidSwapEnabledState","type":"error"},{"inputs":[{"internalType":"bool","name":"current","type":"bool"}],"name":"InvalidTradeEnabledState","type":"error"},{"inputs":[{"internalType":"uint256","name":"invalid","type":"uint256"}],"name":"InvalidValue","type":"error"},{"inputs":[],"name":"TradeDisabled","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"UnauthorizedAccount","type":"error"},{"inputs":[],"name":"WalletLimitRemoved","type":"error"},{"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":"feeDistribution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRedeem","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AutoRedeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"EnableTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ExcludeFromWalletLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"FeeLocked","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":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RemoveWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateFeeActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"newReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateFeeReceiver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinSwap","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateMinSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateSwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateTransferFee","type":"event"},{"inputs":[],"name":"FEEDENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROJECTOWNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"autoRedeem","outputs":[],"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":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"checkWalletLimit","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isEternalAI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeFromWalletLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPairLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWalletLimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTriggerZeusTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"setExcludeFromWalletLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lpPair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setPairLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTriggerZeusBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"triggerZeusBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newReceiver","type":"address"}],"name":"updateFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinSwap","type":"uint256"}],"name":"updateMinSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610fa060038190556004556000600581905560c8600655600781905560088190556009819055600a819055600b5569021e19e0c9bab2400000600c55600d80546001600160d01b031916793d0829eade8af8d9fec3924def36970fdea824620100000000001790553480156200007957600080fd5b50336200008681620002c4565b50620000af336200009a6012600a620004cd565b620000a99062989680620004e5565b62000314565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013a9190620004ff565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c39190620004ff565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000211573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002379190620004ff565b600e80546001600160a01b0319166001600160a01b0392831690811782556000908152601360209081526040808320805460ff19908116600190811790925533808652601185528386208054831684179055825488168652838620805483168417905585526012909352818420805484168217905593549094168252929020805490921617905562000540565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166200034b57604051634726455360e11b81526001600160a01b038316600482015260240160405180910390fd5b80600260008282546200035f91906200052a565b90915550506001600160a01b0382166000818152600f60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200040f578160001904821115620003f357620003f3620003b8565b808516156200040157918102915b93841c9390800290620003d3565b509250929050565b6000826200042857506001620004c7565b816200043757506000620004c7565b81600181146200045057600281146200045b576200047b565b6001915050620004c7565b60ff8411156200046f576200046f620003b8565b50506001821b620004c7565b5060208310610133831016604e8410600b8410161715620004a0575081810a620004c7565b620004ac8383620003ce565b8060001904821115620004c357620004c3620003b8565b0290505b92915050565b6000620004de60ff84168362000417565b9392505050565b8082028115828204841417620004c757620004c7620003b8565b6000602082840312156200051257600080fd5b81516001600160a01b0381168114620004de57600080fd5b80820180821115620004c757620004c7620003b8565b6127dc80620005506000396000f3fe60806040526004361061037a5760003560e01c80638a8c523c116101d1578063b3f0067411610102578063d8306786116100a0578063f2a426871161006f578063f2a4268714610a0b578063f2fde38b14610a3b578063f31d5c7a14610a5b578063f887ea4014610a7b57600080fd5b8063d830678614610995578063da4daf71146109b6578063dd62ed3e146109cc578063e43504da146109ec57600080fd5b8063c69bebe4116100dc578063c69bebe41461091b578063c851cc321461093b578063d621e8131461095b578063d63cad221461097557600080fd5b8063b3f00674146108be578063b908de8c146108e5578063b9b2b5cd1461090557600080fd5b8063a457c2d71161016f578063ab28a04c11610149578063ab28a04c1461084d578063acb2ad6f14610863578063adc7b55614610879578063b144896f146108a957600080fd5b8063a457c2d7146107ed578063a8aa1b311461080d578063a9059cbb1461082d57600080fd5b806392b7a373116101ab57806392b7a373146107815780639358928b1461079557806395d89b41146107aa57806397e1b9d3146107d757600080fd5b80638a8c523c1461072e5780638da5cb5b14610743578063924de9b71461076157600080fd5b80633c8463a1116102ab57806363fcc9221161024957806371538eed1161022357806371538eed1461069857806375fed3c7146106ae57806378eec331146106ce5780638577a6d51461070e57600080fd5b806363fcc9221461062d57806370a082311461064d578063715018a61461068357600080fd5b806356a062351161028557806356a06235146105c257806359cd9031146105d7578063625dd605146105ed57806363a954921461060d57600080fd5b80633c8463a114610576578063467abe0a1461058c57806347062402146105ac57600080fd5b806323b872dd11610318578063313ce567116102f2578063313ce567146104f9578063351a964d1461051557806339509351146105365780633bf314541461055657600080fd5b806323b872dd146104ad5780632b14ca56146104cd5780632c735ef8146104e357600080fd5b8063095ea7b311610354578063095ea7b31461042d5780630b3acc6c1461044d57806318160ddd1461046e5780631d933a4a1461048d57600080fd5b8063012951431461038657806306fdde03146103a857806308c43650146103ed57600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a13660046123f0565b610a9b565b005b3480156103b457600080fd5b5060408051808201909152600a815269457465726e616c20414960b01b60208201525b6040516103e49190612409565b60405180910390f35b3480156103f957600080fd5b5061041d61040836600461246c565b60136020526000908152604090205460ff1681565b60405190151581526020016103e4565b34801561043957600080fd5b5061041d610448366004612489565b610c79565b34801561045957600080fd5b50600d5461041d90600160281b900460ff1681565b34801561047a57600080fd5b506002545b6040519081526020016103e4565b34801561049957600080fd5b506103a66104a83660046123f0565b610c93565b3480156104b957600080fd5b5061041d6104c83660046124b5565b610d60565b3480156104d957600080fd5b5061047f60045481565b3480156104ef57600080fd5b5061047f60075481565b34801561050557600080fd5b50604051601281526020016103e4565b34801561052157600080fd5b50600d5461041d906301000000900460ff1681565b34801561054257600080fd5b5061041d610551366004612489565b610d84565b34801561056257600080fd5b506103a661057136600461250b565b610da6565b34801561058257600080fd5b5061047f60065481565b34801561059857600080fd5b506103a66105a73660046123f0565b610e64565b3480156105b857600080fd5b5061047f60035481565b3480156105ce57600080fd5b506103a6610f20565b3480156105e357600080fd5b5061047f600c5481565b3480156105f957600080fd5b506103a6610608366004612526565b610f9e565b34801561061957600080fd5b506103a66106283660046123f0565b611134565b34801561063957600080fd5b506103a661064836600461255b565b611166565b34801561065957600080fd5b5061047f61066836600461246c565b6001600160a01b03166000908152600f602052604090205490565b34801561068f57600080fd5b506103a6611200565b3480156106a457600080fd5b5061047f60095481565b3480156106ba57600080fd5b506103a66106c93660046123f0565b611214565b3480156106da57600080fd5b506106f673e17e01eaa9a6eca41dbd87161736a0d76f21995a81565b6040516001600160a01b0390911681526020016103e4565b34801561071a57600080fd5b506103a66107293660046123f0565b61127f565b34801561073a57600080fd5b506103a661133b565b34801561074f57600080fd5b506000546001600160a01b03166106f6565b34801561076d57600080fd5b506103a661077c36600461250b565b611436565b34801561078d57600080fd5b50600161041d565b3480156107a157600080fd5b5061047f6114ce565b3480156107b657600080fd5b506040805180820190915260048152631352539160e21b60208201526103d7565b3480156107e357600080fd5b5061047f600b5481565b3480156107f957600080fd5b5061041d610808366004612489565b61153e565b34801561081957600080fd5b50600e546106f6906001600160a01b031681565b34801561083957600080fd5b5061041d610848366004612489565b6115c4565b34801561085957600080fd5b5061047f61271081565b34801561086f57600080fd5b5061047f60055481565b34801561088557600080fd5b5061041d61089436600461246c565b60126020526000908152604090205460ff1681565b3480156108b557600080fd5b506103a66115da565b3480156108ca57600080fd5b50600d546106f690600160301b90046001600160a01b031681565b3480156108f157600080fd5b50600d5461041d9062010000900460ff1681565b34801561091157600080fd5b5061047f60085481565b34801561092757600080fd5b506103a661093636600461246c565b611650565b34801561094757600080fd5b506103a661095636600461246c565b611713565b34801561096757600080fd5b50600d5461041d9060ff1681565b34801561098157600080fd5b506103a6610990366004612526565b6119bb565b3480156109a157600080fd5b50600d5461041d90600160201b900460ff1681565b3480156109c257600080fd5b5061047f600a5481565b3480156109d857600080fd5b5061047f6109e736600461258b565b611a77565b3480156109f857600080fd5b50600d5461041d90610100900460ff1681565b348015610a1757600080fd5b5061041d610a2636600461246c565b60116020526000908152604090205460ff1681565b348015610a4757600080fd5b506103a6610a5636600461246c565b611aa2565b348015610a6757600080fd5b506103a6610a76366004612526565b611add565b348015610a8757600080fd5b506001546106f6906001600160a01b031681565b600d805460ff60201b1916600160201b17905560098054829190600090610ac39084906125cf565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610afd57610afd6125e2565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a91906125f8565b81600181518110610b8d57610b8d6125e2565b6001600160a01b039283166020918202929092010152600154610bb39130911684611b8c565b7fb933c1b294702108551eddf782a9c7d1a018b57f68ecf63bc59a1247daa19c3082833342604051610be89493929190612615565b60405180910390a1600154600d5460405163791ac94760e01b81526001600160a01b039283169263791ac94792610c369287926000928892600160301b90910490911690429060040161267d565b600060405180830381600087803b158015610c5057600080fd5b505af1158015610c64573d6000803e3d6000fd5b5050600d805460ff60201b1916905550505050565b600033610c87818585611b8c565b60019150505b92915050565b610c9b611c51565b600d5462010000900460ff1615610cc5576040516334d2d20d60e01b815260040160405180910390fd5b6004548103610cef5760405163657e16cf60e01b8152600481018290526024015b60405180910390fd5b610fa0811115610d165760405163bcbac79d60e01b8152610fa06004820152602401610ce6565b60048054908290556040517f303e7b18c743f03402db563f20359b822ba8bb215a8460ba6c5f5b1f401b868290610d54908390859033904290612615565b60405180910390a15050565b600033610d6e858285611c8d565b610d79858585611d07565b9150505b9392505050565b600033610c87818585610d978383611a77565b610da191906125cf565b611b8c565b610dae611c51565b600d5462010000900460ff1615610dd8576040516334d2d20d60e01b815260040160405180910390fd5b801515600d60019054906101000a900460ff16151503610e0e5760405162a7e72d60e41b81528115156004820152602401610ce6565b600d805461ff0019811661010084151581029190911790925560405191900460ff16907ff99f9d4d81f67d0980beea494b4404ba3b8af1a0a2d493230f1a883efa027f2f90610d549083908590339042906126b9565b610e6c611c51565b600d5462010000900460ff1615610e96576040516334d2d20d60e01b815260040160405180910390fd5b6003548103610ebb5760405163657e16cf60e01b815260048101829052602401610ce6565b610fa0811115610ee25760405163bcbac79d60e01b8152610fa06004820152602401610ce6565b60038054908290556040517f90874b2697cc8e5401df6338d4549d0467cdd4f7e96a2cd367659b2eff89a07990610d54908390859033904290612615565b610f28611c51565b600d5462010000900460ff1615610f52576040516334d2d20d60e01b815260040160405180910390fd5b600d805462ff0000191662010000179055604080513381524260208201527fca4b83ef2493ff5998e26a690f3450e9a0d57028e86c4c6cdd804980e8b4db5991015b60405180910390a1565b610fa6611c51565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503610fea5760405162a7e72d60e41b81528115156004820152602401610ce6565b306001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105691906125f8565b6001600160a01b0316141580156110e05750306001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d491906125f8565b6001600160a01b031614155b1561110957604051634726455360e11b81526001600160a01b0383166004820152602401610ce6565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b61113c611c51565b80600a600082825461114e91906125cf565b909155505042600b556111638161dead611fc7565b50565b600061271060065461117760025490565b61118191906126df565b61118b91906126f6565b6001600160a01b03831660009081526012602052604090205490915060ff166111fb5780836111cf846001600160a01b03166000908152600f602052604090205490565b6111d991906125cf565b11156111fb57604051633ad0b44360e11b815260048101829052602401610ce6565b505050565b611208611c51565b6112126000612160565b565b61121c611c51565b80600c54036112415760405163657e16cf60e01b815260048101829052602401610ce6565b600c8054908290556040517f9a9f4704ac409fe039e92a996e415370980275aaff2992936ed5b432886c55c590610d54908390859033904290612615565b611287611c51565b600d5462010000900460ff16156112b1576040516334d2d20d60e01b815260040160405180910390fd5b60055481036112d65760405163657e16cf60e01b815260048101829052602401610ce6565b610fa08111156112fd5760405163bcbac79d60e01b8152610fa06004820152602401610ce6565b60058054908290556040517f93f0ae7c5c2922bf736e77b4999848c80112f12ae2c18ab4d80c1f55557a0fff90610d54908390859033904290612615565b611343611c51565b600d5460ff161561137257600d546040516301bf623960e61b815260ff90911615156004820152602401610ce6565b600d54610100900460ff16156113aa57600d54604051630eff900b60e21b815261010090910460ff1615156004820152602401610ce6565b600d546301000000900460ff16156113e657600d5460405163610a8e6760e01b8152630100000090910460ff1615156004820152602401610ce6565b600d805463ff00ffff191663010001011790554260078190556040805133815260208101929092527f57367f86c2ca0eaed4ba8c6af83cb711a82cc7169d53b6a3629605a12c602d729101610f94565b61143e611c51565b801515600d60039054906101000a900460ff161515036114745760405162a7e72d60e41b81528115156004820152602401610ce6565b600d805463ff000000198116630100000084151581029190911790925560405191900460ff16907fa9eb6c000d17475b17651469533695f7b673c93327fdbadf4341ebeb2607a04490610d549083908590339042906126b9565b600f6020527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755461dead60009081527f99629f56119585bf27511b6b7d295dffb54757453fcc3dabcf51d92028301f105460025491929161152f9190612718565b6115399190612718565b905090565b6000338161154c8286611a77565b9050838110156115ac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce6565b6115b98286868403611b8c565b506001949350505050565b6000336115d2818585611d07565b949350505050565b6115e2611c51565b600d54600160281b900460ff1661160c5760405163019601bd60e41b815260040160405180910390fd5b600d805465ff000000000019169055604080513381524260208201527f59880a54046a9fec9f80ba8d2b8d6ec5be58ae5691f68759db37399025bd38069101610f94565b611658611c51565b600d546001600160a01b03808316600160301b90920416036116985760405163a936636960e01b81526001600160a01b0382166004820152602401610ce6565b600d80546001600160a01b03838116600160301b8181026601000000000000600160d01b0319851617909455604080519490930490911680845260208401919091523391830191909152426060830152907f8398165ebfaa5831ed8697905b76704b18bb44c19f6630c76c8fa68f32dc7dfe90608001610d54565b61171b611c51565b6001546001600160a01b038083169116036117545760405163a936636960e01b81526001600160a01b0382166004820152602401610ce6565b600180546001600160a01b038381166001600160a01b0319831681178455600081815260116020908152604091829020805460ff19169096179095558051929093168083529382015233918101919091524260608201527fe1cb783288eddc7b22c25642a832d886a558be0dd900747310a34156b9fdcbbb9060800160405180910390a1600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f91906125f8565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d591906125f8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611922573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194691906125f8565b600e80546001600160a01b03929092166001600160a01b0319909216821790556000908152601360205260409020805460ff19166001179055600d54600160281b900460ff16156119b757600e546001600160a01b03166000908152601260205260409020805460ff191660011790555b5050565b6119c3611c51565b6001600160a01b03821660009081526011602052604090205481151560ff909116151503611a075760405162a7e72d60e41b81528115156004820152602401610ce6565b6001600160a01b03821660009081526011602052604090819020805483151560ff19821617909155905160ff909116907f4c18d53c2d0e765ff1dc3e5d53d8c51002cc0b5c114aa07199d629d54fad593e90611a6a9083908590339042906126b9565b60405180910390a1505050565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205490565b611aaa611c51565b6001600160a01b038116611ad45760405163b20f76e360e01b815260006004820152602401610ce6565b61116381612160565b611ae5611c51565b6001600160a01b03821660009081526012602052604090205481151560ff909116151503611b295760405162a7e72d60e41b81528115156004820152602401610ce6565b6001600160a01b03821660009081526012602052604090819020805483151560ff19821617909155905160ff909116907f887bfffde87b3f64221a6b7de2ee5ef7503d2388b41b153cfb301c26087a7f3c90611a6a9083908590339042906126b9565b6001600160a01b038316611bbe57604051634726455360e11b81526001600160a01b0384166004820152602401610ce6565b6001600160a01b038216611bf057604051634726455360e11b81526001600160a01b0383166004820152602401610ce6565b6001600160a01b0383811660008181526010602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b33611c646000546001600160a01b031690565b6001600160a01b031614611212576040516332b2baa360e01b8152336004820152602401610ce6565b6000611c998484611a77565b90506000198114611d015781811015611cf45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ce6565b611d018484848403611b8c565b50505050565b60006001600160a01b038416611d3b57604051634726455360e11b81526001600160a01b0385166004820152602401610ce6565b6001600160a01b038316611d6d57604051634726455360e11b81526001600160a01b0384166004820152602401610ce6565b600d5460ff16158015611d9957506001600160a01b03841660009081526011602052604090205460ff16155b8015611dbe57506001600160a01b03831660009081526011602052604090205460ff16155b15611ddc57604051632b61510560e11b815260040160405180910390fd5b600d54600160201b900460ff1680611e0c57506001600160a01b03841660009081526011602052604090205460ff165b15611e2357611e1c8484846121b0565b9050610d7d565b600e546001600160a01b03858116911614801590611e4a5750600d546301000000900460ff165b8015611e675750600c54306000908152600f602052604090205410155b8015611e845750600c54600954600854611e819190612718565b10155b15611e9457611e94600c54610a9b565b600d548290610100900460ff168015611ec657506001600160a01b03851660009081526011602052604090205460ff16155b8015611eeb57506001600160a01b03841660009081526011602052604090205460ff16155b15611efe57611efb858585612249565b90505b600d54600160281b900460ff1615611f1a57611f1a8185611166565b6001600160a01b0385166000908152600f6020526040902054811115611f525760405162461bcd60e51b8152600401610ce69061272b565b6001600160a01b038086166000818152600f6020526040808220805486900390559287168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fb49085815260200190565b60405180910390a3506001949350505050565b600d805460ff60201b1916600160201b17905561deac19330161200157604051634726455360e11b815261dead6004820152602401610ce6565b6040805160028082526060820183526000926020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f91906125f8565b816000815181106120a2576120a26125e2565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106120d6576120d66125e2565b6001600160a01b03928316602091820292909201015260015460405163b6f9de9560e01b815291169063b6f9de9590859061211c90600090869088904290600401612771565b6000604051808303818588803b15801561213557600080fd5b505af1158015612149573d6000803e3d6000fd5b5050600d805460ff60201b19169055505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600f6020526040812054828110156121e95760405162461bcd60e51b8152600401610ce69061272b565b6001600160a01b038086166000818152600f602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fb49087815260200190565b600d805460ff60201b1916600160201b1790556001600160a01b03831660009081526013602052604081205460ff16156122995760035415612299576122928483600354612342565b905061232e565b6001600160a01b03831660009081526013602052604090205460ff16156122cf57600454156122cf576122928483600454612342565b6001600160a01b03841660009081526013602052604090205460ff1615801561231157506001600160a01b03831660009081526013602052604090205460ff16155b1561232b576005541561232b576122928483600554612342565b50805b600d805460ff60201b191690559392505050565b600d805460ff60201b1916600160201b17905560008061271061236584866126df565b61236f91906126f6565b9050600061237d8286612718565b9050811561238f5761238f86836123a5565b600d805460ff60201b1916905595945050505050565b600d805460ff60201b1916600160201b179055600880548291906000906123cd9084906125cf565b909155506123de90508230836121b0565b5050600d805460ff60201b1916905550565b60006020828403121561240257600080fd5b5035919050565b600060208083528351808285015260005b818110156124365785810183015185820160400152820161241a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461116357600080fd5b60006020828403121561247e57600080fd5b8135610d7d81612457565b6000806040838503121561249c57600080fd5b82356124a781612457565b946020939093013593505050565b6000806000606084860312156124ca57600080fd5b83356124d581612457565b925060208401356124e581612457565b929592945050506040919091013590565b8035801515811461250657600080fd5b919050565b60006020828403121561251d57600080fd5b610d7d826124f6565b6000806040838503121561253957600080fd5b823561254481612457565b9150612552602084016124f6565b90509250929050565b6000806040838503121561256e57600080fd5b82359150602083013561258081612457565b809150509250929050565b6000806040838503121561259e57600080fd5b82356125a981612457565b9150602083013561258081612457565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c8d57610c8d6125b9565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561260a57600080fd5b8151610d7d81612457565b93845260208401929092526001600160a01b03166040830152606082015260800190565b600081518084526020808501945080840160005b838110156126725781516001600160a01b03168752958201959082019060010161264d565b509495945050505050565b85815284602082015260a06040820152600061269c60a0830186612639565b6001600160a01b0394909416606083015250608001529392505050565b931515845291151560208401526001600160a01b03166040830152606082015260800190565b8082028115828204841417610c8d57610c8d6125b9565b60008261271357634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610c8d57610c8d6125b9565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b84815260806020820152600061278a6080830186612639565b6001600160a01b0394909416604083015250606001529291505056fea2646970667358221220f518e1152a2680f1f401993c6ae7398aa1aebd1ac2db77090985e503a455f81864736f6c63430008120033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80638a8c523c116101d1578063b3f0067411610102578063d8306786116100a0578063f2a426871161006f578063f2a4268714610a0b578063f2fde38b14610a3b578063f31d5c7a14610a5b578063f887ea4014610a7b57600080fd5b8063d830678614610995578063da4daf71146109b6578063dd62ed3e146109cc578063e43504da146109ec57600080fd5b8063c69bebe4116100dc578063c69bebe41461091b578063c851cc321461093b578063d621e8131461095b578063d63cad221461097557600080fd5b8063b3f00674146108be578063b908de8c146108e5578063b9b2b5cd1461090557600080fd5b8063a457c2d71161016f578063ab28a04c11610149578063ab28a04c1461084d578063acb2ad6f14610863578063adc7b55614610879578063b144896f146108a957600080fd5b8063a457c2d7146107ed578063a8aa1b311461080d578063a9059cbb1461082d57600080fd5b806392b7a373116101ab57806392b7a373146107815780639358928b1461079557806395d89b41146107aa57806397e1b9d3146107d757600080fd5b80638a8c523c1461072e5780638da5cb5b14610743578063924de9b71461076157600080fd5b80633c8463a1116102ab57806363fcc9221161024957806371538eed1161022357806371538eed1461069857806375fed3c7146106ae57806378eec331146106ce5780638577a6d51461070e57600080fd5b806363fcc9221461062d57806370a082311461064d578063715018a61461068357600080fd5b806356a062351161028557806356a06235146105c257806359cd9031146105d7578063625dd605146105ed57806363a954921461060d57600080fd5b80633c8463a114610576578063467abe0a1461058c57806347062402146105ac57600080fd5b806323b872dd11610318578063313ce567116102f2578063313ce567146104f9578063351a964d1461051557806339509351146105365780633bf314541461055657600080fd5b806323b872dd146104ad5780632b14ca56146104cd5780632c735ef8146104e357600080fd5b8063095ea7b311610354578063095ea7b31461042d5780630b3acc6c1461044d57806318160ddd1461046e5780631d933a4a1461048d57600080fd5b8063012951431461038657806306fdde03146103a857806308c43650146103ed57600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a13660046123f0565b610a9b565b005b3480156103b457600080fd5b5060408051808201909152600a815269457465726e616c20414960b01b60208201525b6040516103e49190612409565b60405180910390f35b3480156103f957600080fd5b5061041d61040836600461246c565b60136020526000908152604090205460ff1681565b60405190151581526020016103e4565b34801561043957600080fd5b5061041d610448366004612489565b610c79565b34801561045957600080fd5b50600d5461041d90600160281b900460ff1681565b34801561047a57600080fd5b506002545b6040519081526020016103e4565b34801561049957600080fd5b506103a66104a83660046123f0565b610c93565b3480156104b957600080fd5b5061041d6104c83660046124b5565b610d60565b3480156104d957600080fd5b5061047f60045481565b3480156104ef57600080fd5b5061047f60075481565b34801561050557600080fd5b50604051601281526020016103e4565b34801561052157600080fd5b50600d5461041d906301000000900460ff1681565b34801561054257600080fd5b5061041d610551366004612489565b610d84565b34801561056257600080fd5b506103a661057136600461250b565b610da6565b34801561058257600080fd5b5061047f60065481565b34801561059857600080fd5b506103a66105a73660046123f0565b610e64565b3480156105b857600080fd5b5061047f60035481565b3480156105ce57600080fd5b506103a6610f20565b3480156105e357600080fd5b5061047f600c5481565b3480156105f957600080fd5b506103a6610608366004612526565b610f9e565b34801561061957600080fd5b506103a66106283660046123f0565b611134565b34801561063957600080fd5b506103a661064836600461255b565b611166565b34801561065957600080fd5b5061047f61066836600461246c565b6001600160a01b03166000908152600f602052604090205490565b34801561068f57600080fd5b506103a6611200565b3480156106a457600080fd5b5061047f60095481565b3480156106ba57600080fd5b506103a66106c93660046123f0565b611214565b3480156106da57600080fd5b506106f673e17e01eaa9a6eca41dbd87161736a0d76f21995a81565b6040516001600160a01b0390911681526020016103e4565b34801561071a57600080fd5b506103a66107293660046123f0565b61127f565b34801561073a57600080fd5b506103a661133b565b34801561074f57600080fd5b506000546001600160a01b03166106f6565b34801561076d57600080fd5b506103a661077c36600461250b565b611436565b34801561078d57600080fd5b50600161041d565b3480156107a157600080fd5b5061047f6114ce565b3480156107b657600080fd5b506040805180820190915260048152631352539160e21b60208201526103d7565b3480156107e357600080fd5b5061047f600b5481565b3480156107f957600080fd5b5061041d610808366004612489565b61153e565b34801561081957600080fd5b50600e546106f6906001600160a01b031681565b34801561083957600080fd5b5061041d610848366004612489565b6115c4565b34801561085957600080fd5b5061047f61271081565b34801561086f57600080fd5b5061047f60055481565b34801561088557600080fd5b5061041d61089436600461246c565b60126020526000908152604090205460ff1681565b3480156108b557600080fd5b506103a66115da565b3480156108ca57600080fd5b50600d546106f690600160301b90046001600160a01b031681565b3480156108f157600080fd5b50600d5461041d9062010000900460ff1681565b34801561091157600080fd5b5061047f60085481565b34801561092757600080fd5b506103a661093636600461246c565b611650565b34801561094757600080fd5b506103a661095636600461246c565b611713565b34801561096757600080fd5b50600d5461041d9060ff1681565b34801561098157600080fd5b506103a6610990366004612526565b6119bb565b3480156109a157600080fd5b50600d5461041d90600160201b900460ff1681565b3480156109c257600080fd5b5061047f600a5481565b3480156109d857600080fd5b5061047f6109e736600461258b565b611a77565b3480156109f857600080fd5b50600d5461041d90610100900460ff1681565b348015610a1757600080fd5b5061041d610a2636600461246c565b60116020526000908152604090205460ff1681565b348015610a4757600080fd5b506103a6610a5636600461246c565b611aa2565b348015610a6757600080fd5b506103a6610a76366004612526565b611add565b348015610a8757600080fd5b506001546106f6906001600160a01b031681565b600d805460ff60201b1916600160201b17905560098054829190600090610ac39084906125cf565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610afd57610afd6125e2565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a91906125f8565b81600181518110610b8d57610b8d6125e2565b6001600160a01b039283166020918202929092010152600154610bb39130911684611b8c565b7fb933c1b294702108551eddf782a9c7d1a018b57f68ecf63bc59a1247daa19c3082833342604051610be89493929190612615565b60405180910390a1600154600d5460405163791ac94760e01b81526001600160a01b039283169263791ac94792610c369287926000928892600160301b90910490911690429060040161267d565b600060405180830381600087803b158015610c5057600080fd5b505af1158015610c64573d6000803e3d6000fd5b5050600d805460ff60201b1916905550505050565b600033610c87818585611b8c565b60019150505b92915050565b610c9b611c51565b600d5462010000900460ff1615610cc5576040516334d2d20d60e01b815260040160405180910390fd5b6004548103610cef5760405163657e16cf60e01b8152600481018290526024015b60405180910390fd5b610fa0811115610d165760405163bcbac79d60e01b8152610fa06004820152602401610ce6565b60048054908290556040517f303e7b18c743f03402db563f20359b822ba8bb215a8460ba6c5f5b1f401b868290610d54908390859033904290612615565b60405180910390a15050565b600033610d6e858285611c8d565b610d79858585611d07565b9150505b9392505050565b600033610c87818585610d978383611a77565b610da191906125cf565b611b8c565b610dae611c51565b600d5462010000900460ff1615610dd8576040516334d2d20d60e01b815260040160405180910390fd5b801515600d60019054906101000a900460ff16151503610e0e5760405162a7e72d60e41b81528115156004820152602401610ce6565b600d805461ff0019811661010084151581029190911790925560405191900460ff16907ff99f9d4d81f67d0980beea494b4404ba3b8af1a0a2d493230f1a883efa027f2f90610d549083908590339042906126b9565b610e6c611c51565b600d5462010000900460ff1615610e96576040516334d2d20d60e01b815260040160405180910390fd5b6003548103610ebb5760405163657e16cf60e01b815260048101829052602401610ce6565b610fa0811115610ee25760405163bcbac79d60e01b8152610fa06004820152602401610ce6565b60038054908290556040517f90874b2697cc8e5401df6338d4549d0467cdd4f7e96a2cd367659b2eff89a07990610d54908390859033904290612615565b610f28611c51565b600d5462010000900460ff1615610f52576040516334d2d20d60e01b815260040160405180910390fd5b600d805462ff0000191662010000179055604080513381524260208201527fca4b83ef2493ff5998e26a690f3450e9a0d57028e86c4c6cdd804980e8b4db5991015b60405180910390a1565b610fa6611c51565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503610fea5760405162a7e72d60e41b81528115156004820152602401610ce6565b306001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105691906125f8565b6001600160a01b0316141580156110e05750306001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d491906125f8565b6001600160a01b031614155b1561110957604051634726455360e11b81526001600160a01b0383166004820152602401610ce6565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b61113c611c51565b80600a600082825461114e91906125cf565b909155505042600b556111638161dead611fc7565b50565b600061271060065461117760025490565b61118191906126df565b61118b91906126f6565b6001600160a01b03831660009081526012602052604090205490915060ff166111fb5780836111cf846001600160a01b03166000908152600f602052604090205490565b6111d991906125cf565b11156111fb57604051633ad0b44360e11b815260048101829052602401610ce6565b505050565b611208611c51565b6112126000612160565b565b61121c611c51565b80600c54036112415760405163657e16cf60e01b815260048101829052602401610ce6565b600c8054908290556040517f9a9f4704ac409fe039e92a996e415370980275aaff2992936ed5b432886c55c590610d54908390859033904290612615565b611287611c51565b600d5462010000900460ff16156112b1576040516334d2d20d60e01b815260040160405180910390fd5b60055481036112d65760405163657e16cf60e01b815260048101829052602401610ce6565b610fa08111156112fd5760405163bcbac79d60e01b8152610fa06004820152602401610ce6565b60058054908290556040517f93f0ae7c5c2922bf736e77b4999848c80112f12ae2c18ab4d80c1f55557a0fff90610d54908390859033904290612615565b611343611c51565b600d5460ff161561137257600d546040516301bf623960e61b815260ff90911615156004820152602401610ce6565b600d54610100900460ff16156113aa57600d54604051630eff900b60e21b815261010090910460ff1615156004820152602401610ce6565b600d546301000000900460ff16156113e657600d5460405163610a8e6760e01b8152630100000090910460ff1615156004820152602401610ce6565b600d805463ff00ffff191663010001011790554260078190556040805133815260208101929092527f57367f86c2ca0eaed4ba8c6af83cb711a82cc7169d53b6a3629605a12c602d729101610f94565b61143e611c51565b801515600d60039054906101000a900460ff161515036114745760405162a7e72d60e41b81528115156004820152602401610ce6565b600d805463ff000000198116630100000084151581029190911790925560405191900460ff16907fa9eb6c000d17475b17651469533695f7b673c93327fdbadf4341ebeb2607a04490610d549083908590339042906126b9565b600f6020527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755461dead60009081527f99629f56119585bf27511b6b7d295dffb54757453fcc3dabcf51d92028301f105460025491929161152f9190612718565b6115399190612718565b905090565b6000338161154c8286611a77565b9050838110156115ac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce6565b6115b98286868403611b8c565b506001949350505050565b6000336115d2818585611d07565b949350505050565b6115e2611c51565b600d54600160281b900460ff1661160c5760405163019601bd60e41b815260040160405180910390fd5b600d805465ff000000000019169055604080513381524260208201527f59880a54046a9fec9f80ba8d2b8d6ec5be58ae5691f68759db37399025bd38069101610f94565b611658611c51565b600d546001600160a01b03808316600160301b90920416036116985760405163a936636960e01b81526001600160a01b0382166004820152602401610ce6565b600d80546001600160a01b03838116600160301b8181026601000000000000600160d01b0319851617909455604080519490930490911680845260208401919091523391830191909152426060830152907f8398165ebfaa5831ed8697905b76704b18bb44c19f6630c76c8fa68f32dc7dfe90608001610d54565b61171b611c51565b6001546001600160a01b038083169116036117545760405163a936636960e01b81526001600160a01b0382166004820152602401610ce6565b600180546001600160a01b038381166001600160a01b0319831681178455600081815260116020908152604091829020805460ff19169096179095558051929093168083529382015233918101919091524260608201527fe1cb783288eddc7b22c25642a832d886a558be0dd900747310a34156b9fdcbbb9060800160405180910390a1600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f91906125f8565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d591906125f8565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611922573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194691906125f8565b600e80546001600160a01b03929092166001600160a01b0319909216821790556000908152601360205260409020805460ff19166001179055600d54600160281b900460ff16156119b757600e546001600160a01b03166000908152601260205260409020805460ff191660011790555b5050565b6119c3611c51565b6001600160a01b03821660009081526011602052604090205481151560ff909116151503611a075760405162a7e72d60e41b81528115156004820152602401610ce6565b6001600160a01b03821660009081526011602052604090819020805483151560ff19821617909155905160ff909116907f4c18d53c2d0e765ff1dc3e5d53d8c51002cc0b5c114aa07199d629d54fad593e90611a6a9083908590339042906126b9565b60405180910390a1505050565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205490565b611aaa611c51565b6001600160a01b038116611ad45760405163b20f76e360e01b815260006004820152602401610ce6565b61116381612160565b611ae5611c51565b6001600160a01b03821660009081526012602052604090205481151560ff909116151503611b295760405162a7e72d60e41b81528115156004820152602401610ce6565b6001600160a01b03821660009081526012602052604090819020805483151560ff19821617909155905160ff909116907f887bfffde87b3f64221a6b7de2ee5ef7503d2388b41b153cfb301c26087a7f3c90611a6a9083908590339042906126b9565b6001600160a01b038316611bbe57604051634726455360e11b81526001600160a01b0384166004820152602401610ce6565b6001600160a01b038216611bf057604051634726455360e11b81526001600160a01b0383166004820152602401610ce6565b6001600160a01b0383811660008181526010602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b33611c646000546001600160a01b031690565b6001600160a01b031614611212576040516332b2baa360e01b8152336004820152602401610ce6565b6000611c998484611a77565b90506000198114611d015781811015611cf45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ce6565b611d018484848403611b8c565b50505050565b60006001600160a01b038416611d3b57604051634726455360e11b81526001600160a01b0385166004820152602401610ce6565b6001600160a01b038316611d6d57604051634726455360e11b81526001600160a01b0384166004820152602401610ce6565b600d5460ff16158015611d9957506001600160a01b03841660009081526011602052604090205460ff16155b8015611dbe57506001600160a01b03831660009081526011602052604090205460ff16155b15611ddc57604051632b61510560e11b815260040160405180910390fd5b600d54600160201b900460ff1680611e0c57506001600160a01b03841660009081526011602052604090205460ff165b15611e2357611e1c8484846121b0565b9050610d7d565b600e546001600160a01b03858116911614801590611e4a5750600d546301000000900460ff165b8015611e675750600c54306000908152600f602052604090205410155b8015611e845750600c54600954600854611e819190612718565b10155b15611e9457611e94600c54610a9b565b600d548290610100900460ff168015611ec657506001600160a01b03851660009081526011602052604090205460ff16155b8015611eeb57506001600160a01b03841660009081526011602052604090205460ff16155b15611efe57611efb858585612249565b90505b600d54600160281b900460ff1615611f1a57611f1a8185611166565b6001600160a01b0385166000908152600f6020526040902054811115611f525760405162461bcd60e51b8152600401610ce69061272b565b6001600160a01b038086166000818152600f6020526040808220805486900390559287168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fb49085815260200190565b60405180910390a3506001949350505050565b600d805460ff60201b1916600160201b17905561deac19330161200157604051634726455360e11b815261dead6004820152602401610ce6565b6040805160028082526060820183526000926020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f91906125f8565b816000815181106120a2576120a26125e2565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106120d6576120d66125e2565b6001600160a01b03928316602091820292909201015260015460405163b6f9de9560e01b815291169063b6f9de9590859061211c90600090869088904290600401612771565b6000604051808303818588803b15801561213557600080fd5b505af1158015612149573d6000803e3d6000fd5b5050600d805460ff60201b19169055505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600f6020526040812054828110156121e95760405162461bcd60e51b8152600401610ce69061272b565b6001600160a01b038086166000818152600f602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611fb49087815260200190565b600d805460ff60201b1916600160201b1790556001600160a01b03831660009081526013602052604081205460ff16156122995760035415612299576122928483600354612342565b905061232e565b6001600160a01b03831660009081526013602052604090205460ff16156122cf57600454156122cf576122928483600454612342565b6001600160a01b03841660009081526013602052604090205460ff1615801561231157506001600160a01b03831660009081526013602052604090205460ff16155b1561232b576005541561232b576122928483600554612342565b50805b600d805460ff60201b191690559392505050565b600d805460ff60201b1916600160201b17905560008061271061236584866126df565b61236f91906126f6565b9050600061237d8286612718565b9050811561238f5761238f86836123a5565b600d805460ff60201b1916905595945050505050565b600d805460ff60201b1916600160201b179055600880548291906000906123cd9084906125cf565b909155506123de90508230836121b0565b5050600d805460ff60201b1916905550565b60006020828403121561240257600080fd5b5035919050565b600060208083528351808285015260005b818110156124365785810183015185820160400152820161241a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461116357600080fd5b60006020828403121561247e57600080fd5b8135610d7d81612457565b6000806040838503121561249c57600080fd5b82356124a781612457565b946020939093013593505050565b6000806000606084860312156124ca57600080fd5b83356124d581612457565b925060208401356124e581612457565b929592945050506040919091013590565b8035801515811461250657600080fd5b919050565b60006020828403121561251d57600080fd5b610d7d826124f6565b6000806040838503121561253957600080fd5b823561254481612457565b9150612552602084016124f6565b90509250929050565b6000806040838503121561256e57600080fd5b82359150602083013561258081612457565b809150509250929050565b6000806040838503121561259e57600080fd5b82356125a981612457565b9150602083013561258081612457565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c8d57610c8d6125b9565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561260a57600080fd5b8151610d7d81612457565b93845260208401929092526001600160a01b03166040830152606082015260800190565b600081518084526020808501945080840160005b838110156126725781516001600160a01b03168752958201959082019060010161264d565b509495945050505050565b85815284602082015260a06040820152600061269c60a0830186612639565b6001600160a01b0394909416606083015250608001529392505050565b931515845291151560208401526001600160a01b03166040830152606082015260800190565b8082028115828204841417610c8d57610c8d6125b9565b60008261271357634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610c8d57610c8d6125b9565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b84815260806020820152600061278a6080830186612639565b6001600160a01b0394909416604083015250606001529291505056fea2646970667358221220f518e1152a2680f1f401993c6ae7398aa1aebd1ac2db77090985e503a455f81864736f6c63430008120033

Deployed Bytecode Sourcemap

5444:17979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9907:611;;;;;;;;;;-1:-1:-1;9907:611:0;;;;;:::i;:::-;;:::i;:::-;;17791:101;;;;;;;;;;-1:-1:-1;17880:4:0;;;;;;;;;;;;-1:-1:-1;;;17880:4:0;;;;17791:101;;;;;;;:::i;:::-;;;;;;;;6950:40;;;;;;;;;;-1:-1:-1;6950:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1305:14:1;;1298:22;1280:41;;1268:2;1253:18;6950:40:0;1140:187:1;18758:205:0;;;;;;;;;;-1:-1:-1;18758:205:0;;;;;:::i;:::-;;:::i;6441:34::-;;;;;;;;;;-1:-1:-1;6441:34:0;;;;-1:-1:-1;;;6441:34:0;;;;;;18134:108;;;;;;;;;;-1:-1:-1;18222:12:0;;18134:108;;;1798:25:1;;;1786:2;1771:18;18134:108:0;1652:177:1;13248:400:0;;;;;;;;;;-1:-1:-1;13248:400:0;;;;;:::i;:::-;;:::i;18975:246::-;;;;;;;;;;-1:-1:-1;18975:246:0;;;;;:::i;:::-;;:::i;5826:30::-;;;;;;;;;;;;;;;;5939:33;;;;;;;;;;;;;;;;18021:101;;;;;;;;;;-1:-1:-1;18021:101:0;;5682:2;2437:36:1;;2425:2;2410:18;18021:101:0;2295:184:1;6368:33:0;;;;;;;;;;-1:-1:-1;6368:33:0;;;;;;;;;;;19233:247;;;;;;;;;;-1:-1:-1;19233:247:0;;;;;:::i;:::-;;:::i;12474:363::-;;;;;;;;;;-1:-1:-1;12474:363:0;;;;;:::i;:::-;;:::i;5900:32::-;;;;;;;;;;;;;;;;12845:395;;;;;;;;;;-1:-1:-1;12845:395:0;;;;;:::i;:::-;;:::i;5790:29::-;;;;;;;;;;;;;;;;12057:185;;;;;;;;;;;;;:::i;6163:37::-;;;;;;;;;;;;;;;;15526:326;;;;;;;;;;-1:-1:-1;15526:326:0;;;;;:::i;:::-;;:::i;17114:213::-;;;;;;;;;;-1:-1:-1;17114:213:0;;;;;:::i;:::-;;:::i;10798:319::-;;;;;;;;;;-1:-1:-1;10798:319:0;;;;;:::i;:::-;;:::i;18254:127::-;;;;;;;;;;-1:-1:-1;18254:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;18355:18:0;18328:7;18355:18;;;:9;:18;;;;;;;18254:127;4713:103;;;;;;;;;;;;;:::i;6022:35::-;;;;;;;;;;;;;;;;11745:304;;;;;;;;;;-1:-1:-1;11745:304:0;;;;;:::i;:::-;;:::i;6484:81::-;;;;;;;;;;;;6523:42;6484:81;;;;;-1:-1:-1;;;;;3638:32:1;;;3620:51;;3608:2;3593:18;6484:81:0;3474:203:1;13656:420:0;;;;;;;;;;-1:-1:-1;13656:420:0;;;;;:::i;:::-;;:::i;9407:472::-;;;;;;;;;;;;;:::i;4455:87::-;;;;;;;;;;-1:-1:-1;4501:7:0;4528:6;-1:-1:-1;;;;;4528:6:0;4455:87;;14425:317;;;;;;;;;;-1:-1:-1;14425:317:0;;;;;:::i;:::-;;:::i;10545:84::-;;;;;;;;;;-1:-1:-1;6240:4:0;10545:84;;10637:153;;;;;;;;;;;;;:::i;17904:105::-;;;;;;;;;;-1:-1:-1;17995:6:0;;;;;;;;;;;;-1:-1:-1;;;17995:6:0;;;;17904:105;;6113:43;;;;;;;;;;;;;;;;19492:445;;;;;;;;;;-1:-1:-1;19492:445:0;;;;;:::i;:::-;;:::i;6654:19::-;;;;;;;;;;-1:-1:-1;6654:19:0;;;;-1:-1:-1;;;;;6654:19:0;;;18393:184;;;;;;;;;;-1:-1:-1;18393:184:0;;;;;:::i;:::-;;:::i;5734:47::-;;;;;;;;;;;;5775:6;5734:47;;5863:30;;;;;;;;;;;;;;;;6886:57;;;;;;;;;;-1:-1:-1;6886:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12250:216;;;;;;;;;;;;;:::i;6574:71::-;;;;;;;;;;-1:-1:-1;6574:71:0;;;;-1:-1:-1;;;6574:71:0;;-1:-1:-1;;;;;6574:71:0;;;6330:31;;;;;;;;;;-1:-1:-1;6330:31:0;;;;;;;;;;;5979:36;;;;;;;;;;;;;;;;14084:333;;;;;;;;;;-1:-1:-1;14084:333:0;;;;;:::i;:::-;;:::i;11145:592::-;;;;;;;;;;-1:-1:-1;11145:592:0;;;;;:::i;:::-;;:::i;6253:32::-;;;;;;;;;;-1:-1:-1;6253:32:0;;;;;;;;14750:360;;;;;;;;;;-1:-1:-1;14750:360:0;;;;;:::i;:::-;;:::i;6408:26::-;;;;;;;;;;-1:-1:-1;6408:26:0;;;;-1:-1:-1;;;6408:26:0;;;;;;6064:42;;;;;;;;;;;;;;;;18589:157;;;;;;;;;;-1:-1:-1;18589:157:0;;;;;:::i;:::-;;:::i;6292:31::-;;;;;;;;;;-1:-1:-1;6292:31:0;;;;;;;;;;;6830:49;;;;;;;;;;-1:-1:-1;6830:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4824:213;;;;;;;;;;-1:-1:-1;4824:213:0;;;;;:::i;:::-;;:::i;15118:400::-;;;;;;;;;;-1:-1:-1;15118:400:0;;;;;:::i;:::-;;:::i;5520:21::-;;;;;;;;;;-1:-1:-1;5520:21:0;;;;-1:-1:-1;;;;;5520:21:0;;;9907:611;7049:6;:13;;-1:-1:-1;;;;7049:13:0;-1:-1:-1;;;7049:13:0;;;9988:16:::1;:34:::0;;10008:14;;9988:16;7049:13;;9988:34:::1;::::0;10008:14;;9988:34:::1;:::i;:::-;::::0;;;-1:-1:-1;;10059:16:0::1;::::0;;10073:1:::1;10059:16:::0;;;;;::::1;::::0;;10035:21:::1;::::0;10059:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;10059:16:0::1;10035:40;;10104:4;10086;10091:1;10086:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10086:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;10130:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;10130:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;10086:7;;10130:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10120:4;10125:1;10120:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10120:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;10188:6:::1;::::0;10156:56:::1;::::0;10173:4:::1;::::0;10188:6:::1;10197:14:::0;10156:8:::1;:56::i;:::-;10238:71;10249:14;10265;10281:10;10293:15;10238:71;;;;;;;;;:::i;:::-;;;;;;;;10322:6;::::0;10458:11:::1;::::0;10322:188:::1;::::0;-1:-1:-1;;;10322:188:0;;-1:-1:-1;;;;;10322:6:0;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;10394:14;;10322:6:::1;::::0;10439:4;;-1:-1:-1;;;10458:11:0;;::::1;::::0;;::::1;::::0;10484:15:::1;::::0;10322:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;7085:6:0;:14;;-1:-1:-1;;;;7085:14:0;;;-1:-1:-1;;;;9907:611:0:o;18758:205::-;18841:4;18877:10;18898:35;18877:10;18917:7;18926:6;18898:8;:35::i;:::-;18951:4;18944:11;;;18758:205;;;;;:::o;13248:400::-;4053:13;:11;:13::i;:::-;13321:11:::1;::::0;;;::::1;;;13317:46;;;13343:17;;-1:-1:-1::0;;;13343:17:0::1;;;;;;;;;;;13317:46;13387:7;;13377:6;:17:::0;13373:64:::1;;13405:29;::::0;-1:-1:-1;;;13405:29:0;;::::1;::::0;::::1;1798:25:1::0;;;1771:18;;13405:29:0::1;;;;;;;;13373:64;13460:5;13451:6;:14;13447:58;;;13476:26;::::0;-1:-1:-1;;;13476:26:0;;13496:5:::1;13476:26;::::0;::::1;1798:25:1::0;1771:18;;13476:26:0::1;1652:177:1::0;13447:58:0::1;13532:7;::::0;;13550:16;;;;13582:58:::1;::::0;::::1;::::0;::::1;::::0;13532:7;;13560:6;;13612:10:::1;::::0;13624:15:::1;::::0;13582:58:::1;:::i;:::-;;;;;;;;13306:342;13248:400:::0;:::o;18975:246::-;19074:4;19109:10;19130:38;19146:4;19109:10;19161:6;19130:15;:38::i;:::-;19186:27;19196:4;19202:2;19206:6;19186:9;:27::i;:::-;19179:34;;;18975:246;;;;;;:::o;19233:247::-;19323:4;19359:10;19380:70;19359:10;19399:7;19439:10;19408:28;19359:10;19399:7;19408:9;:28::i;:::-;:41;;;;:::i;:::-;19380:8;:70::i;12474:363::-;4053:13;:11;:13::i;:::-;12549:11:::1;::::0;;;::::1;;;12545:46;;;12571:17;;-1:-1:-1::0;;;12571:17:0::1;;;;;;;;;;;12545:46;12620:9;12605:24;;:11;;;;;;;;;;;:24;;::::0;12601:74:::1;;12640:32;::::0;-1:-1:-1;;;12640:32:0;;1305:14:1;;1298:22;12640:32:0::1;::::0;::::1;1280:41:1::0;1253:18;;12640:32:0::1;1140:187:1::0;12601:74:0::1;12702:11;::::0;;-1:-1:-1;;12724:23:0;::::1;12702:11;12724:23:::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;12763:66:::1;::::0;12702:11;;::::1;;;::::0;12763:66:::1;::::0;::::1;::::0;12702:11;;12724:23;;12801:10:::1;::::0;12813:15:::1;::::0;12763:66:::1;:::i;12845:395::-:0;4053:13;:11;:13::i;:::-;12917:11:::1;::::0;;;::::1;;;12913:46;;;12939:17;;-1:-1:-1::0;;;12939:17:0::1;;;;;;;;;;;12913:46;12983:6;;12973;:16:::0;12969:63:::1;;13000:29;::::0;-1:-1:-1;;;13000:29:0;;::::1;::::0;::::1;1798:25:1::0;;;1771:18;;13000:29:0::1;1652:177:1::0;12969:63:0::1;13055:5;13046:6;:14;13042:58;;;13071:26;::::0;-1:-1:-1;;;13071:26:0;;13091:5:::1;13071:26;::::0;::::1;1798:25:1::0;1771:18;;13071:26:0::1;1652:177:1::0;13042:58:0::1;13127:6;::::0;;13144:15;;;;13175:57:::1;::::0;::::1;::::0;::::1;::::0;13127:6;;13153;;13204:10:::1;::::0;13216:15:::1;::::0;13175:57:::1;:::i;12057:185::-:0;4053:13;:11;:13::i;:::-;12110:11:::1;::::0;;;::::1;;;12106:46;;;12132:17;;-1:-1:-1::0;;;12132:17:0::1;;;;;;;;;;;12106:46;12162:11;:18:::0;;-1:-1:-1;;12162:18:0::1;::::0;::::1;::::0;;12196:38:::1;::::0;;12206:10:::1;7364:51:1::0;;12218:15:0::1;7446:2:1::0;7431:18;;7424:34;12196:38:0::1;::::0;7337:18:1;12196:38:0::1;;;;;;;;12057:185::o:0;15526:326::-;4053:13;:11;:13::i;:::-;-1:-1:-1;;;;;15608:16:0;::::1;;::::0;;;:8:::1;:16;::::0;;;;;:26;::::1;;:16;::::0;;::::1;:26;;::::0;15604:73:::1;;15645:29;::::0;-1:-1:-1;;;15645:29:0;;1305:14:1;;1298:22;15645:29:0::1;::::0;::::1;1280:41:1::0;1253:18;;15645:29:0::1;1140:187:1::0;15604:73:0::1;15725:4;-1:-1:-1::0;;;;;15691:39:0::1;15697:6;-1:-1:-1::0;;;;;15691:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15691:39:0::1;;;:82;;;;;15768:4;-1:-1:-1::0;;;;;15734:39:0::1;15740:6;-1:-1:-1::0;;;;;15734:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15734:39:0::1;;;15691:82;15687:122;;;15784:22;::::0;-1:-1:-1;;;15784:22:0;;-1:-1:-1;;;;;3638:32:1;;15784:22:0::1;::::0;::::1;3620:51:1::0;3593:18;;15784:22:0::1;3474:203:1::0;15687:122:0::1;-1:-1:-1::0;;;;;15819:16:0;;;::::1;;::::0;;;:8:::1;:16;::::0;;;;:25;;-1:-1:-1;;15819:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15526:326::o;17114:213::-;4053:13;:11;:13::i;:::-;17215:6:::1;17188:23;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;17259:15:0::1;17232:24;:42:::0;17285:34:::1;17295:6:::0;17311::::1;17285:9;:34::i;:::-;17114:213:::0;:::o;10798:319::-;10875:13;5775:6;10907:11;;10891:13;18222:12;;;18134:108;10891:13;:27;;;;:::i;:::-;:44;;;;:::i;:::-;-1:-1:-1;;;;;10951:29:0;;;;;;:25;:29;;;;;;10875:60;;-1:-1:-1;10951:29:0;;10946:164;;11026:5;11017:6;11001:13;11011:2;-1:-1:-1;;;;;18355:18:0;18328:7;18355:18;;;:9;:18;;;;;;;18254:127;11001:13;:22;;;;:::i;:::-;:30;10997:102;;;11059:24;;-1:-1:-1;;;11059:24:0;;;;;1798:25:1;;;1771:18;;11059:24:0;1652:177:1;10997:102:0;10864:253;10798:319;;:::o;4713:103::-;4053:13;:11;:13::i;:::-;4778:30:::1;4805:1;4778:18;:30::i;:::-;4713:103::o:0;11745:304::-;4053:13;:11;:13::i;:::-;11833:10:::1;11822:7;;:21:::0;11818:72:::1;;11854:33;::::0;-1:-1:-1;;;11854:33:0;;::::1;::::0;::::1;1798:25:1::0;;;1771:18;;11854:33:0::1;1652:177:1::0;11818:72:0::1;11921:7;::::0;;11939:20;;;;11975:66:::1;::::0;::::1;::::0;::::1;::::0;11921:7;;11949:10;;12013::::1;::::0;12025:15:::1;::::0;11975:66:::1;:::i;13656:420::-:0;4053:13;:11;:13::i;:::-;13733:11:::1;::::0;;;::::1;;;13729:46;;;13755:17;;-1:-1:-1::0;;;13755:17:0::1;;;;;;;;;;;13729:46;13799:11;;13789:6;:21:::0;13785:68:::1;;13821:29;::::0;-1:-1:-1;;;13821:29:0;;::::1;::::0;::::1;1798:25:1::0;;;1771:18;;13821:29:0::1;1652:177:1::0;13785:68:0::1;13876:5;13867:6;:14;13863:58;;;13892:26;::::0;-1:-1:-1;;;13892:26:0;;13912:5:::1;13892:26;::::0;::::1;1798:25:1::0;1771:18;;13892:26:0::1;1652:177:1::0;13863:58:0::1;13948:11;::::0;;13970:20;;;;14006:62:::1;::::0;::::1;::::0;::::1;::::0;13948:11;;13984:6;;14040:10:::1;::::0;14052:15:::1;::::0;14006:62:::1;:::i;9407:472::-:0;4053:13;:11;:13::i;:::-;9466:12:::1;::::0;::::1;;9462:68;;;9514:12;::::0;9489:38:::1;::::0;-1:-1:-1;;;9489:38:0;;9514:12:::1;::::0;;::::1;1305:14:1::0;1298:22;9489:38:0::1;::::0;::::1;1280:41:1::0;1253:18;;9489:38:0::1;1140:187:1::0;9462:68:0::1;9544:11;::::0;::::1;::::0;::::1;;;9540:63;;;9588:11;::::0;9566:34:::1;::::0;-1:-1:-1;;;9566:34:0;;9588:11:::1;::::0;;::::1;;;1305:14:1::0;1298:22;9566:34:0::1;::::0;::::1;1280:41:1::0;1253:18;;9566:34:0::1;1140:187:1::0;9540:63:0::1;9617:13;::::0;;;::::1;;;9613:69;;;9665:13;::::0;9641:38:::1;::::0;-1:-1:-1;;;9641:38:0;;9665:13;;;::::1;;;1305:14:1::0;1298:22;9641:38:0::1;::::0;::::1;1280:41:1::0;1253:18;;9641:38:0::1;1140:187:1::0;9613:69:0::1;9692:12;:19:::0;;-1:-1:-1;;9751:20:0;;;;;9799:15:::1;9782:14;:32:::0;;;9830:41:::1;::::0;;9844:10:::1;7364:51:1::0;;7446:2;7431:18;;7424:34;;;;9830:41:0::1;::::0;7337:18:1;9830:41:0::1;7190:274:1::0;14425:317:0;4053:13;:11;:13::i;:::-;14519:9:::1;14502:26;;:13;;;;;;;;;;;:26;;::::0;14498:76:::1;;14539:32;::::0;-1:-1:-1;;;14539:32:0;;1305:14:1;;1298:22;14539:32:0::1;::::0;::::1;1280:41:1::0;1253:18;;14539:32:0::1;1140:187:1::0;14498:76:0::1;14601:13;::::0;;-1:-1:-1;;14625:25:0;::::1;14601:13:::0;14625:25;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;14666:68:::1;::::0;14601:13;;::::1;;;::::0;14666:68:::1;::::0;::::1;::::0;14601:13;;14625:25;;14706:10:::1;::::0;14718:15:::1;::::0;14666:68:::1;:::i;10637:153::-:0;18355:9;:18;;;;10750:6;10689:7;18355:18;;;;;18222:12;;10689:7;;18355:18;10716:42;;18355:18;10716:42;:::i;:::-;:66;;;;:::i;:::-;10709:73;;10637:153;:::o;19492:445::-;19587:4;19623:10;19587:4;19671:28;19623:10;19691:7;19671:9;:28::i;:::-;19644:55;;19738:15;19718:16;:35;;19710:85;;;;-1:-1:-1;;;19710:85:0;;8199:2:1;19710:85:0;;;8181:21:1;8238:2;8218:18;;;8211:30;8277:34;8257:18;;;8250:62;-1:-1:-1;;;8328:18:1;;;8321:35;8373:19;;19710:85:0;7997:401:1;19710:85:0;19831:63;19840:8;19850:7;19878:15;19859:16;:34;19831:8;:63::i;:::-;-1:-1:-1;19925:4:0;;19492:445;-1:-1:-1;;;;19492:445:0:o;18393:184::-;18474:4;18510:10;18538:31;18510:10;18558:2;18562:6;18538:9;:31::i;:::-;18531:38;18393:184;-1:-1:-1;;;;18393:184:0:o;12250:216::-;4053:13;:11;:13::i;:::-;12314:15:::1;::::0;-1:-1:-1;;;12314:15:0;::::1;;;12309:54;;12340:20;;-1:-1:-1::0;;;12340:20:0::1;;;;;;;;;;;12309:54;12373:15;:23:::0;;-1:-1:-1;;12373:23:0::1;::::0;;12412:46:::1;::::0;;12430:10:::1;7364:51:1::0;;12442:15:0::1;7446:2:1::0;7431:18;;7424:34;12412:46:0::1;::::0;7337:18:1;12412:46:0::1;7190:274:1::0;14084:333:0;4053:13;:11;:13::i;:::-;14166:11:::1;::::0;-1:-1:-1;;;;;14166:26:0;;::::1;-1:-1:-1::0;;;14166:11:0;;::::1;;:26:::0;14162:80:::1;;14203:36;::::0;-1:-1:-1;;;14203:36:0;;-1:-1:-1;;;;;3638:32:1;;14203:36:0::1;::::0;::::1;3620:51:1::0;3593:18;;14203:36:0::1;3474:203:1::0;14162:80:0::1;14274:11;::::0;;-1:-1:-1;;;;;14296:25:0;;::::1;-1:-1:-1::0;;;14296:25:0;;::::1;-1:-1:-1::0;;;;;;14296:25:0;::::1;;::::0;;;14337:72:::1;::::0;;14274:11;;;::::1;::::0;;::::1;8672:34:1::0;;;8737:2;8722:18;;8715:43;;;;14381:10:0::1;8774:18:1::0;;;8767:43;;;;14393:15:0::1;8841:2:1::0;8826:18;;8819:34;14274:11:0;14337:72:::1;::::0;8621:3:1;8606:19;14337:72:0::1;8403:456:1::0;11145:592:0;4053:13;:11;:13::i;:::-;11228:6:::1;::::0;-1:-1:-1;;;;;11220:28:0;;::::1;11228:6:::0;::::1;11220:28:::0;11216:80:::1;;11259:34;::::0;-1:-1:-1;;;11259:34:0;;-1:-1:-1;;;;;3638:32:1;;11259:34:0::1;::::0;::::1;3620:51:1::0;3593:18;;11259:34:0::1;3474:203:1::0;11216:80:0::1;11334:6;::::0;;-1:-1:-1;;;;;11352:27:0;;::::1;-1:-1:-1::0;;;;;;11352:27:0;::::1;::::0;::::1;::::0;;-1:-1:-1;11400:28:0;;;:17:::1;:28;::::0;;;;;;;;:35;;-1:-1:-1;;11400:35:0::1;::::0;;::::1;::::0;;;11453:63;;11334:6;;;::::1;8672:34:1::0;;;8722:18;;;8715:43;11488:10:0::1;8774:18:1::0;;;8767:43;;;;11500:15:0::1;8841:2:1::0;8826:18;;8819:34;11453:63:0::1;::::0;8621:3:1;8606:19;11453:63:0::1;;;;;;;11543:6;;;;;;;;;-1:-1:-1::0;;;;;11543:6:0::1;-1:-1:-1::0;;;;;11543:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11534:37:0::1;;11580:4;11587:6;;;;;;;;;-1:-1:-1::0;;;;;11587:6:0::1;-1:-1:-1::0;;;;;11587:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11534:67;::::0;-1:-1:-1;;;;;;11534:67:0::1;::::0;;;;;;-1:-1:-1;;;;;9094:15:1;;;11534:67:0::1;::::0;::::1;9076:34:1::0;9146:15;;9126:18;;;9119:43;9011:18;;11534:67:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11527:4;:74:::0;;-1:-1:-1;;;;;11527:74:0;;;::::1;-1:-1:-1::0;;;;;;11527:74:0;;::::1;::::0;::::1;::::0;;:4:::1;11612:14:::0;;;:8:::1;:14;::::0;;;;:21;;-1:-1:-1;;11612:21:0::1;11527:74:::0;11612:21:::1;::::0;;11648:15:::1;::::0;-1:-1:-1;;;11648:15:0;::::1;11612:21;11648:15;11644:86;;;11706:4;::::0;-1:-1:-1;;;;;11706:4:0::1;11680:31;::::0;;;:25:::1;:31;::::0;;;;:38;;-1:-1:-1;;11680:38:0::1;11714:4;11680:38;::::0;;11644:86:::1;11205:532;11145:592:::0;:::o;14750:360::-;4053:13;:11;:13::i;:::-;-1:-1:-1;;;;;14842:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;:36;::::1;;:23;::::0;;::::1;:36;;::::0;14838:86:::1;;14889:32;::::0;-1:-1:-1;;;14889:32:0;;1305:14:1;;1298:22;14889:32:0::1;::::0;::::1;1280:41:1::0;1253:18;;14889:32:0::1;1140:187:1::0;14838:86:0::1;-1:-1:-1::0;;;;;14951:23:0;::::1;14934:14;14951:23:::0;;;:17:::1;:23;::::0;;;;;;;;14985:35;::::1;;-1:-1:-1::0;;14985:35:0;::::1;;::::0;;;15036:66;;14951:23:::1;::::0;;::::1;::::0;15036:66:::1;::::0;::::1;::::0;14951:23;;15011:9;;15074:10:::1;::::0;15086:15:::1;::::0;15036:66:::1;:::i;:::-;;;;;;;;14827:283;14750:360:::0;;:::o;18589:157::-;-1:-1:-1;;;;;18708:21:0;;;18681:7;18708:21;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;18589:157::o;4824:213::-;4053:13;:11;:13::i;:::-;-1:-1:-1;;;;;4909:22:0;::::1;4905:86;;4955:24;::::0;-1:-1:-1;;;4955:24:0;;4976:1:::1;4955:24;::::0;::::1;3620:51:1::0;3593:18;;4955:24:0::1;3474:203:1::0;4905:86:0::1;5001:28;5020:8;5001:18;:28::i;15118:400::-:0;4053:13;:11;:13::i;:::-;-1:-1:-1;;;;;15218:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;:44;::::1;;:31;::::0;;::::1;:44;;::::0;15214:94:::1;;15273:32;::::0;-1:-1:-1;;;15273:32:0;;1305:14:1;;1298:22;15273:32:0::1;::::0;::::1;1280:41:1::0;1253:18;;15273:32:0::1;1140:187:1::0;15214:94:0::1;-1:-1:-1::0;;;;;15335:31:0;::::1;15318:14;15335:31:::0;;;:25:::1;:31;::::0;;;;;;;;15377:43;::::1;;-1:-1:-1::0;;15377:43:0;::::1;;::::0;;;15436:74;;15335:31:::1;::::0;;::::1;::::0;15436:74:::1;::::0;::::1;::::0;15335:31;;15411:9;;15482:10:::1;::::0;15494:15:::1;::::0;15436:74:::1;:::i;20265:343::-:0;-1:-1:-1;;;;;20366:22:0;;20362:64;;20399:24;;-1:-1:-1;;;20399:24:0;;-1:-1:-1;;;;;3638:32:1;;20399:24:0;;;3620:51:1;3593:18;;20399:24:0;3474:203:1;20362:64:0;-1:-1:-1;;;;;20440:21:0;;20436:62;;20472:23;;-1:-1:-1;;;20472:23:0;;-1:-1:-1;;;;;3638:32:1;;20472:23:0;;;3620:51:1;3593:18;;20472:23:0;3474:203:1;20436:62:0;-1:-1:-1;;;;;20510:21:0;;;;;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;:39;;;20565:35;;1798:25:1;;;20565:35:0;;1771:18:1;20565:35:0;;;;;;;20265:343;;;:::o;4550:155::-;4621:10;4610:7;4501;4528:6;-1:-1:-1;;;;;4528:6:0;;4455:87;4610:7;-1:-1:-1;;;;;4610:21:0;;4606:92;;4655:31;;-1:-1:-1;;;4655:31:0;;4675:10;4655:31;;;3620:51:1;3593:18;;4655:31:0;3474:203:1;20620:428:0;20724:24;20751:28;20761:8;20771:7;20751:9;:28::i;:::-;20724:55;;-1:-1:-1;;20794:16:0;:37;20790:251;;20876:6;20856:16;:26;;20848:68;;;;-1:-1:-1;;;20848:68:0;;9375:2:1;20848:68:0;;;9357:21:1;9414:2;9394:18;;;9387:30;9453:31;9433:18;;;9426:59;9502:18;;20848:68:0;9173:353:1;20848:68:0;20960:54;20969:8;20979:7;21007:6;20988:16;:25;20960:8;:54::i;:::-;20713:335;20620:428;;;:::o;21535:1249::-;21622:4;-1:-1:-1;;;;;21643:18:0;;21639:56;;21672:20;;-1:-1:-1;;;21672:20:0;;-1:-1:-1;;;;;3638:32:1;;21672:20:0;;;3620:51:1;3593:18;;21672:20:0;3474:203:1;21639:56:0;-1:-1:-1;;;;;21709:16:0;;21705:52;;21736:18;;-1:-1:-1;;;21736:18:0;;-1:-1:-1;;;;;3638:32:1;;21736:18:0;;;3620:51:1;3593:18;;21736::0;3474:203:1;21705:52:0;21774:12;;;;21773:13;:41;;;;-1:-1:-1;;;;;;21791:23:0;;;;;;:17;:23;;;;;;;;21790:24;21773:41;:67;;;;-1:-1:-1;;;;;;21819:21:0;;;;;;:17;:21;;;;;;;;21818:22;21773:67;21769:122;;;21864:15;;-1:-1:-1;;;21864:15:0;;;;;;;;;;;21769:122;21907:6;;-1:-1:-1;;;21907:6:0;;;;;:33;;-1:-1:-1;;;;;;21917:23:0;;;;;;:17;:23;;;;;;;;21907:33;21903:105;;;21964:32;21979:4;21985:2;21989:6;21964:14;:32::i;:::-;21957:39;;;;21903:105;22032:4;;-1:-1:-1;;;;;22024:12:0;;;22032:4;;22024:12;;;;:29;;-1:-1:-1;22040:13:0;;;;;;;22024:29;:68;;;;-1:-1:-1;22085:7:0;;22075:4;18328:7;18355:18;;;:9;:18;;;;;;22057:35;;22024:68;:119;;;;;22136:7;;22116:16;;22096:17;;:36;;;;:::i;:::-;:47;;22024:119;22020:171;;;22160:19;22171:7;;22160:10;:19::i;:::-;22246:11;;22223:6;;22246:11;;;;;:39;;;;-1:-1:-1;;;;;;22262:23:0;;;;;;:17;:23;;;;;;;;22261:24;22246:39;:65;;;;-1:-1:-1;;;;;;22290:21:0;;;;;;:17;:21;;;;;;;;22289:22;22246:65;22242:148;;;22340:38;22361:4;22367:2;22371:6;22340:20;:38::i;:::-;22328:50;;22242:148;22406:15;;-1:-1:-1;;;22406:15:0;;;;22402:79;;;22438:31;22455:9;22466:2;22438:16;:31::i;:::-;-1:-1:-1;;;;;22501:15:0;;;;;;:9;:15;;;;;;:28;-1:-1:-1;22501:28:0;22493:79;;;;-1:-1:-1;;;22493:79:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22626:15:0;;;;;;;:9;:15;;;;;;;;:27;;;22608:45;;22668:13;;;;;;;;;;:26;;;;;;22723:29;;;;;;22644:9;1798:25:1;;1786:2;1771:18;;1652:177;22723:29:0;;;;;;;;-1:-1:-1;22772:4:0;;21535:1249;-1:-1:-1;;;;21535:1249:0:o;17335:420::-;7049:6;:13;;-1:-1:-1;;;;7049:13:0;-1:-1:-1;;;7049:13:0;;;-1:-1:-1;;17415:10:0::1;:29:::0;17411:78:::1;;17455:31;::::0;-1:-1:-1;;;17455:31:0;;17478:6:::1;17455:31;::::0;::::1;3620:51:1::0;3593:18;;17455:31:0::1;3474:203:1::0;17411:78:0::1;17523:16;::::0;;17537:1:::1;17523:16:::0;;;;;::::1;::::0;;17499:21:::1;::::0;17523:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;17560:6:0::1;::::0;:13:::1;::::0;;-1:-1:-1;;;17560:13:0;;;;17499:40;;-1:-1:-1;;;;;;17560:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;17560:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17550:4;17555:1;17550:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;17550:23:0::1;;;-1:-1:-1::0;;;;;17550:23:0::1;;;::::0;::::1;17602:4;17584;17589:1;17584:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17584:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;17620:6:::1;::::0;:127:::1;::::0;-1:-1:-1;;;17620:127:0;;:6;::::1;::::0;:57:::1;::::0;17699:6;;17620:127:::1;::::0;:6:::1;::::0;17721:4;;17727:2;;17731:15:::1;::::0;17620:127:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;7085:6:0;:14;;-1:-1:-1;;;;7085:14:0;;;-1:-1:-1;;;;;;17335:420:0:o;5045:191::-;5119:16;5138:6;;-1:-1:-1;;;;;5155:17:0;;;-1:-1:-1;;;;;;5155:17:0;;;;;;5188:40;;5138:6;;;;;;;5188:40;;5119:16;5188:40;5108:128;5045:191;:::o;21080:419::-;-1:-1:-1;;;;;21204:15:0;;21165:4;21204:15;;;:9;:15;;;;;;21238:21;;;;21230:72;;;;-1:-1:-1;;;21230:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21338:15:0;;;;;;;:9;:15;;;;;;21356:20;;;21338:38;;21391:13;;;;;;;;;;:23;;;;;;21443:26;;;;;;21370:6;1798:25:1;;1786:2;1771:18;;1652:177;22792:628:0;7049:6;:13;;-1:-1:-1;;;;7049:13:0;-1:-1:-1;;;7049:13:0;;;-1:-1:-1;;;;;22931:14:0;::::1;22899:7:::0;22931:14;;;:8:::1;:14;::::0;;;;;7049:13;22931:14:::1;22927:136;;;22966:6;::::0;:10;22962:90:::1;;23004:32;23015:4;23021:6;23029;;23004:10;:32::i;:::-;22997:39;;;;22962:90;-1:-1:-1::0;;;;;23077:12:0;::::1;;::::0;;;:8:::1;:12;::::0;;;;;::::1;;23073:137;;;23110:7;::::0;:11;23106:93:::1;;23149:34;23161:4;23167:6;23175:7;;23149:11;:34::i;23106:93::-;-1:-1:-1::0;;;;;23225:14:0;::::1;;::::0;;;:8:::1;:14;::::0;;;;;::::1;;23224:15;:32:::0;::::1;;;-1:-1:-1::0;;;;;;23244:12:0;::::1;;::::0;;;:8:::1;:12;::::0;;;;;::::1;;23243:13;23224:32;23220:169;;;23277:11;::::0;:15;23273:105:::1;;23320:42;23336:4;23342:6;23350:11;;23320:15;:42::i;23273:105::-;-1:-1:-1::0;23406:6:0;7073:1:::1;7085:6:::0;:14;;-1:-1:-1;;;;7085:14:0;;;22792:628;;-1:-1:-1;;;22792:628:0:o;15877:331::-;7049:6;:13;;-1:-1:-1;;;;7049:13:0;-1:-1:-1;;;7049:13:0;;;15967:7;;5775:6:::1;16007:12;16016:3:::0;16007:6;:12:::1;:::i;:::-;:29;;;;:::i;:::-;15987:49:::0;-1:-1:-1;16047:17:0::1;16067:18;15987:49:::0;16067:6;:18:::1;:::i;:::-;16047:38:::0;-1:-1:-1;16100:13:0;;16096:78:::1;;16130:32;16146:4;16152:9;16130:15;:32::i;:::-;7085:6:::0;:14;;-1:-1:-1;;;;7085:14:0;;;16191:9;15877:331;-1:-1:-1;;;;;15877:331:0:o;16900:185::-;7049:6;:13;;-1:-1:-1;;;;7049:13:0;-1:-1:-1;;;7049:13:0;;;16988:17:::1;:31:::0;;17009:10;;16988:17;7049:13;;16988:31:::1;::::0;17009:10;;16988:31:::1;:::i;:::-;::::0;;;-1:-1:-1;17030:47:0::1;::::0;-1:-1:-1;17045:4:0;17059::::1;17066:10:::0;17030:14:::1;:47::i;:::-;-1:-1:-1::0;;7085:6:0;:14;;-1:-1:-1;;;;7085:14:0;;;-1:-1:-1;16900:185:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;888:247;947:6;1000:2;988:9;979:7;975:23;971:32;968:52;;;1016:1;1013;1006:12;968:52;1055:9;1042:23;1074:31;1099:5;1074:31;:::i;1332:315::-;1400:6;1408;1461:2;1449:9;1440:7;1436:23;1432:32;1429:52;;;1477:1;1474;1467:12;1429:52;1516:9;1503:23;1535:31;1560:5;1535:31;:::i;:::-;1585:5;1637:2;1622:18;;;;1609:32;;-1:-1:-1;;;1332:315:1:o;1834:456::-;1911:6;1919;1927;1980:2;1968:9;1959:7;1955:23;1951:32;1948:52;;;1996:1;1993;1986:12;1948:52;2035:9;2022:23;2054:31;2079:5;2054:31;:::i;:::-;2104:5;-1:-1:-1;2161:2:1;2146:18;;2133:32;2174:33;2133:32;2174:33;:::i;:::-;1834:456;;2226:7;;-1:-1:-1;;;2280:2:1;2265:18;;;;2252:32;;1834:456::o;2484:160::-;2549:20;;2605:13;;2598:21;2588:32;;2578:60;;2634:1;2631;2624:12;2578:60;2484:160;;;:::o;2649:180::-;2705:6;2758:2;2746:9;2737:7;2733:23;2729:32;2726:52;;;2774:1;2771;2764:12;2726:52;2797:26;2813:9;2797:26;:::i;2834:315::-;2899:6;2907;2960:2;2948:9;2939:7;2935:23;2931:32;2928:52;;;2976:1;2973;2966:12;2928:52;3015:9;3002:23;3034:31;3059:5;3034:31;:::i;:::-;3084:5;-1:-1:-1;3108:35:1;3139:2;3124:18;;3108:35;:::i;:::-;3098:45;;2834:315;;;;;:::o;3154:::-;3222:6;3230;3283:2;3271:9;3262:7;3258:23;3254:32;3251:52;;;3299:1;3296;3289:12;3251:52;3335:9;3322:23;3312:33;;3395:2;3384:9;3380:18;3367:32;3408:31;3433:5;3408:31;:::i;:::-;3458:5;3448:15;;;3154:315;;;;;:::o;3682:388::-;3750:6;3758;3811:2;3799:9;3790:7;3786:23;3782:32;3779:52;;;3827:1;3824;3817:12;3779:52;3866:9;3853:23;3885:31;3910:5;3885:31;:::i;:::-;3935:5;-1:-1:-1;3992:2:1;3977:18;;3964:32;4005:33;3964:32;4005:33;:::i;4298:127::-;4359:10;4354:3;4350:20;4347:1;4340:31;4390:4;4387:1;4380:15;4414:4;4411:1;4404:15;4430:125;4495:9;;;4516:10;;;4513:36;;;4529:18;;:::i;4692:127::-;4753:10;4748:3;4744:20;4741:1;4734:31;4784:4;4781:1;4774:15;4808:4;4805:1;4798:15;4824:251;4894:6;4947:2;4935:9;4926:7;4922:23;4918:32;4915:52;;;4963:1;4960;4953:12;4915:52;4995:9;4989:16;5014:31;5039:5;5014:31;:::i;5080:417::-;5311:25;;;5367:2;5352:18;;5345:34;;;;-1:-1:-1;;;;;5415:32:1;5410:2;5395:18;;5388:60;5479:2;5464:18;;5457:34;5298:3;5283:19;;5080:417::o;5502:461::-;5555:3;5593:5;5587:12;5620:6;5615:3;5608:19;5646:4;5675:2;5670:3;5666:12;5659:19;;5712:2;5705:5;5701:14;5733:1;5743:195;5757:6;5754:1;5751:13;5743:195;;;5822:13;;-1:-1:-1;;;;;5818:39:1;5806:52;;5878:12;;;;5913:15;;;;5854:1;5772:9;5743:195;;;-1:-1:-1;5954:3:1;;5502:461;-1:-1:-1;;;;;5502:461:1:o;5968:582::-;6267:6;6256:9;6249:25;6310:6;6305:2;6294:9;6290:18;6283:34;6353:3;6348:2;6337:9;6333:18;6326:31;6230:4;6374:57;6426:3;6415:9;6411:19;6403:6;6374:57;:::i;:::-;-1:-1:-1;;;;;6467:32:1;;;;6462:2;6447:18;;6440:60;-1:-1:-1;6531:3:1;6516:19;6509:35;6366:65;5968:582;-1:-1:-1;;;5968:582:1:o;6748:437::-;6992:14;;6985:22;6967:41;;7051:14;;7044:22;7039:2;7024:18;;7017:50;-1:-1:-1;;;;;7103:32:1;7098:2;7083:18;;7076:60;7167:2;7152:18;;7145:34;6954:3;6939:19;;6748:437::o;7469:168::-;7542:9;;;7573;;7590:15;;;7584:22;;7570:37;7560:71;;7611:18;;:::i;7642:217::-;7682:1;7708;7698:132;;7752:10;7747:3;7743:20;7740:1;7733:31;7787:4;7784:1;7777:15;7815:4;7812:1;7805:15;7698:132;-1:-1:-1;7844:9:1;;7642:217::o;7864:128::-;7931:9;;;7952:11;;;7949:37;;;7966:18;;:::i;9531:402::-;9733:2;9715:21;;;9772:2;9752:18;;;9745:30;9811:34;9806:2;9791:18;;9784:62;-1:-1:-1;;;9877:2:1;9862:18;;9855:36;9923:3;9908:19;;9531:402::o;9938:510::-;10209:6;10198:9;10191:25;10252:3;10247:2;10236:9;10232:18;10225:31;10172:4;10273:57;10325:3;10314:9;10310:19;10302:6;10273:57;:::i;:::-;-1:-1:-1;;;;;10366:32:1;;;;10361:2;10346:18;;10339:60;-1:-1:-1;10430:2:1;10415:18;10408:34;10265:65;9938:510;-1:-1:-1;;9938:510:1:o

Swarm Source

ipfs://f518e1152a2680f1f401993c6ae7398aa1aebd1ac2db77090985e503a455f818

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Eternal AI stands at the intersection where Technology meets Humanity. We are forging a New Digital Legacy where one's consciousness can continue to Exist, Interact, and Evolve within a digital universe.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.