ETH Price: $2,913.38 (-8.03%)
Gas: 7 Gwei

Contract

0xDDBb4F82EA4dF7C07e2EA7BF3764B4008D6d8390
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve202375472024-07-05 3:13:357 hrs ago1720149215IN
Apex AI: Token
0 ETH0.0032020968.71599374
Transfer202308592024-07-04 4:47:5930 hrs ago1720068479IN
Apex AI: Token
0 ETH0.000135822.84254518
Approve202204982024-07-02 18:04:112 days ago1719943451IN
Apex AI: Token
0 ETH0.000195184.18865955
Approve202195762024-07-02 14:58:232 days ago1719932303IN
Apex AI: Token
0 ETH0.000338527.26471195
Approve202173232024-07-02 7:25:113 days ago1719905111IN
Apex AI: Token
0 ETH0.000085273.50716396
Transfer202165692024-07-02 4:52:473 days ago1719895967IN
Apex AI: Token
0 ETH0.000148942.70816059
Approve202155102024-07-02 1:19:593 days ago1719883199IN
Apex AI: Token
0 ETH0.000066662.28322151
Transfer202141832024-07-01 20:53:233 days ago1719867203IN
Apex AI: Token
0 ETH0.000489157.02324126
Transfer202141802024-07-01 20:52:473 days ago1719867167IN
Apex AI: Token
0 ETH0.000506117.26673178
Transfer202141682024-07-01 20:50:233 days ago1719867023IN
Apex AI: Token
0 ETH0.000374517.12542416
Transfer202141662024-07-01 20:49:593 days ago1719866999IN
Apex AI: Token
0 ETH0.000490577.0424183
Transfer202141652024-07-01 20:49:473 days ago1719866987IN
Apex AI: Token
0 ETH0.000508597.30111195
Transfer202140942024-07-01 20:35:353 days ago1719866135IN
Apex AI: Token
0 ETH0.000527357.57169463
Transfer202140922024-07-01 20:35:113 days ago1719866111IN
Apex AI: Token
0 ETH0.000409217.78736597
Transfer202140882024-07-01 20:34:233 days ago1719866063IN
Apex AI: Token
0 ETH0.000436038.29597487
Transfer202140072024-07-01 20:18:113 days ago1719865091IN
Apex AI: Token
0 ETH0.000439648.3647258
Transfer202140062024-07-01 20:17:593 days ago1719865079IN
Apex AI: Token
0 ETH0.000566518.13262445
Transfer202139942024-07-01 20:15:353 days ago1719864935IN
Apex AI: Token
0 ETH0.00069149.9271964
Transfer202139922024-07-01 20:15:113 days ago1719864911IN
Apex AI: Token
0 ETH0.0007003410.0537117
Transfer202139902024-07-01 20:14:473 days ago1719864887IN
Apex AI: Token
0 ETH0.000511449.7307648
Transfer202139852024-07-01 20:13:473 days ago1719864827IN
Apex AI: Token
0 ETH0.000659799.47166079
Transfer202139822024-07-01 20:13:113 days ago1719864791IN
Apex AI: Token
0 ETH0.000477559.08598526
Transfer202139632024-07-01 20:09:233 days ago1719864563IN
Apex AI: Token
0 ETH0.000672649.65781429
Transfer202139622024-07-01 20:09:113 days ago1719864551IN
Apex AI: Token
0 ETH0.000651539.3546666
Transfer202139532024-07-01 20:07:233 days ago1719864443IN
Apex AI: Token
0 ETH0.000474689.0312999
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
202199292024-07-02 16:09:472 days ago1719936587
Apex AI: Token
0.08557322 ETH
202199292024-07-02 16:09:472 days ago1719936587
Apex AI: Token
0.08557322 ETH
202005362024-06-29 23:10:475 days ago1719702647
Apex AI: Token
0.07623466 ETH
202005362024-06-29 23:10:475 days ago1719702647
Apex AI: Token
0.07623466 ETH
201908752024-06-28 14:46:476 days ago1719586007
Apex AI: Token
0.09311601 ETH
201908752024-06-28 14:46:476 days ago1719586007
Apex AI: Token
0.09311601 ETH
201908722024-06-28 14:46:116 days ago1719585971
Apex AI: Token
0.09311601 ETH
201908722024-06-28 14:46:116 days ago1719585971
Apex AI: Token
0.09311601 ETH
201849872024-06-27 19:02:477 days ago1719514967
Apex AI: Token
0.1327669 ETH
201849872024-06-27 19:02:477 days ago1719514967
Apex AI: Token
0.0928069 ETH
201766262024-06-26 15:01:238 days ago1719414083
Apex AI: Token
0.10666712 ETH
201766262024-06-26 15:01:238 days ago1719414083
Apex AI: Token
0.10666712 ETH
201638662024-06-24 20:15:5910 days ago1719260159
Apex AI: Token
0.1725906 ETH
201638662024-06-24 20:15:5910 days ago1719260159
Apex AI: Token
0.1725906 ETH
201475342024-06-22 13:26:2312 days ago1719062783
Apex AI: Token
0.17527554 ETH
201475342024-06-22 13:26:2312 days ago1719062783
Apex AI: Token
0.17527554 ETH
201290392024-06-19 23:22:3515 days ago1718839355
Apex AI: Token
0.17185945 ETH
201290392024-06-19 23:22:3515 days ago1718839355
Apex AI: Token
0.17185945 ETH
201057942024-06-16 17:18:2318 days ago1718558303
Apex AI: Token
0.17332684 ETH
201057942024-06-16 17:18:2318 days ago1718558303
Apex AI: Token
0.17332684 ETH
200917332024-06-14 18:06:5920 days ago1718388419
Apex AI: Token
0.17081841 ETH
200917332024-06-14 18:06:5920 days ago1718388419
Apex AI: Token
0.17081841 ETH
200789732024-06-12 23:17:2322 days ago1718234243
Apex AI: Token
0.27210949 ETH
200789732024-06-12 23:17:2322 days ago1718234243
Apex AI: Token
0.27210949 ETH
200626262024-06-10 16:28:5924 days ago1718036939
Apex AI: Token
0.12952073 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
APEX

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-28
*/

// SPDX-License-Identifier: MIT

/* 
   X: https://x.com/0xApexAI
   Website: 0xapex.ai 
   Medium: https://medium.com/@0xApexAI
   LinkTree: https://linktr.ee/0xApexAI
 */

pragma solidity 0.8.19;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC165 {

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IAccessControl {

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function hasRole(bytes32 role, address account) external view returns (bool);

    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    function grantRole(bytes32 role, address account) external;

    function revokeRole(bytes32 role, address account) external;

    function renounceRole(bytes32 role, address account) external;
}

library Math {
    enum Rounding {
        Down, 
        Up, 
        Zero 
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a > b ? a : b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

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

        return (a & b) + (a ^ b) / 2;
    }

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

        return a == 0 ? 0 : (a - 1) / b + 1;
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
        unchecked {

            uint256 prod0; 
            uint256 prod1; 
            assembly {
                let mm := mulmod(x, y, not(0))
                prod0 := mul(x, y)
                prod1 := sub(sub(mm, prod0), lt(mm, prod0))
            }

            if (prod1 == 0) {

                return prod0 / denominator;
            }

            require(denominator > prod1, "Math: mulDiv overflow");

            uint256 remainder;
            assembly {

                remainder := mulmod(x, y, denominator)

                prod1 := sub(prod1, gt(remainder, prod0))
                prod0 := sub(prod0, remainder)
            }

            uint256 twos = denominator & (~denominator + 1);
            assembly {

                denominator := div(denominator, twos)

                prod0 := div(prod0, twos)

                twos := add(div(sub(0, twos), twos), 1)
            }

            prod0 |= prod1 * twos;

            uint256 inverse = (3 * denominator) ^ 2;

            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 
            inverse *= 2 - denominator * inverse; 

            result = prod0 * inverse;
            return result;
        }
    }

    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
        uint256 result = mulDiv(x, y, denominator);
        if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
            result += 1;
        }
        return result;
    }

    function sqrt(uint256 a) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 result = 1 << (log2(a) >> 1);

        unchecked {
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            result = (result + a / result) >> 1;
            return min(result, a / result);
        }
    }

    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = sqrt(a);
            return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
        }
    }

    function log2(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 128;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 64;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 32;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 16;
            }
            if (value >> 8 > 0) {
                value >>= 8;
                result += 8;
            }
            if (value >> 4 > 0) {
                value >>= 4;
                result += 4;
            }
            if (value >> 2 > 0) {
                value >>= 2;
                result += 2;
            }
            if (value >> 1 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log2(value);
            return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
        }
    }

    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }

    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log10(value);
            return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
        }
    }

    function log256(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >> 128 > 0) {
                value >>= 128;
                result += 16;
            }
            if (value >> 64 > 0) {
                value >>= 64;
                result += 8;
            }
            if (value >> 32 > 0) {
                value >>= 32;
                result += 4;
            }
            if (value >> 16 > 0) {
                value >>= 16;
                result += 2;
            }
            if (value >> 8 > 0) {
                result += 1;
            }
        }
        return result;
    }

    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
        unchecked {
            uint256 result = log256(value);
            return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
        }
    }
}

library SignedMath {

    function max(int256 a, int256 b) internal pure returns (int256) {
        return a > b ? a : b;
    }

    function min(int256 a, int256 b) internal pure returns (int256) {
        return a < b ? a : b;
    }

    function average(int256 a, int256 b) internal pure returns (int256) {

        int256 x = (a & b) + ((a ^ b) >> 1);
        return x + (int256(uint256(x) >> 255) & (a ^ b));
    }

    function abs(int256 n) internal pure returns (uint256) {
        unchecked {

            return uint256(n >= 0 ? n : -n);
        }
    }
}

library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;

            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;

                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }

    function toString(int256 value) internal pure returns (string memory) {
        return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value))));
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        unchecked {
            return toHexString(value, Math.log256(value) + 1);
        }
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }

    function equal(string memory a, string memory b) internal pure returns (bool) {
        return keccak256(bytes(a)) == keccak256(bytes(b));
    }
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
        return _roles[role].members[account];
    }

    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(account),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(
        address account,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);

    function WETH() 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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
}

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

contract APEX is ERC20, AccessControl {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public operationsAddress;

    uint256 public tradingActiveBlock = 0;
    mapping(address => bool) public markedAsSniper;

    bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE");
    bytes32 public constant AUTHENTICATOR_ROLE =
        keccak256("AUTHENTICATOR_ROLE");    

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public flagSnipersEnabled = true;

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    // Modifiers
    modifier onlyManager() {
        require(hasRole(MANAGER_ROLE, msg.sender), "Not a manager");
        _;
    }

    modifier onlyAuthenticators() {
        require(
            hasRole(AUTHENTICATOR_ROLE, msg.sender),
            "Not an authenticator"
        );
        _;
    }

    constructor() payable ERC20("Apex AI", "APEX") {
        address newOwner = msg.sender;  

        _setupRole(MANAGER_ROLE, newOwner); // Assign the manager role to the contract deployer
        _setRoleAdmin(AUTHENTICATOR_ROLE, MANAGER_ROLE); // Assign manager as the administrator of the authenticator role
        grantRole(AUTHENTICATOR_ROLE, newOwner); // Grant the authenticator role to the contract deployer

        uint256 totalSupply = 100 * 1e6 * 1e18; 

        buyOperationsFee = 10;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        sellOperationsFee = 25;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;        

        maxBuyAmount = (totalSupply * 1) / 100; // 1%
        maxSellAmount = (totalSupply * 1) / 100; // 1%
        maxWallet = (totalSupply * 1) / 100; // 1%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        operationsAddress = address(msg.sender);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);

        _createInitialSupply(address(this), totalSupply);     
    }

    receive() external payable {}

    function addAuthenticator(address _authenticator) external onlyManager {
        require(_authenticator != address(0), "Invalid address");
        grantRole(AUTHENTICATOR_ROLE, _authenticator);
    }

    function removeAuthenticator(address _authenticator) external onlyManager {
        require(_authenticator != address(0), "Invalid address");
        revokeRole(AUTHENTICATOR_ROLE, _authenticator);
    }    

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyManager {
        transferDelayEnabled = false;
    }

    function _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyManager {
        if (!isEx) {
            require(
                updAds != lpPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyManager {
        require(
            pair != lpPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }        

    function updateBuyTax(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyManager {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellTax(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyManager {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }    

    function excludeFromFees(address account, bool excluded) public onlyManager {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

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

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        } else {
            require(
                !markedAsSniper[from],
                "Snipers cannot transfer tokens"
            );
        }

        if (limitsInEffect) {
            if (to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {    
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 15) {
            contractBalance = swapTokensAtAmount * 15;
        }

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = (ethBalance * tokensForOperations) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

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

        (success, ) = address(operationsAddress).call{
            value: address(this).balance
        }("");
    }

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyManager returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(
            _token != address(this) || !tradingActive,
            "Can't withdraw native tokens while trading is active"
        );
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function setOperationsAddress(
        address _operationsAddress
    ) external onlyManager {
        require(
            _operationsAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function removeLimits() external onlyManager {
        limitsInEffect = false;
    }

    function restoreLimits() external onlyManager { 
        limitsInEffect = true;
    }

    function flagSniper(address wallet) external onlyAuthenticators {
        require(
            flagSnipersEnabled,
            "Flag sniper functionality disabled forever!"
        );

        require(!markedAsSniper[wallet], "Wallet is already flagged.");
        markedAsSniper[wallet] = true;
    }

    function massFlagSnipers(address[] calldata wallets)
        external onlyAuthenticators
    {
        require(
            flagSnipersEnabled,
            "Flag sniper functionality disabled forever!"
        );        

        for (uint256 i = 0; i < wallets.length; i++) {
            markedAsSniper[wallets[i]] = true;
        }
    }

    function unflagSniper(address wallet) external onlyAuthenticators {
        require(markedAsSniper[wallet], "Wallet is already not marked.");
        markedAsSniper[wallet] = false;
    }        

    function massUnflagSnipers(address[] calldata wallets)
        external onlyAuthenticators
    {
        for (uint256 i = 0; i < wallets.length; i++) {
            markedAsSniper[wallets[i]] = false;
        }
    }    

    function disableFlagSnipersForever() external onlyManager {
        require(
            flagSnipersEnabled,
            "Flag sniper functionality already disabled forever!!"
        );

        flagSnipersEnabled = false;
    }    

    function emergencyETHRecovery() external onlyManager {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }      

    function prepareLaunch() external onlyManager {
        require(!tradingActive, "Trading is already active, cannot relaunch.");     

        address _dexRouter;

        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 11155111) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Sepolia
        } else if (block.chainid == 56) {
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if (block.chainid == 97) {
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else if (block.chainid == 42161) {
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);
        
        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );

        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);        

        _excludeFromMaxTransaction(address(dexRouter), true);
        excludeFromFees(address(dexRouter), true);  

        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        require(
            balanceOf(address(this)) > 0,
            "Must have Tokens on contract to launch"
        );           

        _approve(address(this), address(dexRouter), balanceOf(address(this)));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        ); 
    }

    function enableTrading() external onlyAuthenticators {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }      
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"AUTHENTICATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"addAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFlagSnipersForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyETHRecovery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flagSnipersEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markedAsSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massFlagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massUnflagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"removeAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d55600f805463ffffffff191663010000011790556011805460ff1916600117905560076080908152664170657820414960c81b60a052610100604052600460c090815263082a08ab60e31b60e05260036200005f83826200086b565b5060046200006e82826200086b565b503391506200008f905060008051602062004448833981519152826200023d565b620000b960008051602062004468833981519152600080516020620044488339815191526200024d565b620000d4600080516020620044688339815191528262000298565b600a6013819055600060148190556a52b7d2dcc80cd2e400000091620000fb91906200094d565b601255601960168190556000601781905562000117916200094d565b60155560646200012982600162000963565b6200013591906200097d565b60065560646200014782600162000963565b6200015391906200097d565b60075560646200016582600162000963565b6200017191906200097d565b6008556127106200018482600562000963565b6200019091906200097d565b600b55600c80546001600160a01b03191633179055620001b2826001620002c6565b620001bf306001620002c6565b620001ce61dead6001620002c6565b600c54620001e7906001600160a01b03166001620002c6565b620001f482600162000329565b6200020130600162000329565b6200021061dead600162000329565b600c5462000229906001600160a01b0316600162000329565b620002353082620003e5565b505062000aa4565b620002498282620004ca565b5050565b600082815260056020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600082815260056020526040902060010154620002b58162000554565b620002c18383620004ca565b505050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b62000344600080516020620044488339815191523362000563565b620003865760405162461bcd60e51b815260206004820152600d60248201526c2737ba10309036b0b730b3b2b960991b60448201526064015b60405180910390fd5b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200043d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200037d565b80600260008282546200045191906200094d565b90915550506001600160a01b03821660009081526020819052604081208054839290620004809084906200094d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620004d6828262000563565b620002495760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620005103390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b62000560813362000590565b50565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b6200059c828262000563565b6200024957620005ac81620005f4565b620005b983602062000607565b604051602001620005cc929190620009c6565b60408051601f198184030181529082905262461bcd60e51b82526200037d9160040162000a3f565b60606200058a6001600160a01b03831660145b606060006200061883600262000963565b620006259060026200094d565b6001600160401b038111156200063f576200063f620007c7565b6040519080825280601f01601f1916602001820160405280156200066a576020820181803683370190505b509050600360fc1b8160008151811062000688576200068862000a74565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620006ba57620006ba62000a74565b60200101906001600160f81b031916908160001a9053506000620006e084600262000963565b620006ed9060016200094d565b90505b60018111156200076f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062000725576200072562000a74565b1a60f81b8282815181106200073e576200073e62000a74565b60200101906001600160f81b031916908160001a90535060049490941c93620007678162000a8a565b9050620006f0565b508315620007c05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016200037d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007f257607f821691505b6020821081036200081357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c157600081815260208120601f850160051c81016020861015620008425750805b601f850160051c820191505b8181101562000863578281556001016200084e565b505050505050565b81516001600160401b03811115620008875762000887620007c7565b6200089f81620008988454620007dd565b8462000819565b602080601f831160018114620008d75760008415620008be5750858301515b600019600386901b1c1916600185901b17855562000863565b600085815260208120601f198616915b828110156200090857888601518255948401946001909101908401620008e7565b5085821015620009275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808201808211156200058a576200058a62000937565b80820281158282048414176200058a576200058a62000937565b6000826200099b57634e487b7160e01b600052601260045260246000fd5b500490565b60005b83811015620009bd578181015183820152602001620009a3565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000a00816017850160208801620009a0565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000a33816028840160208801620009a0565b01602801949350505050565b602081526000825180602084015262000a60816040850160208701620009a0565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60008162000a9c5762000a9c62000937565b506000190190565b6139948062000ab46000396000f3fe6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c02466681161010d578063e884f260116100a0578063f11a24d31161006f578063f11a24d314610b20578063f637434214610b36578063f8b45b0514610b4c578063fb002c9714610b6257600080fd5b8063e884f26014610ab3578063ea4cfe1214610ac8578063ec87621c14610ae8578063ee40166e14610b0a57600080fd5b8063d85ba063116100dc578063d85ba06314610a21578063d86c9fec14610a37578063dd62ed3e14610a57578063e2f4560514610a9d57600080fd5b8063c024666814610997578063c44a24dd146109b7578063c876d0b9146109e7578063d547741f14610a0157600080fd5b8063a457c2d711610185578063b62496f511610154578063b62496f514610906578063b65c5e8d14610936578063b79c188614610958578063bbc0c7421461097857600080fd5b8063a457c2d714610891578063a9059cbb146108b1578063af4641ed146108d1578063b38d5ef4146108e657600080fd5b806396c58b7c116101c157806396c58b7c146108325780639a7a23d614610847578063a217fddf14610867578063a28e86d31461087c57600080fd5b80638a8c523c146107c857806391d14854146107dd57806395d89b41146107fd5780639699a82d1461081257600080fd5b80634a62bb65116102e25780636a486a8e11610275578063751039fc11610244578063751039fc1461075d5780637571336a146107725780638366e79a1461079257806388e765ff146107b257600080fd5b80636a486a8e146106e75780636ddd1713146106fd5780636e55c13f1461071d57806370a082311461073d57600080fd5b806357bd8bb3116102b157806357bd8bb31461067a5780635a139dd41461069a57806361b6b94f146106b057806366d602ae146106d157600080fd5b80634a62bb65146106155780634be813e61461062f5780634eaa60011461064f5780634f77f6c01461066457600080fd5b8063248a9ca31161035a57806339509351116103295780633950935114610595578063410b2724146105b5578063452ed4f1146105d5578063499b8394146105f557600080fd5b8063248a9ca3146105075780632f2ff15d14610537578063313ce5671461055957806336568abe1461057557600080fd5b806310d5de531161039657806310d5de531461048257806318160ddd146104b25780631a8145bb146104d157806323b872dd146104e757600080fd5b806301ffc9a7146103d357806306fdde03146104085780630758d9241461042a578063095ea7b31461046257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132df565b610b78565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610baf565b6040516103ff919061332d565b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b506103f361047d366004613375565b610c41565b34801561048e57600080fd5b506103f361049d3660046133a1565b601b6020526000908152604090205460ff1681565b3480156104be57600080fd5b506002545b6040519081526020016103ff565b3480156104dd57600080fd5b506104c360195481565b3480156104f357600080fd5b506103f36105023660046133be565b610c57565b34801561051357600080fd5b506104c36105223660046133ff565b60009081526005602052604090206001015490565b34801561054357600080fd5b50610557610552366004613418565b610d06565b005b34801561056557600080fd5b50604051601281526020016103ff565b34801561058157600080fd5b50610557610590366004613418565b610d30565b3480156105a157600080fd5b506103f36105b0366004613375565b610dae565b3480156105c157600080fd5b506105576105d03660046133a1565b610dea565b3480156105e157600080fd5b50600a5461044a906001600160a01b031681565b34801561060157600080fd5b506105576106103660046133a1565b610e81565b34801561062157600080fd5b50600f546103f39060ff1681565b34801561063b57600080fd5b5061055761064a366004613448565b610f64565b34801561065b57600080fd5b5061055761100a565b34801561067057600080fd5b506104c360165481565b34801561068657600080fd5b506105576106953660046133a1565b61108b565b3480156106a657600080fd5b506104c360135481565b3480156106bc57600080fd5b50600f546103f3906301000000900460ff1681565b3480156106dd57600080fd5b506104c360075481565b3480156106f357600080fd5b506104c360155481565b34801561070957600080fd5b50600f546103f39062010000900460ff1681565b34801561072957600080fd5b50610557610738366004613448565b611175565b34801561074957600080fd5b506104c36107583660046133a1565b611244565b34801561076957600080fd5b5061055761125f565b34801561077e57600080fd5b5061055761078d3660046134cb565b61129f565b34801561079e57600080fd5b506103f36107ad3660046134f9565b611371565b3480156107be57600080fd5b506104c360065481565b3480156107d457600080fd5b506105576115b4565b3480156107e957600080fd5b506103f36107f8366004613418565b611680565b34801561080957600080fd5b5061041d6116ab565b34801561081e57600080fd5b5061055761082d3660046133a1565b6116ba565b34801561083e57600080fd5b5061055761174e565b34801561085357600080fd5b506105576108623660046134cb565b611c27565b34801561087357600080fd5b506104c3600081565b34801561088857600080fd5b50610557611d25565b34801561089d57600080fd5b506103f36108ac366004613375565b611d68565b3480156108bd57600080fd5b506103f36108cc366004613375565b611e01565b3480156108dd57600080fd5b50610557611e0e565b3480156108f257600080fd5b50610557610901366004613527565b611ec7565b34801561091257600080fd5b506103f36109213660046133a1565b601c6020526000908152604090205460ff1681565b34801561094257600080fd5b506104c360008051602061393f83398151915281565b34801561096457600080fd5b50610557610973366004613527565b611f64565b34801561098457600080fd5b50600f546103f390610100900460ff1681565b3480156109a357600080fd5b506105576109b23660046134cb565b612001565b3480156109c357600080fd5b506103f36109d23660046133a1565b600e6020526000908152604090205460ff1681565b3480156109f357600080fd5b506011546103f39060ff1681565b348015610a0d57600080fd5b50610557610a1c366004613418565b612094565b348015610a2d57600080fd5b506104c360125481565b348015610a4357600080fd5b50610557610a523660046133a1565b6120b9565b348015610a6357600080fd5b506104c3610a723660046134f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506104c3600b5481565b348015610abf57600080fd5b50610557612176565b348015610ad457600080fd5b50600c5461044a906001600160a01b031681565b348015610af457600080fd5b506104c360008051602061391f83398151915281565b348015610b1657600080fd5b506104c3600d5481565b348015610b2c57600080fd5b506104c360145481565b348015610b4257600080fd5b506104c360175481565b348015610b5857600080fd5b506104c360085481565b348015610b6e57600080fd5b506104c360185481565b60006001600160e01b03198216637965db0b60e01b1480610ba957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610bbe90613549565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90613549565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4e3384846121b6565b50600192915050565b6000610c648484846122da565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cfb85338584036121b6565b506001949350505050565b600082815260056020526040902060010154610d2181612a97565b610d2b8383612aa1565b505050565b6001600160a01b0381163314610da05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ce5565b610daa8282612b27565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4e918590610de5908690613599565b6121b6565b610e0260008051602061391f83398151915233611680565b610e1e5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282610d06565b50565b610e9960008051602061391f83398151915233611680565b610eb55760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610f1a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610ce5565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b610f7c60008051602061393f83398151915233611680565b610f985760405162461bcd60e51b8152600401610ce5906135d3565b60005b81811015610d2b576000600e6000858585818110610fbb57610fbb613601565b9050602002016020810190610fd091906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100281613617565b915050610f9b565b61102260008051602061391f83398151915233611680565b61103e5760405162461bcd60e51b8152600401610ce5906135ac565b604051600090339047908381818185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50505050565b6110a360008051602061393f83398151915233611680565b6110bf5760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166110e85760405162461bcd60e51b8152600401610ce590613630565b6001600160a01b0381166000908152600e602052604090205460ff16156111515760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61118d60008051602061393f83398151915233611680565b6111a95760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166111d25760405162461bcd60e51b8152600401610ce590613630565b60005b81811015610d2b576001600e60008585858181106111f5576111f5613601565b905060200201602081019061120a91906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061123c81613617565b9150506111d5565b6001600160a01b031660009081526020819052604090205490565b61127760008051602061391f83398151915233611680565b6112935760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19169055565b6112b760008051602061391f83398151915233611680565b6112d35760405162461bcd60e51b8152600401610ce5906135ac565b8061134657600a546001600160a01b03908116908316036113465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce5565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600061138b60008051602061391f83398151915233611680565b6113a75760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0383166113fd5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce5565b6001600160a01b0383163014158061141d5750600f54610100900460ff16155b6114865760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f1919061367b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115689190613694565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6115cc60008051602061393f83398151915233611680565b6115e85760405162461bcd60e51b8152600401610ce5906135d3565b600f54610100900460ff16156116405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce5565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610bbe90613549565b6116d260008051602061391f83398151915233611680565b6116ee5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282612094565b61176660008051602061391f83398151915233611680565b6117825760405162461bcd60e51b8152600401610ce5906135ac565b600f54610100900460ff16156117ee5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ce5565b6000466001036118135750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4662aa36a7036118385750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4660380361185b57507310ed43c718714eb63d5aa57b78b54704e256024e6118e1565b4660610361187e575073d99d1c33f9fc3444f8101754abc46c52416550d16118e1565b4661a4b1036118a25750731b02da8cb0d097eb8d57a175b88c7d8b479975066118e1565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610ce5565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e91906136b1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906136b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5591906136b1565b600a80546001600160a01b0319166001600160a01b03929092169182179055611a7f906001612b8e565b600a54611a96906001600160a01b03166001612bf1565b600954611aad906001600160a01b03166001612b8e565b600954611ac4906001600160a01b03166001612001565b60004711611b205760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ce5565b6000611b2b30611244565b11611b875760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ce5565b600954611ba29030906001600160a01b0316610de582611244565b6009546001600160a01b031663f305d7194730611bbe81611244565b60008033426040518863ffffffff1660e01b8152600401611be4969594939291906136ce565b60606040518083038185885af1158015611c02573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110859190613709565b611c3f60008051602061391f83398151915233611680565b611c5b5760405162461bcd60e51b8152600401610ce5906135ac565b600a546001600160a01b0390811690831603611cdf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce5565b611ce98282612bf1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611d3d60008051602061391f83398151915233611680565b611d595760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611dea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce5565b611df733858584036121b6565b5060019392505050565b6000610c4e3384846122da565b611e2660008051602061391f83398151915233611680565b611e425760405162461bcd60e51b8152600401610ce5906135ac565b600f546301000000900460ff16611eb85760405162461bcd60e51b815260206004820152603460248201527f466c616720736e697065722066756e6374696f6e616c69747920616c72656164604482015273792064697361626c656420666f7265766572212160601b6064820152608401610ce5565b600f805463ff00000019169055565b611edf60008051602061391f83398151915233611680565b611efb5760405162461bcd60e51b8152600401610ce5906135ac565b60138290556014819055611f0f8183613599565b6012819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b611f7c60008051602061391f83398151915233611680565b611f985760405162461bcd60e51b8152600401610ce5906135ac565b60168290556017819055611fac8183613599565b6015819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b61201960008051602061391f83398151915233611680565b6120355760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000828152600560205260409020600101546120af81612a97565b610d2b8383612b27565b6120d160008051602061393f83398151915233611680565b6120ed5760405162461bcd60e51b8152600401610ce5906135d3565b6001600160a01b0381166000908152600e602052604090205460ff166121555760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b61218e60008051602061391f83398151915233611680565b6121aa5760405162461bcd60e51b8152600401610ce5906135ac565b6011805460ff19169055565b6001600160a01b0383166122185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b0382166122795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b0382166123265760405162461bcd60e51b8152600401610ce59061377c565b600081116123765760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce5565b600f54610100900460ff1661240e576001600160a01b0383166000908152601a602052604090205460ff16806123c457506001600160a01b0382166000908152601a602052604090205460ff165b6124095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce5565b612477565b6001600160a01b0383166000908152600e602052604090205460ff16156124775760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610ce5565b600f5460ff1615612821576001600160a01b03821661dead148015906124b657506001600160a01b0383166000908152601a602052604090205460ff16155b80156124db57506001600160a01b0382166000908152601a602052604090205460ff16155b156128215760115460ff16156125f4576009546001600160a01b038381169116148015906125175750600a546001600160a01b03838116911614155b156125f4576125276002436137bf565b32600090815260106020526040902054108015612565575061254a6002436137bf565b6001600160a01b038316600090815260106020526040902054105b6125cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce5565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601c602052604090205460ff16801561263557506001600160a01b0382166000908152601b602052604090205460ff16155b156126fc5760065481111561269d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce5565b6008546126a983611244565b6126b39083613599565b11156126f75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b612821565b6001600160a01b0382166000908152601c602052604090205460ff16801561273d57506001600160a01b0383166000908152601b602052604090205460ff16155b156127a7576007548111156126f75760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce5565b6001600160a01b0382166000908152601b602052604090205460ff16612821576008546127d383611244565b6127dd9083613599565b11156128215760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b600061282c30611244565b600b549091508110801590819061284b5750600f5462010000900460ff165b80156128615750600a54600160a01b900460ff16155b801561288557506001600160a01b0384166000908152601c602052604090205460ff165b156128b357600a805460ff60a01b1916600160a01b1790556128a5612c1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601a602052604090205460019060ff16806128f557506001600160a01b0385166000908152601a602052604090205460ff165b156128fe575060005b60008115612a83576001600160a01b0386166000908152601c602052604090205460ff16801561293057506000601554115b156129b85760646015548661294591906137d2565b61294f91906137e9565b90506015546017548261296291906137d2565b61296c91906137e9565b6019600082825461297d9190613599565b909155505060155460165461299290836137d2565b61299c91906137e9565b601860008282546129ad9190613599565b90915550612a659050565b6001600160a01b0387166000908152601c602052604090205460ff1680156129e257506000601254115b15612a65576064601254866129f791906137d2565b612a0191906137e9565b905060125460145482612a1491906137d2565b612a1e91906137e9565b60196000828254612a2f9190613599565b9091555050601254601354612a4490836137d2565b612a4e91906137e9565b60186000828254612a5f9190613599565b90915550505b8015612a7657612a76873083612d81565b612a8081866137bf565b94505b612a8e878787612d81565b50505050505050565b610e7e8133612ed6565b612aab8282611680565b610daa5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ae33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b318282611680565b15610daa5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055611ce98282612b8e565b6000612c2a30611244565b90506000601854601954612c3e9190613599565b9050811580612c4b575080155b15612c54575050565b600b54612c6290600f6137d2565b821115612c7a57600b54612c7790600f6137d2565b91505b60008060028360195486612c8e91906137d2565b612c9891906137e9565b612ca291906137e9565b9050612cb6612cb182866137bf565b612f2f565b60195447908190600090612ccc906002906137e9565b612cd690876137bf565b601854612ce390856137d2565b612ced91906137e9565b9050612cf981836137bf565b6000601981905560185591508315801590612d145750600082115b15612d2357612d238483613089565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b50505050505050505050565b6001600160a01b038316612da75760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b038216612dcd5760405162461bcd60e51b8152600401610ce59061377c565b6001600160a01b03831660009081526020819052604090205481811015612e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e7c908490613599565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ec891815260200190565b60405180910390a350505050565b612ee08282611680565b610daa57612eed8161312a565b612ef883602061313c565b604051602001612f0992919061380b565b60408051601f198184030181529082905262461bcd60e51b8252610ce59160040161332d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6457612f64613601565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe191906136b1565b81600181518110612ff457612ff4613601565b6001600160a01b03928316602091820292909201015260095461301a91309116846121b6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613053908590600090869030904290600401613896565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6009546130a19030906001600160a01b0316846121b6565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906130e09030908790600090819061dead9042906004016136ce565b60606040518083038185885af11580156130fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131239190613709565b5050505050565b6060610ba96001600160a01b03831660145b6060600061314b8360026137d2565b613156906002613599565b67ffffffffffffffff81111561316e5761316e613880565b6040519080825280601f01601f191660200182016040528015613198576020820181803683370190505b509050600360fc1b816000815181106131b3576131b3613601565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131e2576131e2613601565b60200101906001600160f81b031916908160001a90535060006132068460026137d2565b613211906001613599565b90505b6001811115613289576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061324557613245613601565b1a60f81b82828151811061325b5761325b613601565b60200101906001600160f81b031916908160001a90535060049490941c9361328281613907565b9050613214565b5083156132d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce5565b9392505050565b6000602082840312156132f157600080fd5b81356001600160e01b0319811681146132d857600080fd5b60005b8381101561332457818101518382015260200161330c565b50506000910152565b602081526000825180602084015261334c816040850160208701613309565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610e7e57600080fd5b6000806040838503121561338857600080fd5b823561339381613360565b946020939093013593505050565b6000602082840312156133b357600080fd5b81356132d881613360565b6000806000606084860312156133d357600080fd5b83356133de81613360565b925060208401356133ee81613360565b929592945050506040919091013590565b60006020828403121561341157600080fd5b5035919050565b6000806040838503121561342b57600080fd5b82359150602083013561343d81613360565b809150509250929050565b6000806020838503121561345b57600080fd5b823567ffffffffffffffff8082111561347357600080fd5b818501915085601f83011261348757600080fd5b81358181111561349657600080fd5b8660208260051b85010111156134ab57600080fd5b60209290920196919550909350505050565b8015158114610e7e57600080fd5b600080604083850312156134de57600080fd5b82356134e981613360565b9150602083013561343d816134bd565b6000806040838503121561350c57600080fd5b823561351781613360565b9150602083013561343d81613360565b6000806040838503121561353a57600080fd5b50508035926020909101359150565b600181811c9082168061355d57607f821691505b60208210810361357d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba957610ba9613583565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161362957613629613583565b5060010190565b6020808252602b908201527f466c616720736e697065722066756e6374696f6e616c6974792064697361626c60408201526a656420666f72657665722160a81b606082015260800190565b60006020828403121561368d57600080fd5b5051919050565b6000602082840312156136a657600080fd5b81516132d8816134bd565b6000602082840312156136c357600080fd5b81516132d881613360565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561371e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba957610ba9613583565b8082028115828204841417610ba957610ba9613583565b60008261380657634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613843816017850160208801613309565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613874816028840160208801613309565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e65784516001600160a01b0316835293830193918301916001016138c1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008161391657613916613583565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a26469706673582212200504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f64736f6c63430008130033241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c02466681161010d578063e884f260116100a0578063f11a24d31161006f578063f11a24d314610b20578063f637434214610b36578063f8b45b0514610b4c578063fb002c9714610b6257600080fd5b8063e884f26014610ab3578063ea4cfe1214610ac8578063ec87621c14610ae8578063ee40166e14610b0a57600080fd5b8063d85ba063116100dc578063d85ba06314610a21578063d86c9fec14610a37578063dd62ed3e14610a57578063e2f4560514610a9d57600080fd5b8063c024666814610997578063c44a24dd146109b7578063c876d0b9146109e7578063d547741f14610a0157600080fd5b8063a457c2d711610185578063b62496f511610154578063b62496f514610906578063b65c5e8d14610936578063b79c188614610958578063bbc0c7421461097857600080fd5b8063a457c2d714610891578063a9059cbb146108b1578063af4641ed146108d1578063b38d5ef4146108e657600080fd5b806396c58b7c116101c157806396c58b7c146108325780639a7a23d614610847578063a217fddf14610867578063a28e86d31461087c57600080fd5b80638a8c523c146107c857806391d14854146107dd57806395d89b41146107fd5780639699a82d1461081257600080fd5b80634a62bb65116102e25780636a486a8e11610275578063751039fc11610244578063751039fc1461075d5780637571336a146107725780638366e79a1461079257806388e765ff146107b257600080fd5b80636a486a8e146106e75780636ddd1713146106fd5780636e55c13f1461071d57806370a082311461073d57600080fd5b806357bd8bb3116102b157806357bd8bb31461067a5780635a139dd41461069a57806361b6b94f146106b057806366d602ae146106d157600080fd5b80634a62bb65146106155780634be813e61461062f5780634eaa60011461064f5780634f77f6c01461066457600080fd5b8063248a9ca31161035a57806339509351116103295780633950935114610595578063410b2724146105b5578063452ed4f1146105d5578063499b8394146105f557600080fd5b8063248a9ca3146105075780632f2ff15d14610537578063313ce5671461055957806336568abe1461057557600080fd5b806310d5de531161039657806310d5de531461048257806318160ddd146104b25780631a8145bb146104d157806323b872dd146104e757600080fd5b806301ffc9a7146103d357806306fdde03146104085780630758d9241461042a578063095ea7b31461046257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132df565b610b78565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610baf565b6040516103ff919061332d565b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b506103f361047d366004613375565b610c41565b34801561048e57600080fd5b506103f361049d3660046133a1565b601b6020526000908152604090205460ff1681565b3480156104be57600080fd5b506002545b6040519081526020016103ff565b3480156104dd57600080fd5b506104c360195481565b3480156104f357600080fd5b506103f36105023660046133be565b610c57565b34801561051357600080fd5b506104c36105223660046133ff565b60009081526005602052604090206001015490565b34801561054357600080fd5b50610557610552366004613418565b610d06565b005b34801561056557600080fd5b50604051601281526020016103ff565b34801561058157600080fd5b50610557610590366004613418565b610d30565b3480156105a157600080fd5b506103f36105b0366004613375565b610dae565b3480156105c157600080fd5b506105576105d03660046133a1565b610dea565b3480156105e157600080fd5b50600a5461044a906001600160a01b031681565b34801561060157600080fd5b506105576106103660046133a1565b610e81565b34801561062157600080fd5b50600f546103f39060ff1681565b34801561063b57600080fd5b5061055761064a366004613448565b610f64565b34801561065b57600080fd5b5061055761100a565b34801561067057600080fd5b506104c360165481565b34801561068657600080fd5b506105576106953660046133a1565b61108b565b3480156106a657600080fd5b506104c360135481565b3480156106bc57600080fd5b50600f546103f3906301000000900460ff1681565b3480156106dd57600080fd5b506104c360075481565b3480156106f357600080fd5b506104c360155481565b34801561070957600080fd5b50600f546103f39062010000900460ff1681565b34801561072957600080fd5b50610557610738366004613448565b611175565b34801561074957600080fd5b506104c36107583660046133a1565b611244565b34801561076957600080fd5b5061055761125f565b34801561077e57600080fd5b5061055761078d3660046134cb565b61129f565b34801561079e57600080fd5b506103f36107ad3660046134f9565b611371565b3480156107be57600080fd5b506104c360065481565b3480156107d457600080fd5b506105576115b4565b3480156107e957600080fd5b506103f36107f8366004613418565b611680565b34801561080957600080fd5b5061041d6116ab565b34801561081e57600080fd5b5061055761082d3660046133a1565b6116ba565b34801561083e57600080fd5b5061055761174e565b34801561085357600080fd5b506105576108623660046134cb565b611c27565b34801561087357600080fd5b506104c3600081565b34801561088857600080fd5b50610557611d25565b34801561089d57600080fd5b506103f36108ac366004613375565b611d68565b3480156108bd57600080fd5b506103f36108cc366004613375565b611e01565b3480156108dd57600080fd5b50610557611e0e565b3480156108f257600080fd5b50610557610901366004613527565b611ec7565b34801561091257600080fd5b506103f36109213660046133a1565b601c6020526000908152604090205460ff1681565b34801561094257600080fd5b506104c360008051602061393f83398151915281565b34801561096457600080fd5b50610557610973366004613527565b611f64565b34801561098457600080fd5b50600f546103f390610100900460ff1681565b3480156109a357600080fd5b506105576109b23660046134cb565b612001565b3480156109c357600080fd5b506103f36109d23660046133a1565b600e6020526000908152604090205460ff1681565b3480156109f357600080fd5b506011546103f39060ff1681565b348015610a0d57600080fd5b50610557610a1c366004613418565b612094565b348015610a2d57600080fd5b506104c360125481565b348015610a4357600080fd5b50610557610a523660046133a1565b6120b9565b348015610a6357600080fd5b506104c3610a723660046134f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506104c3600b5481565b348015610abf57600080fd5b50610557612176565b348015610ad457600080fd5b50600c5461044a906001600160a01b031681565b348015610af457600080fd5b506104c360008051602061391f83398151915281565b348015610b1657600080fd5b506104c3600d5481565b348015610b2c57600080fd5b506104c360145481565b348015610b4257600080fd5b506104c360175481565b348015610b5857600080fd5b506104c360085481565b348015610b6e57600080fd5b506104c360185481565b60006001600160e01b03198216637965db0b60e01b1480610ba957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610bbe90613549565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90613549565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4e3384846121b6565b50600192915050565b6000610c648484846122da565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cfb85338584036121b6565b506001949350505050565b600082815260056020526040902060010154610d2181612a97565b610d2b8383612aa1565b505050565b6001600160a01b0381163314610da05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ce5565b610daa8282612b27565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4e918590610de5908690613599565b6121b6565b610e0260008051602061391f83398151915233611680565b610e1e5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282610d06565b50565b610e9960008051602061391f83398151915233611680565b610eb55760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610f1a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610ce5565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b610f7c60008051602061393f83398151915233611680565b610f985760405162461bcd60e51b8152600401610ce5906135d3565b60005b81811015610d2b576000600e6000858585818110610fbb57610fbb613601565b9050602002016020810190610fd091906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100281613617565b915050610f9b565b61102260008051602061391f83398151915233611680565b61103e5760405162461bcd60e51b8152600401610ce5906135ac565b604051600090339047908381818185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50505050565b6110a360008051602061393f83398151915233611680565b6110bf5760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166110e85760405162461bcd60e51b8152600401610ce590613630565b6001600160a01b0381166000908152600e602052604090205460ff16156111515760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61118d60008051602061393f83398151915233611680565b6111a95760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166111d25760405162461bcd60e51b8152600401610ce590613630565b60005b81811015610d2b576001600e60008585858181106111f5576111f5613601565b905060200201602081019061120a91906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061123c81613617565b9150506111d5565b6001600160a01b031660009081526020819052604090205490565b61127760008051602061391f83398151915233611680565b6112935760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19169055565b6112b760008051602061391f83398151915233611680565b6112d35760405162461bcd60e51b8152600401610ce5906135ac565b8061134657600a546001600160a01b03908116908316036113465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce5565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600061138b60008051602061391f83398151915233611680565b6113a75760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0383166113fd5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce5565b6001600160a01b0383163014158061141d5750600f54610100900460ff16155b6114865760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f1919061367b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115689190613694565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6115cc60008051602061393f83398151915233611680565b6115e85760405162461bcd60e51b8152600401610ce5906135d3565b600f54610100900460ff16156116405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce5565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610bbe90613549565b6116d260008051602061391f83398151915233611680565b6116ee5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282612094565b61176660008051602061391f83398151915233611680565b6117825760405162461bcd60e51b8152600401610ce5906135ac565b600f54610100900460ff16156117ee5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ce5565b6000466001036118135750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4662aa36a7036118385750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4660380361185b57507310ed43c718714eb63d5aa57b78b54704e256024e6118e1565b4660610361187e575073d99d1c33f9fc3444f8101754abc46c52416550d16118e1565b4661a4b1036118a25750731b02da8cb0d097eb8d57a175b88c7d8b479975066118e1565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610ce5565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e91906136b1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906136b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5591906136b1565b600a80546001600160a01b0319166001600160a01b03929092169182179055611a7f906001612b8e565b600a54611a96906001600160a01b03166001612bf1565b600954611aad906001600160a01b03166001612b8e565b600954611ac4906001600160a01b03166001612001565b60004711611b205760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ce5565b6000611b2b30611244565b11611b875760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ce5565b600954611ba29030906001600160a01b0316610de582611244565b6009546001600160a01b031663f305d7194730611bbe81611244565b60008033426040518863ffffffff1660e01b8152600401611be4969594939291906136ce565b60606040518083038185885af1158015611c02573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110859190613709565b611c3f60008051602061391f83398151915233611680565b611c5b5760405162461bcd60e51b8152600401610ce5906135ac565b600a546001600160a01b0390811690831603611cdf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce5565b611ce98282612bf1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611d3d60008051602061391f83398151915233611680565b611d595760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611dea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce5565b611df733858584036121b6565b5060019392505050565b6000610c4e3384846122da565b611e2660008051602061391f83398151915233611680565b611e425760405162461bcd60e51b8152600401610ce5906135ac565b600f546301000000900460ff16611eb85760405162461bcd60e51b815260206004820152603460248201527f466c616720736e697065722066756e6374696f6e616c69747920616c72656164604482015273792064697361626c656420666f7265766572212160601b6064820152608401610ce5565b600f805463ff00000019169055565b611edf60008051602061391f83398151915233611680565b611efb5760405162461bcd60e51b8152600401610ce5906135ac565b60138290556014819055611f0f8183613599565b6012819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b611f7c60008051602061391f83398151915233611680565b611f985760405162461bcd60e51b8152600401610ce5906135ac565b60168290556017819055611fac8183613599565b6015819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b61201960008051602061391f83398151915233611680565b6120355760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000828152600560205260409020600101546120af81612a97565b610d2b8383612b27565b6120d160008051602061393f83398151915233611680565b6120ed5760405162461bcd60e51b8152600401610ce5906135d3565b6001600160a01b0381166000908152600e602052604090205460ff166121555760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b61218e60008051602061391f83398151915233611680565b6121aa5760405162461bcd60e51b8152600401610ce5906135ac565b6011805460ff19169055565b6001600160a01b0383166122185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b0382166122795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b0382166123265760405162461bcd60e51b8152600401610ce59061377c565b600081116123765760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce5565b600f54610100900460ff1661240e576001600160a01b0383166000908152601a602052604090205460ff16806123c457506001600160a01b0382166000908152601a602052604090205460ff165b6124095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce5565b612477565b6001600160a01b0383166000908152600e602052604090205460ff16156124775760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610ce5565b600f5460ff1615612821576001600160a01b03821661dead148015906124b657506001600160a01b0383166000908152601a602052604090205460ff16155b80156124db57506001600160a01b0382166000908152601a602052604090205460ff16155b156128215760115460ff16156125f4576009546001600160a01b038381169116148015906125175750600a546001600160a01b03838116911614155b156125f4576125276002436137bf565b32600090815260106020526040902054108015612565575061254a6002436137bf565b6001600160a01b038316600090815260106020526040902054105b6125cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce5565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601c602052604090205460ff16801561263557506001600160a01b0382166000908152601b602052604090205460ff16155b156126fc5760065481111561269d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce5565b6008546126a983611244565b6126b39083613599565b11156126f75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b612821565b6001600160a01b0382166000908152601c602052604090205460ff16801561273d57506001600160a01b0383166000908152601b602052604090205460ff16155b156127a7576007548111156126f75760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce5565b6001600160a01b0382166000908152601b602052604090205460ff16612821576008546127d383611244565b6127dd9083613599565b11156128215760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b600061282c30611244565b600b549091508110801590819061284b5750600f5462010000900460ff165b80156128615750600a54600160a01b900460ff16155b801561288557506001600160a01b0384166000908152601c602052604090205460ff165b156128b357600a805460ff60a01b1916600160a01b1790556128a5612c1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601a602052604090205460019060ff16806128f557506001600160a01b0385166000908152601a602052604090205460ff165b156128fe575060005b60008115612a83576001600160a01b0386166000908152601c602052604090205460ff16801561293057506000601554115b156129b85760646015548661294591906137d2565b61294f91906137e9565b90506015546017548261296291906137d2565b61296c91906137e9565b6019600082825461297d9190613599565b909155505060155460165461299290836137d2565b61299c91906137e9565b601860008282546129ad9190613599565b90915550612a659050565b6001600160a01b0387166000908152601c602052604090205460ff1680156129e257506000601254115b15612a65576064601254866129f791906137d2565b612a0191906137e9565b905060125460145482612a1491906137d2565b612a1e91906137e9565b60196000828254612a2f9190613599565b9091555050601254601354612a4490836137d2565b612a4e91906137e9565b60186000828254612a5f9190613599565b90915550505b8015612a7657612a76873083612d81565b612a8081866137bf565b94505b612a8e878787612d81565b50505050505050565b610e7e8133612ed6565b612aab8282611680565b610daa5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ae33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b318282611680565b15610daa5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055611ce98282612b8e565b6000612c2a30611244565b90506000601854601954612c3e9190613599565b9050811580612c4b575080155b15612c54575050565b600b54612c6290600f6137d2565b821115612c7a57600b54612c7790600f6137d2565b91505b60008060028360195486612c8e91906137d2565b612c9891906137e9565b612ca291906137e9565b9050612cb6612cb182866137bf565b612f2f565b60195447908190600090612ccc906002906137e9565b612cd690876137bf565b601854612ce390856137d2565b612ced91906137e9565b9050612cf981836137bf565b6000601981905560185591508315801590612d145750600082115b15612d2357612d238483613089565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b50505050505050505050565b6001600160a01b038316612da75760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b038216612dcd5760405162461bcd60e51b8152600401610ce59061377c565b6001600160a01b03831660009081526020819052604090205481811015612e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e7c908490613599565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ec891815260200190565b60405180910390a350505050565b612ee08282611680565b610daa57612eed8161312a565b612ef883602061313c565b604051602001612f0992919061380b565b60408051601f198184030181529082905262461bcd60e51b8252610ce59160040161332d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6457612f64613601565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe191906136b1565b81600181518110612ff457612ff4613601565b6001600160a01b03928316602091820292909201015260095461301a91309116846121b6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613053908590600090869030904290600401613896565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6009546130a19030906001600160a01b0316846121b6565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906130e09030908790600090819061dead9042906004016136ce565b60606040518083038185885af11580156130fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131239190613709565b5050505050565b6060610ba96001600160a01b03831660145b6060600061314b8360026137d2565b613156906002613599565b67ffffffffffffffff81111561316e5761316e613880565b6040519080825280601f01601f191660200182016040528015613198576020820181803683370190505b509050600360fc1b816000815181106131b3576131b3613601565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131e2576131e2613601565b60200101906001600160f81b031916908160001a90535060006132068460026137d2565b613211906001613599565b90505b6001811115613289576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061324557613245613601565b1a60f81b82828151811061325b5761325b613601565b60200101906001600160f81b031916908160001a90535060049490941c9361328281613907565b9050613214565b5083156132d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce5565b9392505050565b6000602082840312156132f157600080fd5b81356001600160e01b0319811681146132d857600080fd5b60005b8381101561332457818101518382015260200161330c565b50506000910152565b602081526000825180602084015261334c816040850160208701613309565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610e7e57600080fd5b6000806040838503121561338857600080fd5b823561339381613360565b946020939093013593505050565b6000602082840312156133b357600080fd5b81356132d881613360565b6000806000606084860312156133d357600080fd5b83356133de81613360565b925060208401356133ee81613360565b929592945050506040919091013590565b60006020828403121561341157600080fd5b5035919050565b6000806040838503121561342b57600080fd5b82359150602083013561343d81613360565b809150509250929050565b6000806020838503121561345b57600080fd5b823567ffffffffffffffff8082111561347357600080fd5b818501915085601f83011261348757600080fd5b81358181111561349657600080fd5b8660208260051b85010111156134ab57600080fd5b60209290920196919550909350505050565b8015158114610e7e57600080fd5b600080604083850312156134de57600080fd5b82356134e981613360565b9150602083013561343d816134bd565b6000806040838503121561350c57600080fd5b823561351781613360565b9150602083013561343d81613360565b6000806040838503121561353a57600080fd5b50508035926020909101359150565b600181811c9082168061355d57607f821691505b60208210810361357d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba957610ba9613583565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161362957613629613583565b5060010190565b6020808252602b908201527f466c616720736e697065722066756e6374696f6e616c6974792064697361626c60408201526a656420666f72657665722160a81b606082015260800190565b60006020828403121561368d57600080fd5b5051919050565b6000602082840312156136a657600080fd5b81516132d8816134bd565b6000602082840312156136c357600080fd5b81516132d881613360565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561371e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba957610ba9613583565b8082028115828204841417610ba957610ba9613583565b60008261380657634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613843816017850160208801613309565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613874816028840160208801613309565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e65784516001600160a01b0316835293830193918301916001016138c1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008161391657613916613583565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a26469706673582212200504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f64736f6c63430008130033

Deployed Bytecode Sourcemap

20597:18323:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11244:204;;;;;;;;;;-1:-1:-1;11244:204:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;11244:204:0;;;;;;;;15216:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20744:27::-;;;;;;;;;;-1:-1:-1;20744:27:0;;;;-1:-1:-1;;;;;20744:27:0;;;;;;-1:-1:-1;;;;;1336:32:1;;;1318:51;;1306:2;1291:18;20744:27:0;1153:222:1;16196:194:0;;;;;;;;;;-1:-1:-1;16196:194:0;;;;;:::i;:::-;;:::i;21835:63::-;;;;;;;;;;-1:-1:-1;21835:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15537:108;;;;;;;;;;-1:-1:-1;15625:12:0;;15537:108;;;2234:25:1;;;2222:2;2207:18;15537:108:0;2088:177:1;21734:33:0;;;;;;;;;;;;;;;;16398:529;;;;;;;;;;-1:-1:-1;16398:529:0;;;;;:::i;:::-;;:::i;12224:131::-;;;;;;;;;;-1:-1:-1;12224:131:0;;;;;:::i;:::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;;12224:131;12363:147;;;;;;;;;;-1:-1:-1;12363:147:0;;;;;:::i;:::-;;:::i;:::-;;15436:93;;;;;;;;;;-1:-1:-1;15436:93:0;;15519:2;3560:36:1;;3548:2;3533:18;15436:93:0;3418:184:1;12675:218:0;;;;;;;;;;-1:-1:-1;12675:218:0;;;;;:::i;:::-;;:::i;16935:290::-;;;;;;;;;;-1:-1:-1;16935:290:0;;;;;:::i;:::-;;:::i;24492:202::-;;;;;;;;;;-1:-1:-1;24492:202:0;;;;;:::i;:::-;;:::i;20778:21::-;;;;;;;;;;-1:-1:-1;20778:21:0;;;;-1:-1:-1;;;;;20778:21:0;;;34490:352;;;;;;;;;;-1:-1:-1;34490:352:0;;;;;:::i;:::-;;:::i;21185:33::-;;;;;;;;;;-1:-1:-1;21185:33:0;;;;;;;;35920:221;;;;;;;;;;-1:-1:-1;35920:221:0;;;;;:::i;:::-;;:::i;36401:191::-;;;;;;;;;;;;;:::i;21614:32::-;;;;;;;;;;;;;;;;35039:309;;;;;;;;;;-1:-1:-1;35039:309:0;;;;;:::i;:::-;;:::i;21502:31::-;;;;;;;;;;;;;;;;21303:37;;;;;;;;;;-1:-1:-1;21303:37:0;;;;;;;;;;;20676:28;;;;;;;;;;;;;;;;21579;;;;;;;;;;;;;;;;21265:31;;;;;;;;;;-1:-1:-1;21265:31:0;;;;;;;;;;;35356:350;;;;;;;;;;-1:-1:-1;35356:350:0;;;;;:::i;:::-;;:::i;15653:143::-;;;;;;;;;;-1:-1:-1;15653:143:0;;;;;:::i;:::-;;:::i;34850:86::-;;;;;;;;;;;;;:::i;25321:338::-;;;;;;;;;;-1:-1:-1;25321:338:0;;;;;:::i;:::-;;:::i;33920:562::-;;;;;;;;;;-1:-1:-1;33920:562:0;;;;;:::i;:::-;;:::i;20642:27::-;;;;;;;;;;;;;;;;38653:258;;;;;;;;;;;;;:::i;11456:147::-;;;;;;;;;;-1:-1:-1;11456:147:0;;;;;:::i;:::-;;:::i;15324:104::-;;;;;;;;;;;;;:::i;24702:206::-;;;;;;;;;;-1:-1:-1;24702:206:0;;;;;:::i;:::-;;:::i;36606:2039::-;;;;;;;;;;;;;:::i;25911:357::-;;;;;;;;;;-1:-1:-1;25911:357:0;;;;;:::i;:::-;;:::i;11099:49::-;;;;;;;;;;-1:-1:-1;11099:49:0;11144:4;11099:49;;34944:87;;;;;;;;;;;;;:::i;17233:475::-;;;;;;;;;;-1:-1:-1;17233:475:0;;;;;:::i;:::-;;:::i;15804:200::-;;;;;;;;;;-1:-1:-1;15804:200:0;;;;;:::i;:::-;;:::i;36153:236::-;;;;;;;;;;;;;:::i;26284:340::-;;;;;;;;;;-1:-1:-1;26284:340:0;;;;;:::i;:::-;;:::i;21905:57::-;;;;;;;;;;-1:-1:-1;21905:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21087:85;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21087:85:0;;26632:347;;;;;;;;;;-1:-1:-1;26632:347:0;;;;;:::i;:::-;;:::i;21225:33::-;;;;;;;;;;-1:-1:-1;21225:33:0;;;;;;;;;;;26991:184;;;;;;;;;;-1:-1:-1;26991:184:0;;;;;:::i;:::-;;:::i;20961:46::-;;;;;;;;;;-1:-1:-1;20961:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21420:39;;;;;;;;;;-1:-1:-1;21420:39:0;;;;;;;;12518:149;;;;;;;;;;-1:-1:-1;12518:149:0;;;;;:::i;:::-;;:::i;21468:27::-;;;;;;;;;;;;;;;;35714:190;;;;;;;;;;-1:-1:-1;35714:190:0;;;;;:::i;:::-;;:::i;16012:176::-;;;;;;;;;;-1:-1:-1;16012:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;16153:18:0;;;16126:7;16153:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16012:176;20836:33;;;;;;;;;;;;;;;;24973:100;;;;;;;;;;;;;:::i;20876:32::-;;;;;;;;;;-1:-1:-1;20876:32:0;;;;-1:-1:-1;;;;;20876:32:0;;;21016:64;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21016:64:0;;20917:37;;;;;;;;;;;;;;;;21540:30;;;;;;;;;;;;;;;;21653:31;;;;;;;;;;;;;;;;20711:24;;;;;;;;;;;;;;;;21693:34;;;;;;;;;;;;;;;;11244:204;11329:4;-1:-1:-1;;;;;;11353:47:0;;-1:-1:-1;;;11353:47:0;;:87;;-1:-1:-1;;;;;;;;;;855:40:0;;;11404:36;11346:94;11244:204;-1:-1:-1;;11244:204:0:o;15216:100::-;15270:13;15303:5;15296:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15216:100;:::o;16196:194::-;16304:4;16321:39;323:10;16344:7;16353:6;16321:8;:39::i;:::-;-1:-1:-1;16378:4:0;16196:194;;;;:::o;16398:529::-;16538:4;16555:36;16565:6;16573:9;16584:6;16555:9;:36::i;:::-;-1:-1:-1;;;;;16631:19:0;;16604:24;16631:19;;;:11;:19;;;;;;;;323:10;16631:33;;;;;;;;16697:26;;;;16675:116;;;;-1:-1:-1;;;16675:116:0;;6178:2:1;16675:116:0;;;6160:21:1;6217:2;6197:18;;;6190:30;6256:34;6236:18;;;6229:62;-1:-1:-1;;;6307:18:1;;;6300:38;6355:19;;16675:116:0;;;;;;;;;16827:57;16836:6;323:10;16877:6;16858:16;:25;16827:8;:57::i;:::-;-1:-1:-1;16915:4:0;;16398:529;-1:-1:-1;;;;16398:529:0:o;12363:147::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;11200:16;11211:4;11200:10;:16::i;:::-;12477:25:::1;12488:4;12494:7;12477:10;:25::i;:::-;12363:147:::0;;;:::o;12675:218::-;-1:-1:-1;;;;;12771:23:0;;323:10;12771:23;12763:83;;;;-1:-1:-1;;;12763:83:0;;6587:2:1;12763:83:0;;;6569:21:1;6626:2;6606:18;;;6599:30;6665:34;6645:18;;;6638:62;-1:-1:-1;;;6716:18:1;;;6709:45;6771:19;;12763:83:0;6385:411:1;12763:83:0;12859:26;12871:4;12877:7;12859:11;:26::i;:::-;12675:218;;:::o;16935:290::-;323:10;17048:4;17137:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17137:34:0;;;;;;;;;;17048:4;;17065:130;;17115:7;;17137:47;;17174:10;;17137:47;:::i;:::-;17065:8;:130::i;24492:202::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24582:28:0;::::1;24574:56;;;::::0;-1:-1:-1;;;24574:56:0;;7607:2:1;24574:56:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;-1:-1:-1;;;7665:18:1;;;7658:45;7720:18;;24574:56:0::1;7405:339:1::0;24574:56:0::1;24641:45;-1:-1:-1::0;;;;;;;;;;;24671:14:0::1;24641:9;:45::i;:::-;24492:202:::0;:::o;34490:352::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34618:32:0;::::1;34596:120;;;::::0;-1:-1:-1;;;34596:120:0;;7951:2:1;34596:120:0::1;::::0;::::1;7933:21:1::0;7990:2;7970:18;;;7963:30;8029:34;8009:18;;;8002:62;-1:-1:-1;;;8080:18:1;;;8073:36;8126:19;;34596:120:0::1;7749:402:1::0;34596:120:0::1;34727:17;:47:::0;;-1:-1:-1;;;;;;34727:47:0::1;-1:-1:-1::0;;;;;34727:47:0;::::1;::::0;;::::1;::::0;;;34790:44:::1;::::0;::::1;::::0;-1:-1:-1;;34790:44:0::1;34490:352:::0;:::o;35920:221::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;36033:9:::1;36028:106;36048:18:::0;;::::1;36028:106;;;36117:5;36088:14;:26;36103:7;;36111:1;36103:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36088:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36088:26:0;:34;;-1:-1:-1;;36088:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36068:3;::::1;::::0;::::1;:::i;:::-;;;;36028:106;;36401:191:::0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36502:82:::1;::::0;36465:12:::1;::::0;36510:10:::1;::::0;36534:21:::1;::::0;36465:12;36502:82;36465:12;36502:82;36534:21;36510:10;36502:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;36401:191:0:o;35039:309::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;35136:18:::1;::::0;;;::::1;;;35114:111;;;;-1:-1:-1::0;;;35114:111:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35247:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;35246:23;35238:62;;;::::0;-1:-1:-1;;;35238:62:0;;9601:2:1;35238:62:0::1;::::0;::::1;9583:21:1::0;9640:2;9620:18;;;9613:30;9679:28;9659:18;;;9652:56;9725:18;;35238:62:0::1;9399:350:1::0;35238:62:0::1;-1:-1:-1::0;;;;;35311:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;35311:29:0::1;35336:4;35311:29;::::0;;35039:309::o;35356:350::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;35484:18:::1;::::0;;;::::1;;;35462:111;;;;-1:-1:-1::0;;;35462:111:0::1;;;;;;;:::i;:::-;35599:9;35594:105;35614:18:::0;;::::1;35594:105;;;35683:4;35654:14;:26;35669:7;;35677:1;35669:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35654:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35654:26:0;:33;;-1:-1:-1;;35654:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35634:3;::::1;::::0;::::1;:::i;:::-;;;;35594:105;;15653:143:::0;-1:-1:-1;;;;;15770:18:0;15743:7;15770:18;;;;;;;;;;;;15653:143::o;34850:86::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;34906:14:::1;:22:::0;;-1:-1:-1;;34906:22:0::1;::::0;;34850:86::o;25321:338::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;25445:4:::1;25440:155;;25502:6;::::0;-1:-1:-1;;;;;25502:6:0;;::::1;25492:16:::0;;::::1;::::0;25466:117:::1;;;::::0;-1:-1:-1;;;25466:117:0;;9956:2:1;25466:117:0::1;::::0;::::1;9938:21:1::0;9995:2;9975:18;;;9968:30;10034:34;10014:18;;;10007:62;-1:-1:-1;;;10085:18:1;;;10078:37;10132:19;;25466:117:0::1;9754:403:1::0;25466:117:0::1;-1:-1:-1::0;;;;;25605:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25605:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25321:338::o;33920:562::-;34034:10;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34065:20:0;::::1;34057:59;;;::::0;-1:-1:-1;;;34057:59:0;;10364:2:1;34057:59:0::1;::::0;::::1;10346:21:1::0;10403:2;10383:18;;;10376:30;10442:28;10422:18;;;10415:56;10488:18;;34057:59:0::1;10162:350:1::0;34057:59:0::1;-1:-1:-1::0;;;;;34149:23:0;::::1;34167:4;34149:23;;::::0;:41:::1;;-1:-1:-1::0;34177:13:0::1;::::0;::::1;::::0;::::1;;;34176:14;34149:41;34127:143;;;::::0;-1:-1:-1;;;34127:143:0;;10719:2:1;34127:143:0::1;::::0;::::1;10701:21:1::0;10758:2;10738:18;;;10731:30;10797:34;10777:18;;;10770:62;-1:-1:-1;;;10848:18:1;;;10841:50;10908:19;;34127:143:0::1;10517:416:1::0;34127:143:0::1;34308:39;::::0;-1:-1:-1;;;34308:39:0;;34341:4:::1;34308:39;::::0;::::1;1318:51:1::0;34281:24:0::1;::::0;-1:-1:-1;;;;;34308:24:0;::::1;::::0;::::1;::::0;1291:18:1;;34308:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34366:46;::::0;-1:-1:-1;;;34366:46:0;;-1:-1:-1;;;;;11319:32:1;;;34366:46:0::1;::::0;::::1;11301:51:1::0;11368:18;;;11361:34;;;34281:66:0;;-1:-1:-1;34366:23:0;;::::1;::::0;::::1;::::0;11274:18:1;;34366:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34428;::::0;;-1:-1:-1;;;;;11319:32:1;;11301:51;;11383:2;11368:18;;11361:34;;;34358:54:0;;-1:-1:-1;34428:46:0::1;::::0;11274:18:1;34428:46:0::1;;;;;;;34046:436;33920:562:::0;;;;:::o;38653:258::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;38726:13:::1;::::0;::::1;::::0;::::1;;;38725:14;38717:50;;;::::0;-1:-1:-1;;;38717:50:0;;11858:2:1;38717:50:0::1;::::0;::::1;11840:21:1::0;11897:2;11877:18;;;11870:30;11936:25;11916:18;;;11909:53;11979:18;;38717:50:0::1;11656:347:1::0;38717:50:0::1;38778:13;:20:::0;;-1:-1:-1;;38809:18:0;;;;;38859:12:::1;38838:18;:33:::0;38887:16:::1;::::0;::::1;::::0;-1:-1:-1;;38887:16:0::1;38653:258::o:0;11456:147::-;11542:4;11566:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;11566:29:0;;;;;;;;;;;;;;;11456:147::o;15324:104::-;15380:13;15413:7;15406:14;;;;;:::i;24702:206::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24795:28:0;::::1;24787:56;;;::::0;-1:-1:-1;;;24787:56:0;;7607:2:1;24787:56:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;-1:-1:-1;;;7665:18:1;;;7658:45;7720:18;;24787:56:0::1;7405:339:1::0;24787:56:0::1;24854:46;-1:-1:-1::0;;;;;;;;;;;24885:14:0::1;24854:10;:46::i;36606:2039::-:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36672:13:::1;::::0;::::1;::::0;::::1;;;36671:14;36663:70;;;::::0;-1:-1:-1;;;36663:70:0;;12210:2:1;36663:70:0::1;::::0;::::1;12192:21:1::0;12249:2;12229:18;;;12222:30;12288:34;12268:18;;;12261:62;-1:-1:-1;;;12339:18:1;;;12332:41;12390:19;;36663:70:0::1;12008:407:1::0;36663:70:0::1;36751:18;36786:13;36803:1;36786:18:::0;36782:730:::1;;-1:-1:-1::0;36834:42:0::1;36782:730;;;36917:13;36934:8;36917:25:::0;36913:599:::1;;-1:-1:-1::0;36972:42:0::1;36913:599;;;37052:13;37069:2;37052:19:::0;37048:464:::1;;-1:-1:-1::0;37101:42:0::1;37048:464;;;37186:13;37203:2;37186:19:::0;37182:330:::1;;-1:-1:-1::0;37235:42:0::1;37182:330;;;37320:13;37337:5;37320:22:::0;37316:196:::1;;-1:-1:-1::0;37372:42:0::1;37316:196;;;37470:30;::::0;-1:-1:-1;;;37470:30:0;;12622:2:1;37470:30:0::1;::::0;::::1;12604:21:1::0;12661:2;12641:18;;;12634:30;-1:-1:-1;;;12680:18:1;;;12673:50;12740:18;;37470:30:0::1;12420:344:1::0;37316:196:0::1;37554:9;:34:::0;;-1:-1:-1;;;;;;37554:34:0::1;-1:-1:-1::0;;;;;37554:34:0;::::1;::::0;;::::1;::::0;;;37654:19:::1;::::0;;-1:-1:-1;;;37654:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;37554:34;37654:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37642:43:0::1;;37708:4;37728:9;;;;;;;;;-1:-1:-1::0;;;;;37728:9:0::1;-1:-1:-1::0;;;;;37728:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37642:113;::::0;-1:-1:-1;;;;;;37642:113:0::1;::::0;;;;;;-1:-1:-1;;;;;13255:15:1;;;37642:113:0::1;::::0;::::1;13237:34:1::0;13307:15;;13287:18;;;13280:43;13172:18;;37642:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37633:6;:122:::0;;-1:-1:-1;;;;;;37633:122:0::1;-1:-1:-1::0;;;;;37633:122:0;;;::::1;::::0;;::::1;::::0;;37768:49:::1;::::0;-1:-1:-1;37768:26:0::1;:49::i;:::-;37865:6;::::0;37828:51:::1;::::0;-1:-1:-1;;;;;37865:6:0::1;::::0;37828:28:::1;:51::i;:::-;37935:9;::::0;37900:52:::1;::::0;-1:-1:-1;;;;;37935:9:0::1;::::0;37900:26:::1;:52::i;:::-;37987:9;::::0;37963:41:::1;::::0;-1:-1:-1;;;;;37987:9:0::1;::::0;37963:15:::1;:41::i;:::-;38065:1;38041:21;:25;38019:110;;;::::0;-1:-1:-1;;;38019:110:0;;13536:2:1;38019:110:0::1;::::0;::::1;13518:21:1::0;13575:2;13555:18;;;13548:30;13614:34;13594:18;;;13587:62;-1:-1:-1;;;13665:18:1;;;13658:33;13708:19;;38019:110:0::1;13334:399:1::0;38019:110:0::1;38189:1;38162:24;38180:4;38162:9;:24::i;:::-;:28;38140:116;;;::::0;-1:-1:-1;;;38140:116:0;;13940:2:1;38140:116:0::1;::::0;::::1;13922:21:1::0;13979:2;13959:18;;;13952:30;14018:34;13998:18;;;13991:62;-1:-1:-1;;;14069:18:1;;;14062:36;14115:19;;38140:116:0::1;13738:402:1::0;38140:116:0::1;38312:9;::::0;38280:69:::1;::::0;38297:4:::1;::::0;-1:-1:-1;;;;;38312:9:0::1;38324:24;38297:4:::0;38324:9:::1;:24::i;38280:69::-;38362:9;::::0;-1:-1:-1;;;;;38362:9:0::1;:25;38395:21;38440:4;38460:24;38440:4:::0;38460:9:::1;:24::i;:::-;38499:1;38542::::0;38585:10:::1;38610:15;38362:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25911:357::-:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26061:6:::1;::::0;-1:-1:-1;;;;;26061:6:0;;::::1;26053:14:::0;;::::1;::::0;26031:121:::1;;;::::0;-1:-1:-1;;;26031:121:0;;15270:2:1;26031:121:0::1;::::0;::::1;15252:21:1::0;15309:2;15289:18;;;15282:30;15348:34;15328:18;;;15321:62;15419:27;15399:18;;;15392:55;15464:19;;26031:121:0::1;15068:421:1::0;26031:121:0::1;26163:41;26192:4;26198:5;26163:28;:41::i;:::-;26220:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;26220:40:0;::::1;::::0;::::1;::::0;;;::::1;25911:357:::0;;:::o;34944:87::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;35002:14:::1;:21:::0;;-1:-1:-1;;35002:21:0::1;35019:4;35002:21;::::0;;34944:87::o;17233:475::-;323:10;17351:4;17395:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17395:34:0;;;;;;;;;;17462:35;;;;17440:122;;;;-1:-1:-1;;;17440:122:0;;15696:2:1;17440:122:0;;;15678:21:1;15735:2;15715:18;;;15708:30;15774:34;15754:18;;;15747:62;-1:-1:-1;;;15825:18:1;;;15818:35;15870:19;;17440:122:0;15494:401:1;17440:122:0;17598:67;323:10;17621:7;17649:15;17630:16;:34;17598:8;:67::i;:::-;-1:-1:-1;17696:4:0;;17233:475;-1:-1:-1;;;17233:475:0:o;15804:200::-;15915:4;15932:42;323:10;15956:9;15967:6;15932:9;:42::i;36153:236::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36244:18:::1;::::0;;;::::1;;;36222:120;;;::::0;-1:-1:-1;;;36222:120:0;;16102:2:1;36222:120:0::1;::::0;::::1;16084:21:1::0;16141:2;16121:18;;;16114:30;16180:34;16160:18;;;16153:62;-1:-1:-1;;;16231:18:1;;;16224:50;16291:19;;36222:120:0::1;15900:416:1::0;36222:120:0::1;36355:18;:26:::0;;-1:-1:-1;;36355:26:0::1;::::0;;36153:236::o;26284:340::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26410:16:::1;:33:::0;;;26454:15:::1;:31:::0;;;26511:34:::1;26472:13:::0;26429:14;26511:34:::1;:::i;:::-;26496:12;:49:::0;;;26580:2:::1;-1:-1:-1::0;26564:18:0::1;26556:60;;;::::0;-1:-1:-1;;;26556:60:0;;16523:2:1;26556:60:0::1;::::0;::::1;16505:21:1::0;16562:2;16542:18;;;16535:30;16601:31;16581:18;;;16574:59;16650:18;;26556:60:0::1;16321:353:1::0;26632:347:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26759:17:::1;:34:::0;;;26804:16:::1;:32:::0;;;26863:36:::1;26823:13:::0;26779:14;26863:36:::1;:::i;:::-;26847:13;:52:::0;;;26935:2:::1;-1:-1:-1::0;26918:19:0::1;26910:61;;;::::0;-1:-1:-1;;;26910:61:0;;16523:2:1;26910:61:0::1;::::0;::::1;16505:21:1::0;16562:2;16542:18;;;16535:30;16601:31;16581:18;;;16574:59;16650:18;;26910:61:0::1;16321:353:1::0;26991:184:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27078:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;27078:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27133:34;;445:41:1;;;27133:34:0::1;::::0;418:18:1;27133:34:0::1;;;;;;;26991:184:::0;;:::o;12518:149::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;11200:16;11211:4;11200:10;:16::i;:::-;12633:26:::1;12645:4;12651:7;12633:11;:26::i;35714:190::-:0;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35799:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;35791:64;;;::::0;-1:-1:-1;;;35791:64:0;;16881:2:1;35791:64:0::1;::::0;::::1;16863:21:1::0;16920:2;16900:18;;;16893:30;16959:31;16939:18;;;16932:59;17008:18;;35791:64:0::1;16679:353:1::0;35791:64:0::1;-1:-1:-1::0;;;;;35866:22:0::1;35891:5;35866:22:::0;;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;35866:30:0::1;::::0;;35714:190::o;24973:100::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;25037:20:::1;:28:::0;;-1:-1:-1;;25037:28:0::1;::::0;;24973:100::o;18699:380::-;-1:-1:-1;;;;;18835:19:0;;18827:68;;;;-1:-1:-1;;;18827:68:0;;17239:2:1;18827:68:0;;;17221:21:1;17278:2;17258:18;;;17251:30;17317:34;17297:18;;;17290:62;-1:-1:-1;;;17368:18:1;;;17361:34;17412:19;;18827:68:0;17037:400:1;18827:68:0;-1:-1:-1;;;;;18914:21:0;;18906:68;;;;-1:-1:-1;;;18906:68:0;;17644:2:1;18906:68:0;;;17626:21:1;17683:2;17663:18;;;17656:30;17722:34;17702:18;;;17695:62;-1:-1:-1;;;17773:18:1;;;17766:32;17815:19;;18906:68:0;17442:398:1;18906:68:0;-1:-1:-1;;;;;18987:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19039:32;;2234:25:1;;;19039:32:0;;2207:18:1;19039:32:0;;;;;;;18699:380;;;:::o;27183:4356::-;-1:-1:-1;;;;;27315:18:0;;27307:68;;;;-1:-1:-1;;;27307:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27394:16:0;;27386:64;;;;-1:-1:-1;;;27386:64:0;;;;;;;:::i;:::-;27478:1;27469:6;:10;27461:52;;;;-1:-1:-1;;;27461:52:0;;18857:2:1;27461:52:0;;;18839:21:1;18896:2;18876:18;;;18869:30;18935:31;18915:18;;;18908:59;18984:18;;27461:52:0;18655:353:1;27461:52:0;27531:13;;;;;;;27526:329;;-1:-1:-1;;;;;27587:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27616:23:0;;;;;;:19;:23;;;;;;;;27587:52;27561:136;;;;-1:-1:-1;;;27561:136:0;;19215:2:1;27561:136:0;;;19197:21:1;19254:2;19234:18;;;19227:30;-1:-1:-1;;;19273:18:1;;;19266:52;19335:18;;27561:136:0;19013:346:1;27561:136:0;27526:329;;;-1:-1:-1;;;;;27757:20:0;;;;;;:14;:20;;;;;;;;27756:21;27730:113;;;;-1:-1:-1;;;27730:113:0;;19566:2:1;27730:113:0;;;19548:21:1;19605:2;19585:18;;;19578:30;19644:32;19624:18;;;19617:60;19694:18;;27730:113:0;19364:354:1;27730:113:0;27871:14;;;;27867:2060;;;-1:-1:-1;;;;;27906:21:0;;27920:6;27906:21;;;;:68;;-1:-1:-1;;;;;;27949:25:0;;;;;;:19;:25;;;;;;;;27948:26;27906:68;:113;;;;-1:-1:-1;;;;;;27996:23:0;;;;;;:19;:23;;;;;;;;27995:24;27906:113;27902:2014;;;28058:20;;;;28054:692;;;28121:9;;-1:-1:-1;;;;;28107:24:0;;;28121:9;;28107:24;;;;:49;;-1:-1:-1;28149:6:0;;-1:-1:-1;;;;;28135:21:0;;;28149:6;;28135:21;;28107:49;28103:624;;;28298:16;28313:1;28298:12;:16;:::i;:::-;28252:9;28223:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;28419:16:0;28434:1;28419:12;:16;:::i;:::-;-1:-1:-1;;;;;28351:32:0;;;;;;:28;:32;;;;;;:84;28223:212;28185:363;;;;-1:-1:-1;;;28185:363:0;;20058:2:1;28185:363:0;;;20040:21:1;20097:2;20077:18;;;20070:30;20136:34;20116:18;;;20109:62;-1:-1:-1;;;20187:18:1;;;20180:51;20248:19;;28185:363:0;19856:417:1;28185:363:0;28604:9;28575:39;;;;:28;:39;;;;;;28617:12;28575:54;;;;-1:-1:-1;;;;;28656:32:0;;;;;;:47;28103:624;-1:-1:-1;;;;;28820:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;28877:35:0;;;;;;:31;:35;;;;;;;;28876:36;28820:92;28794:1107;;;28999:12;;28989:6;:22;;28955:148;;;;-1:-1:-1;;;28955:148:0;;20480:2:1;28955:148:0;;;20462:21:1;20519:2;20499:18;;;20492:30;20558:34;20538:18;;;20531:62;-1:-1:-1;;;20609:18:1;;;20602:38;20657:19;;28955:148:0;20278:404:1;28955:148:0;29186:9;;29169:13;29179:2;29169:9;:13::i;:::-;29160:22;;:6;:22;:::i;:::-;:35;;29126:140;;;;-1:-1:-1;;;29126:140:0;;20889:2:1;29126:140:0;;;20871:21:1;20928:2;20908:18;;;20901:30;-1:-1:-1;;;20947:18:1;;;20940:49;21006:18;;29126:140:0;20687:343:1;29126:140:0;28794:1107;;;-1:-1:-1;;;;;29364:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;29419:37:0;;;;;;:31;:37;;;;;;;;29418:38;29364:92;29338:563;;;29543:13;;29533:6;:23;;29499:151;;;;-1:-1:-1;;;29499:151:0;;21237:2:1;29499:151:0;;;21219:21:1;21276:2;21256:18;;;21249:30;21315:34;21295:18;;;21288:62;-1:-1:-1;;;21366:18:1;;;21359:40;21416:19;;29499:151:0;21035:406:1;29338:563:0;-1:-1:-1;;;;;29681:35:0;;;;;;:31;:35;;;;;;;;29676:225;;29801:9;;29784:13;29794:2;29784:9;:13::i;:::-;29775:22;;:6;:22;:::i;:::-;:35;;29741:140;;;;-1:-1:-1;;;29741:140:0;;20889:2:1;29741:140:0;;;20871:21:1;20928:2;20908:18;;;20901:30;-1:-1:-1;;;20947:18:1;;;20940:49;21006:18;;29741:140:0;20687:343:1;29741:140:0;29939:28;29970:24;29988:4;29970:9;:24::i;:::-;30046:18;;29939:55;;-1:-1:-1;30022:42:0;;;;;;;30095:22;;-1:-1:-1;30106:11:0;;;;;;;30095:22;:35;;;;-1:-1:-1;30122:8:0;;-1:-1:-1;;;30122:8:0;;;;30121:9;30095:35;:68;;;;-1:-1:-1;;;;;;30134:29:0;;;;;;:25;:29;;;;;;;;30095:68;30077:196;;;30190:8;:15;;-1:-1:-1;;;;30190:15:0;-1:-1:-1;;;30190:15:0;;;30220:10;:8;:10::i;:::-;30245:8;:16;;-1:-1:-1;;;;30245:16:0;;;30077:196;-1:-1:-1;;;;;30404:25:0;;30285:12;30404:25;;;:19;:25;;;;;;30300:4;;30404:25;;;:52;;-1:-1:-1;;;;;;30433:23:0;;;;;;:19;:23;;;;;;;;30404:52;30400:100;;;-1:-1:-1;30483:5:0;30400:100;30512:12;30617:7;30613:873;;;-1:-1:-1;;;;;30673:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;30722:1;30706:13;;:17;30673:50;30669:668;;;30778:3;30761:13;;30752:6;:22;;;;:::i;:::-;30751:30;;;;:::i;:::-;30744:37;;30850:13;;30830:16;;30823:4;:23;;;;:::i;:::-;30822:41;;;;:::i;:::-;30800:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30976:13:0;;30934:17;;30927:24;;:4;:24;:::i;:::-;30926:63;;;;:::i;:::-;30882:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;30669:668:0;;-1:-1:-1;30669:668:0;;-1:-1:-1;;;;;31051:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;31101:1;31086:12;;:16;31051:51;31047:290;;;31156:3;31140:12;;31131:6;:21;;;;:::i;:::-;31130:29;;;;:::i;:::-;31123:36;;31227:12;;31208:15;;31201:4;:22;;;;:::i;:::-;31200:39;;;;:::i;:::-;31178:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;31309:12:0;;31289:16;;31282:23;;:4;:23;:::i;:::-;31281:40;;;;:::i;:::-;31258:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;31047:290:0;31357:8;;31353:91;;31386:42;31402:4;31416;31423;31386:15;:42::i;:::-;31460:14;31470:4;31460:14;;:::i;:::-;;;30613:873;31498:33;31514:4;31520:2;31524:6;31498:15;:33::i;:::-;27296:4243;;;;27183:4356;;;:::o;11611:105::-;11678:30;11689:4;323:10;11678;:30::i;13280:238::-;13364:22;13372:4;13378:7;13364;:22::i;:::-;13359:152;;13403:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13403:29:0;;;;;;;;;:36;;-1:-1:-1;;13403:36:0;13435:4;13403:36;;;13486:12;323:10;;243:98;13486:12;-1:-1:-1;;;;;13459:40:0;13477:7;-1:-1:-1;;;;;13459:40:0;13471:4;13459:40;;;;;;;;;;13280:238;;:::o;13526:239::-;13610:22;13618:4;13624:7;13610;:22::i;:::-;13606:152;;;13681:5;13649:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13649:29:0;;;;;;;;;;:37;;-1:-1:-1;;13649:37:0;;;13706:40;323:10;;13649:12;;13706:40;;13681:5;13706:40;13526:239;;:::o;25081:232::-;-1:-1:-1;;;;;25194:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;25194:52:0;;;;;;;;;;25262:43;;22009:51:1;;;22076:18;;;22069:50;25262:43:0;;21982:18:1;25262:43:0;;;;;;;25081:232;;:::o;25667:236::-;-1:-1:-1;;;;;25750:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25750:39:0;;;;;;;25800;25750:31;:39;25800:26;:39::i;32643:1269::-;32682:23;32708:24;32726:4;32708:9;:24::i;:::-;32682:50;;32743:25;32792:19;;32771:18;;:40;;;;:::i;:::-;32743:68;-1:-1:-1;32828:20:0;;;:46;;-1:-1:-1;32852:22:0;;32828:46;32824:85;;;32891:7;;32643:1269::o;32824:85::-;32943:18;;:23;;32964:2;32943:23;:::i;:::-;32925:15;:41;32921:115;;;33001:18;;:23;;33022:2;33001:23;:::i;:::-;32983:41;;32921:115;33048:12;33122:23;33235:1;33202:17;33167:18;;33149:15;:36;;;;:::i;:::-;33148:71;;;;:::i;:::-;:88;;;;:::i;:::-;33122:114;-1:-1:-1;33249:51:0;33266:33;33122:114;33266:15;:33;:::i;:::-;33249:16;:51::i;:::-;33514:18;;33334:21;;;;33313:18;;33514:22;;33535:1;;33514:22;:::i;:::-;33493:44;;:17;:44;:::i;:::-;33456:19;;33443:32;;:10;:32;:::i;:::-;33442:96;;;;:::i;:::-;33415:123;-1:-1:-1;33551:35:0;33415:123;33551:35;;:::i;:::-;33620:1;33599:18;:22;;;33632:19;:23;33551:35;-1:-1:-1;33672:19:0;;;;;:42;;;33713:1;33695:15;:19;33672:42;33668:121;;;33731:46;33744:15;33761;33731:12;:46::i;:::-;33823:17;;33815:89;;-1:-1:-1;;;;;33823:17:0;;;;33868:21;;33815:89;;;;33868:21;33823:17;33815:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;32643:1269:0:o;17716:651::-;-1:-1:-1;;;;;17856:20:0;;17848:70;;;;-1:-1:-1;;;17848:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17937:23:0;;17929:71;;;;-1:-1:-1;;;17929:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18037:17:0;;18013:21;18037:17;;;;;;;;;;;18087:23;;;;18065:111;;;;-1:-1:-1;;;18065:111:0;;22332:2:1;18065:111:0;;;22314:21:1;22371:2;22351:18;;;22344:30;22410:34;22390:18;;;22383:62;-1:-1:-1;;;22461:18:1;;;22454:36;22507:19;;18065:111:0;22130:402:1;18065:111:0;-1:-1:-1;;;;;18212:17:0;;;:9;:17;;;;;;;;;;;18232:22;;;18212:42;;18276:20;;;;;;;;:30;;18248:6;;18212:9;18276:30;;18248:6;;18276:30;:::i;:::-;;;;;;;;18341:9;-1:-1:-1;;;;;18324:35:0;18333:6;-1:-1:-1;;;;;18324:35:0;;18352:6;18324:35;;;;2234:25:1;;2222:2;2207:18;;2088:177;18324:35:0;;;;;;;;17837:530;17716:651;;;:::o;11724:492::-;11813:22;11821:4;11827:7;11813;:22::i;:::-;11808:401;;12001:28;12021:7;12001:19;:28::i;:::-;12102:38;12130:4;12137:2;12102:19;:38::i;:::-;11906:257;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11906:257:0;;;;;;;;;;-1:-1:-1;;;11852:345:0;;;;;;;:::i;31547:571::-;31697:16;;;31711:1;31697:16;;;;;;;;31673:21;;31697:16;;;;;;;;;;-1:-1:-1;31697:16:0;31673:40;;31742:4;31724;31729:1;31724:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31724:23:0;;;:7;;;;;;;;;;:23;;;;31768:9;;:16;;;-1:-1:-1;;;31768:16:0;;;;:9;;;;;:14;;:16;;;;;31724:7;;31768:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31758:4;31763:1;31758:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31758:26:0;;;:7;;;;;;;;;:26;31829:9;;31797:56;;31814:4;;31829:9;31841:11;31797:8;:56::i;:::-;31892:9;;:218;;-1:-1:-1;;;31892:218:0;;-1:-1:-1;;;;;31892:9:0;;;;:60;;:218;;31967:11;;31892:9;;32037:4;;32064;;32084:15;;31892:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31602:516;31547:571;:::o;32126:509::-;32306:9;;32274:56;;32291:4;;-1:-1:-1;;;;;32306:9:0;32318:11;32274:8;:56::i;:::-;32373:9;;:254;;-1:-1:-1;;;32373:254:0;;-1:-1:-1;;;;;32373:9:0;;;;:25;;32406:9;;32373:254;;32439:4;;32459:11;;32373:9;;;;32579:6;;32601:15;;32373:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32126:509;;:::o;10558:151::-;10616:13;10649:52;-1:-1:-1;;;;;10661:22:0;;9095:2;10103:447;10178:13;10204:19;10236:10;10240:6;10236:1;:10;:::i;:::-;:14;;10249:1;10236:14;:::i;:::-;10226:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10226:25:0;;10204:47;;-1:-1:-1;;;10262:6:0;10269:1;10262:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10262:15:0;;;;;;;;;-1:-1:-1;;;10288:6:0;10295:1;10288:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10288:15:0;;;;;;;;-1:-1:-1;10319:9:0;10331:10;10335:6;10331:1;:10;:::i;:::-;:14;;10344:1;10331:14;:::i;:::-;10319:26;;10314:131;10351:1;10347;:5;10314:131;;;-1:-1:-1;;;10395:5:0;10403:3;10395:11;10386:21;;;;;;;:::i;:::-;;;;10374:6;10381:1;10374:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;10374:33:0;;;;;;;;-1:-1:-1;10432:1:0;10422:11;;;;;10354:3;;;:::i;:::-;;;10314:131;;;-1:-1:-1;10463:10:0;;10455:55;;;;-1:-1:-1;;;10455:55:0;;24814:2:1;10455:55:0;;;24796:21:1;;;24833:18;;;24826:30;24892:34;24872:18;;;24865:62;24944:18;;10455:55:0;24612:356:1;10455:55:0;10535:6;10103:447;-1:-1:-1;;;10103:447:0:o;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;497:250;582:1;592:113;606:6;603:1;600:13;592:113;;;682:11;;;676:18;663:11;;;656:39;628:2;621:10;592:113;;;-1:-1:-1;;739:1:1;721:16;;714:27;497:250::o;752:396::-;901:2;890:9;883:21;864:4;933:6;927:13;976:6;971:2;960:9;956:18;949:34;992:79;1064:6;1059:2;1048:9;1044:18;1039:2;1031:6;1027:15;992:79;:::i;:::-;1132:2;1111:15;-1:-1:-1;;1107:29:1;1092:45;;;;1139:2;1088:54;;752:396;-1:-1:-1;;752:396:1:o;1380:131::-;-1:-1:-1;;;;;1455:31:1;;1445:42;;1435:70;;1501:1;1498;1491:12;1516:315;1584:6;1592;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;1700:9;1687:23;1719:31;1744:5;1719:31;:::i;:::-;1769:5;1821:2;1806:18;;;;1793:32;;-1:-1:-1;;;1516:315:1:o;1836:247::-;1895:6;1948:2;1936:9;1927:7;1923:23;1919:32;1916:52;;;1964:1;1961;1954:12;1916:52;2003:9;1990:23;2022:31;2047:5;2022:31;:::i;2270:456::-;2347:6;2355;2363;2416:2;2404:9;2395:7;2391:23;2387:32;2384:52;;;2432:1;2429;2422:12;2384:52;2471:9;2458:23;2490:31;2515:5;2490:31;:::i;:::-;2540:5;-1:-1:-1;2597:2:1;2582:18;;2569:32;2610:33;2569:32;2610:33;:::i;:::-;2270:456;;2662:7;;-1:-1:-1;;;2716:2:1;2701:18;;;;2688:32;;2270:456::o;2731:180::-;2790:6;2843:2;2831:9;2822:7;2818:23;2814:32;2811:52;;;2859:1;2856;2849:12;2811:52;-1:-1:-1;2882:23:1;;2731:180;-1:-1:-1;2731:180:1:o;3098:315::-;3166:6;3174;3227:2;3215:9;3206:7;3202:23;3198:32;3195:52;;;3243:1;3240;3233:12;3195:52;3279:9;3266:23;3256:33;;3339:2;3328:9;3324:18;3311:32;3352:31;3377:5;3352:31;:::i;:::-;3402:5;3392:15;;;3098:315;;;;;:::o;3815:615::-;3901:6;3909;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;4018:9;4005:23;4047:18;4088:2;4080:6;4077:14;4074:34;;;4104:1;4101;4094:12;4074:34;4142:6;4131:9;4127:22;4117:32;;4187:7;4180:4;4176:2;4172:13;4168:27;4158:55;;4209:1;4206;4199:12;4158:55;4249:2;4236:16;4275:2;4267:6;4264:14;4261:34;;;4291:1;4288;4281:12;4261:34;4344:7;4339:2;4329:6;4326:1;4322:14;4318:2;4314:23;4310:32;4307:45;4304:65;;;4365:1;4362;4355:12;4304:65;4396:2;4388:11;;;;;4418:6;;-1:-1:-1;3815:615:1;;-1:-1:-1;;;;3815:615:1:o;4435:118::-;4521:5;4514:13;4507:21;4500:5;4497:32;4487:60;;4543:1;4540;4533:12;4558:382;4623:6;4631;4684:2;4672:9;4663:7;4659:23;4655:32;4652:52;;;4700:1;4697;4690:12;4652:52;4739:9;4726:23;4758:31;4783:5;4758:31;:::i;:::-;4808:5;-1:-1:-1;4865:2:1;4850:18;;4837:32;4878:30;4837:32;4878:30;:::i;4945:388::-;5013:6;5021;5074:2;5062:9;5053:7;5049:23;5045:32;5042:52;;;5090:1;5087;5080:12;5042:52;5129:9;5116:23;5148:31;5173:5;5148:31;:::i;:::-;5198:5;-1:-1:-1;5255:2:1;5240:18;;5227:32;5268:33;5227:32;5268:33;:::i;5338:248::-;5406:6;5414;5467:2;5455:9;5446:7;5442:23;5438:32;5435:52;;;5483:1;5480;5473:12;5435:52;-1:-1:-1;;5506:23:1;;;5576:2;5561:18;;;5548:32;;-1:-1:-1;5338:248:1:o;5591:380::-;5670:1;5666:12;;;;5713;;;5734:61;;5788:4;5780:6;5776:17;5766:27;;5734:61;5841:2;5833:6;5830:14;5810:18;5807:38;5804:161;;5887:10;5882:3;5878:20;5875:1;5868:31;5922:4;5919:1;5912:15;5950:4;5947:1;5940:15;5804:161;;5591:380;;;:::o;6801:127::-;6862:10;6857:3;6853:20;6850:1;6843:31;6893:4;6890:1;6883:15;6917:4;6914:1;6907:15;6933:125;6998:9;;;7019:10;;;7016:36;;;7032:18;;:::i;7063:337::-;7265:2;7247:21;;;7304:2;7284:18;;;7277:30;-1:-1:-1;;;7338:2:1;7323:18;;7316:43;7391:2;7376:18;;7063:337::o;8156:344::-;8358:2;8340:21;;;8397:2;8377:18;;;8370:30;-1:-1:-1;;;8431:2:1;8416:18;;8409:50;8491:2;8476:18;;8156:344::o;8505:127::-;8566:10;8561:3;8557:20;8554:1;8547:31;8597:4;8594:1;8587:15;8621:4;8618:1;8611:15;8637:135;8676:3;8697:17;;;8694:43;;8717:18;;:::i;:::-;-1:-1:-1;8764:1:1;8753:13;;8637:135::o;8987:407::-;9189:2;9171:21;;;9228:2;9208:18;;;9201:30;9267:34;9262:2;9247:18;;9240:62;-1:-1:-1;;;9333:2:1;9318:18;;9311:41;9384:3;9369:19;;8987:407::o;10938:184::-;11008:6;11061:2;11049:9;11040:7;11036:23;11032:32;11029:52;;;11077:1;11074;11067:12;11029:52;-1:-1:-1;11100:16:1;;10938:184;-1:-1:-1;10938:184:1:o;11406:245::-;11473:6;11526:2;11514:9;11505:7;11501:23;11497:32;11494:52;;;11542:1;11539;11532:12;11494:52;11574:9;11568:16;11593:28;11615:5;11593:28;:::i;12769:251::-;12839:6;12892:2;12880:9;12871:7;12867:23;12863:32;12860:52;;;12908:1;12905;12898:12;12860:52;12940:9;12934:16;12959:31;12984:5;12959:31;:::i;14145:607::-;-1:-1:-1;;;;;14504:15:1;;;14486:34;;14551:2;14536:18;;14529:34;;;;14594:2;14579:18;;14572:34;;;;14637:2;14622:18;;14615:34;;;;14686:15;;;14680:3;14665:19;;14658:44;14466:3;14718:19;;14711:35;;;;14435:3;14420:19;;14145:607::o;14757:306::-;14845:6;14853;14861;14914:2;14902:9;14893:7;14889:23;14885:32;14882:52;;;14930:1;14927;14920:12;14882:52;14959:9;14953:16;14943:26;;15009:2;14998:9;14994:18;14988:25;14978:35;;15053:2;15042:9;15038:18;15032:25;15022:35;;14757:306;;;;;:::o;17845:401::-;18047:2;18029:21;;;18086:2;18066:18;;;18059:30;18125:34;18120:2;18105:18;;18098:62;-1:-1:-1;;;18191:2:1;18176:18;;18169:35;18236:3;18221:19;;17845:401::o;18251:399::-;18453:2;18435:21;;;18492:2;18472:18;;;18465:30;18531:34;18526:2;18511:18;;18504:62;-1:-1:-1;;;18597:2:1;18582:18;;18575:33;18640:3;18625:19;;18251:399::o;19723:128::-;19790:9;;;19811:11;;;19808:37;;;19825:18;;:::i;21446:168::-;21519:9;;;21550;;21567:15;;;21561:22;;21547:37;21537:71;;21588:18;;:::i;21619:217::-;21659:1;21685;21675:132;;21729:10;21724:3;21720:20;21717:1;21710:31;21764:4;21761:1;21754:15;21792:4;21789:1;21782:15;21675:132;-1:-1:-1;21821:9:1;;21619:217::o;22537:812::-;22948:25;22943:3;22936:38;22918:3;23003:6;22997:13;23019:75;23087:6;23082:2;23077:3;23073:12;23066:4;23058:6;23054:17;23019:75;:::i;:::-;-1:-1:-1;;;23153:2:1;23113:16;;;23145:11;;;23138:40;23203:13;;23225:76;23203:13;23287:2;23279:11;;23272:4;23260:17;;23225:76;:::i;:::-;23321:17;23340:2;23317:26;;22537:812;-1:-1:-1;;;;22537:812:1:o;23354:127::-;23415:10;23410:3;23406:20;23403:1;23396:31;23446:4;23443:1;23436:15;23470:4;23467:1;23460:15;23486:980;23748:4;23796:3;23785:9;23781:19;23827:6;23816:9;23809:25;23853:2;23891:6;23886:2;23875:9;23871:18;23864:34;23934:3;23929:2;23918:9;23914:18;23907:31;23958:6;23993;23987:13;24024:6;24016;24009:22;24062:3;24051:9;24047:19;24040:26;;24101:2;24093:6;24089:15;24075:29;;24122:1;24132:195;24146:6;24143:1;24140:13;24132:195;;;24211:13;;-1:-1:-1;;;;;24207:39:1;24195:52;;24302:15;;;;24267:12;;;;24243:1;24161:9;24132:195;;;-1:-1:-1;;;;;;;24383:32:1;;;;24378:2;24363:18;;24356:60;-1:-1:-1;;;24447:3:1;24432:19;24425:35;24344:3;23486:980;-1:-1:-1;;;23486:980:1:o;24471:136::-;24510:3;24538:5;24528:39;;24547:18;;:::i;:::-;-1:-1:-1;;;24583:18:1;;24471:136::o

Swarm Source

ipfs://0504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.