ETH Price: $2,506.12 (+0.17%)

Contract

0x4a9aaB850fD7fc1C9dD75BFc3344677524138B01
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve207288702024-09-11 17:30:2351 days ago1726075823IN
0x4a9aaB85...524138B01
0 ETH0.000065622.46404267
Approve207288692024-09-11 17:30:1151 days ago1726075811IN
0x4a9aaB85...524138B01
0 ETH0.000113992.44980142
Approve201250972024-06-19 10:09:47135 days ago1718791787IN
0x4a9aaB85...524138B01
0 ETH0.000153293.29446783
Approve200932852024-06-14 23:19:11140 days ago1718407151IN
0x4a9aaB85...524138B01
0 ETH0.000214764.61541495
Approve200922282024-06-14 19:46:23140 days ago1718394383IN
0x4a9aaB85...524138B01
0 ETH0.0005475211.76657567
Transfer200919122024-06-14 18:42:59140 days ago1718390579IN
0x4a9aaB85...524138B01
0 ETH0.0007334210.40831553
Approve200911282024-06-14 16:05:59140 days ago1718381159IN
0x4a9aaB85...524138B01
0 ETH0.000620213.32857749
Approve200909982024-06-14 15:39:35140 days ago1718379575IN
0x4a9aaB85...524138B01
0 ETH0.0005733512.32179211
Approve200906842024-06-14 14:36:35140 days ago1718375795IN
0x4a9aaB85...524138B01
0 ETH0.0010290622.11525418
Approve200900572024-06-14 12:30:47140 days ago1718368247IN
0x4a9aaB85...524138B01
0 ETH0.000372648.0083681
Approve200877662024-06-14 4:49:47141 days ago1718340587IN
0x4a9aaB85...524138B01
0 ETH0.000411048.8336304
Approve200857842024-06-13 22:09:47141 days ago1718316587IN
0x4a9aaB85...524138B01
0 ETH0.000409718.80496143
Approve200854332024-06-13 20:58:59141 days ago1718312339IN
0x4a9aaB85...524138B01
0 ETH0.000420699.04094231
Approve200853292024-06-13 20:37:59141 days ago1718311079IN
0x4a9aaB85...524138B01
0 ETH0.0007513416.12595295
Approve200852922024-06-13 20:30:35141 days ago1718310635IN
0x4a9aaB85...524138B01
0 ETH0.0006107513.12546465
Approve200852852024-06-13 20:29:11141 days ago1718310551IN
0x4a9aaB85...524138B01
0 ETH0.0005225911.2164186
Approve200851852024-06-13 20:09:11141 days ago1718309351IN
0x4a9aaB85...524138B01
0 ETH0.0008106317.39869119
Approve200851672024-06-13 20:05:35141 days ago1718309135IN
0x4a9aaB85...524138B01
0 ETH0.0005515311.83755725
Approve200851032024-06-13 19:52:47141 days ago1718308367IN
0x4a9aaB85...524138B01
0 ETH0.0007475516.04476875
Update Sell Tax200849672024-06-13 19:24:59141 days ago1718306699IN
0x4a9aaB85...524138B01
0 ETH0.0003613110.64759434
Approve200849422024-06-13 19:19:59141 days ago1718306399IN
0x4a9aaB85...524138B01
0 ETH0.000424699.17418986
Update Sell Tax200849202024-06-13 19:15:35141 days ago1718306135IN
0x4a9aaB85...524138B01
0 ETH0.000336289.91000645
Approve200848802024-06-13 19:07:35141 days ago1718305655IN
0x4a9aaB85...524138B01
0 ETH0.0006777814.54731149
Approve200848612024-06-13 19:03:47141 days ago1718305427IN
0x4a9aaB85...524138B01
0 ETH0.000451779.70887921
Transfer200848612024-06-13 19:03:47141 days ago1718305427IN
0x4a9aaB85...524138B01
0 ETH0.0007525510.32080665
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
201251002024-06-19 10:10:23135 days ago1718791823
0x4a9aaB85...524138B01
0.00531283 ETH
201251002024-06-19 10:10:23135 days ago1718791823
0x4a9aaB85...524138B01
0.00531283 ETH
200980742024-06-15 15:25:47139 days ago1718465147
0x4a9aaB85...524138B01
0.00624667 ETH
200980742024-06-15 15:25:47139 days ago1718465147
0x4a9aaB85...524138B01
0.00624667 ETH
200932862024-06-14 23:19:23140 days ago1718407163
0x4a9aaB85...524138B01
0.00520687 ETH
200932862024-06-14 23:19:23140 days ago1718407163
0x4a9aaB85...524138B01
0.00520687 ETH
200910012024-06-14 15:40:11140 days ago1718379611
0x4a9aaB85...524138B01
0.00703679 ETH
200910012024-06-14 15:40:11140 days ago1718379611
0x4a9aaB85...524138B01
0.00703679 ETH
200906882024-06-14 14:37:23140 days ago1718375843
0x4a9aaB85...524138B01
0.05384731 ETH
200906882024-06-14 14:37:23140 days ago1718375843
0x4a9aaB85...524138B01
0.05384731 ETH
200906402024-06-14 14:27:35140 days ago1718375255
0x4a9aaB85...524138B01
0.09707294 ETH
200906402024-06-14 14:27:35140 days ago1718375255
0x4a9aaB85...524138B01
0.09707294 ETH
200900602024-06-14 12:31:23140 days ago1718368283
0x4a9aaB85...524138B01
0.10611508 ETH
200900602024-06-14 12:31:23140 days ago1718368283
0x4a9aaB85...524138B01
0.10611508 ETH
200891762024-06-14 9:34:11140 days ago1718357651
0x4a9aaB85...524138B01
0.11431884 ETH
200891762024-06-14 9:34:11140 days ago1718357651
0x4a9aaB85...524138B01
0.11431884 ETH
200870722024-06-14 2:30:23141 days ago1718332223
0x4a9aaB85...524138B01
0.12416359 ETH
200870722024-06-14 2:30:23141 days ago1718332223
0x4a9aaB85...524138B01
0.12416359 ETH
200857892024-06-13 22:10:47141 days ago1718316647
0x4a9aaB85...524138B01
0.13446779 ETH
200857892024-06-13 22:10:47141 days ago1718316647
0x4a9aaB85...524138B01
0.13446779 ETH
200855582024-06-13 21:23:59141 days ago1718313839
0x4a9aaB85...524138B01
0.14780637 ETH
200855582024-06-13 21:23:59141 days ago1718313839
0x4a9aaB85...524138B01
0.14780637 ETH
200854422024-06-13 21:00:47141 days ago1718312447
0x4a9aaB85...524138B01
0.1664194 ETH
200854422024-06-13 21:00:47141 days ago1718312447
0x4a9aaB85...524138B01
0.1664194 ETH
200853842024-06-13 20:48:59141 days ago1718311739
0x4a9aaB85...524138B01
0.19428567 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EBI

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-06-12
*/

// SPDX-License-Identifier: MIT

/************************************** 
  
   X: https://x.com/EuroBetInu
   App: https://app.eurobetinu.com
   Telegram: https://t.me/EuroBetInu
   Website: https://eurobetinu.com/

**************************************/

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 EBI 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;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;

    uint256 public tokensForOperations;

    bool public oncePerBlockEnabled = true;
    uint256 public lastSwapBlock; 
    uint256 public maxSwapsPerBlock = 1; 
    uint256 public swapsThisBlock = 0;   

    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("Euro Bet Inu", "EBI") {
        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 = 1 * 1e12 * 1e18; 

        buyOperationsFee = 20;
        buyTotalFees = buyOperationsFee;

        sellOperationsFee = 50;
        sellTotalFees = sellOperationsFee;        

        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);
    }    

    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
    ) external onlyAuthenticators {
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyOperationsFee;
        require(buyTotalFees <= 12, "Must keep fees at 12% or less");
    }

    function updateSellTax(
        uint256 _operationsFee
    ) external onlyAuthenticators {
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellOperationsFee;
        require(sellTotalFees <= 15, "Must keep fees at 15% or less");
    }    

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyManager {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 100,
            "Swap amount cannot be higher than 1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }    

    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]
            ) {
                //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(false);
            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;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                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 swapBack(bool all) private {

        if (block.number != lastSwapBlock) {
            lastSwapBlock = block.number;
            swapsThisBlock = 0;
        }

        if (oncePerBlockEnabled && swapsThisBlock >= maxSwapsPerBlock) {
            return;
        }        

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForOperations;

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

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

        swapTokensForEth(contractBalance);

        tokensForOperations = 0;

        swapsThisBlock += 1;    

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

        require(success, "Transfer to operations address failed");
    }

    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(!markedAsSniper[wallet], "Wallet is already flagged.");
        markedAsSniper[wallet] = true;
    }

    function massFlagSnipers(address[] calldata wallets)
        external onlyAuthenticators
    { 
        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 recoverETH() external onlyManager {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }      

    function prepLaunch() 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();
    }      

    function setSwapRestrictions(bool _enabled, uint256 _maxSwaps) external onlyAuthenticators {
        require(_maxSwaps > 0, "Max swaps per block must be greater than 0");
        oncePerBlockEnabled = _enabled;
        maxSwapsPerBlock = _maxSwaps;
    }

    function forceSwapBack(bool all) external onlyAuthenticators {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "Can only swap when token amount is at or higher than restriction"
        );
        swapping = true;
        swapBack(all);
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }    
}

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":"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":"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":[{"internalType":"bool","name":"all","type":"bool"}],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","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":"lastSwapBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"maxSwapsPerBlock","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":"oncePerBlockEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverETH","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":"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":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_maxSwaps","type":"uint256"}],"name":"setSwapRestrictions","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":"swapsThisBlock","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":"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":[{"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"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600d819055600f805462ffffff191660019081179091556015805460ff191682179055601755601855600c60809081526b4575726f2042657420496e7560a01b60a052610100604052600360c08181526245424960e81b60e0529062000068838262000850565b50600462000077828262000850565b503391506200009890506000805160206200438f8339815191528262000222565b620000c2600080516020620043af8339815191526000805160206200438f83398151915262000232565b620000dd600080516020620043af833981519152826200027d565b60146011819055601055603260138190556012556c0c9f2c9cd04674edea4000000060646200010e82600162000932565b6200011a91906200094c565b60065560646200012c82600162000932565b6200013891906200094c565b60075560646200014a82600162000932565b6200015691906200094c565b6008556127106200016982600562000932565b6200017591906200094c565b600b55600c80546001600160a01b0319163317905562000197826001620002ab565b620001a4306001620002ab565b620001b361dead6001620002ab565b600c54620001cc906001600160a01b03166001620002ab565b620001d98260016200030e565b620001e63060016200030e565b620001f561dead60016200030e565b600c546200020e906001600160a01b031660016200030e565b6200021a3082620003ca565b505062000a89565b6200022e8282620004af565b5050565b600082815260056020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152600560205260409020600101546200029a8162000539565b620002a68383620004af565b505050565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b620003296000805160206200438f8339815191523362000548565b6200036b5760405162461bcd60e51b815260206004820152600d60248201526c2737ba10309036b0b730b3b2b960991b60448201526064015b60405180910390fd5b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004225760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000362565b80600260008282546200043691906200096f565b90915550506001600160a01b03821660009081526020819052604081208054839290620004659084906200096f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620004bb828262000548565b6200022e5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620004f53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b62000545813362000575565b50565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b62000581828262000548565b6200022e576200059181620005d9565b6200059e836020620005ec565b604051602001620005b1929190620009ab565b60408051601f198184030181529082905262461bcd60e51b8252620003629160040162000a24565b60606200056f6001600160a01b03831660145b60606000620005fd83600262000932565b6200060a9060026200096f565b6001600160401b03811115620006245762000624620007ac565b6040519080825280601f01601f1916602001820160405280156200064f576020820181803683370190505b509050600360fc1b816000815181106200066d576200066d62000a59565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106200069f576200069f62000a59565b60200101906001600160f81b031916908160001a9053506000620006c584600262000932565b620006d29060016200096f565b90505b600181111562000754576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106200070a576200070a62000a59565b1a60f81b82828151811062000723576200072362000a59565b60200101906001600160f81b031916908160001a90535060049490941c936200074c8162000a6f565b9050620006d5565b508315620007a55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000362565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d757607f821691505b602082108103620007f857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002a657600081815260208120601f850160051c81016020861015620008275750805b601f850160051c820191505b81811015620008485782815560010162000833565b505050505050565b81516001600160401b038111156200086c576200086c620007ac565b62000884816200087d8454620007c2565b84620007fe565b602080601f831160018114620008bc5760008415620008a35750858301515b600019600386901b1c1916600185901b17855562000848565b600085815260208120601f198616915b82811015620008ed57888601518255948401946001909101908401620008cc565b50858210156200090c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200056f576200056f6200091c565b6000826200096a57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200056f576200056f6200091c565b60005b83811015620009a257818101518382015260200162000988565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351620009e581601785016020880162000985565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000a1881602884016020880162000985565b01602801949350505050565b602081526000825180602084015262000a4581604085016020870162000985565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60008162000a815762000a816200091c565b506000190190565b6138f68062000a996000396000f3fe6080604052600436106103c75760003560e01c80637571336a116101f2578063c02466681161010d578063dd62ed3e116100a0578063ee40166e1161006f578063ee40166e14610b36578063f8b45b0514610b4c578063fb002c9714610b62578063ff5d380714610b7857600080fd5b8063dd62ed3e14610a98578063e2f4560514610ade578063ea4cfe1214610af4578063ec87621c14610b1457600080fd5b8063d257b34f116100dc578063d257b34f14610a22578063d547741f14610a42578063d85ba06314610a62578063d86c9fec14610a7857600080fd5b8063c0246668146109a2578063c44a24dd146109c2578063c4c6571b146109f2578063cef3f88614610a0857600080fd5b80639a7a23d611610185578063a9059cbb11610154578063a9059cbb14610911578063b62496f514610931578063b65c5e8d14610961578063bbc0c7421461098357600080fd5b80639a7a23d6146108a7578063a217fddf146108c7578063a28e86d3146108dc578063a457c2d7146108f157600080fd5b806391d14854116101c157806391d148541461083c57806395d89b411461085c57806396792669146108715780639699a82d1461088757600080fd5b80637571336a146107d15780638366e79a146107f157806388e765ff146108115780638a8c523c1461082757600080fd5b8063436d3340116102e25780635a139dd4116102755780636ddd1713116102445780636ddd17131461075c5780636e55c13f1461077c57806370a082311461079c578063751039fc146107bc57600080fd5b80635a139dd4146106fa57806366d602ae14610710578063672fc7be146107265780636a486a8e1461074657600080fd5b80634be813e6116102b15780634be813e61461068e5780634f77f6c0146106ae57806357bd8bb3146106c4578063591f09eb146106e457600080fd5b8063436d334014610614578063452ed4f114610634578063499b8394146106545780634a62bb651461067457600080fd5b80631b1b6f741161035a578063313ce56711610329578063313ce5671461059857806336568abe146105b457806339509351146105d4578063410b2724146105f457600080fd5b80631b1b6f741461050857806323b872dd14610528578063248a9ca3146105485780632f2ff15d1461057857600080fd5b8063095ea7b311610396578063095ea7b31461047957806310d5de531461049957806312185a39146104c957806318160ddd146104e957600080fd5b806301ffc9a7146103d35780630614117a1461040857806306fdde031461041f5780630758d9241461044157600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132ae565b610b8d565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610bc4565b005b34801561042b57600080fd5b50610434610c4e565b6040516103ff91906132fc565b34801561044d57600080fd5b50600954610461906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561048557600080fd5b506103f3610494366004613344565b610ce0565b3480156104a557600080fd5b506103f36104b4366004613370565b601a6020526000908152604090205460ff1681565b3480156104d557600080fd5b5061041d6104e436600461338d565b610cf6565b3480156104f557600080fd5b506002545b6040519081526020016103ff565b34801561051457600080fd5b5061041d6105233660046133b4565b610d88565b34801561053457600080fd5b506103f36105433660046133d1565b610e9d565b34801561055457600080fd5b506104fa61056336600461338d565b60009081526005602052604090206001015490565b34801561058457600080fd5b5061041d610593366004613412565b610f47565b3480156105a457600080fd5b50604051601281526020016103ff565b3480156105c057600080fd5b5061041d6105cf366004613412565b610f71565b3480156105e057600080fd5b506103f36105ef366004613344565b610fef565b34801561060057600080fd5b5061041d61060f366004613370565b61102b565b34801561062057600080fd5b5061041d61062f36600461338d565b6110bf565b34801561064057600080fd5b50600a54610461906001600160a01b031681565b34801561066057600080fd5b5061041d61066f366004613370565b61114e565b34801561068057600080fd5b50600f546103f39060ff1681565b34801561069a57600080fd5b5061041d6106a9366004613442565b611231565b3480156106ba57600080fd5b506104fa60135481565b3480156106d057600080fd5b5061041d6106df366004613370565b6112d7565b3480156106f057600080fd5b506104fa60165481565b34801561070657600080fd5b506104fa60115481565b34801561071c57600080fd5b506104fa60075481565b34801561073257600080fd5b5061041d6107413660046134b7565b611398565b34801561075257600080fd5b506104fa60125481565b34801561076857600080fd5b50600f546103f39062010000900460ff1681565b34801561078857600080fd5b5061041d610797366004613442565b611446565b3480156107a857600080fd5b506104fa6107b7366004613370565b6114ec565b3480156107c857600080fd5b5061041d611507565b3480156107dd57600080fd5b5061041d6107ec3660046134d5565b611547565b3480156107fd57600080fd5b506103f361080c366004613503565b611619565b34801561081d57600080fd5b506104fa60065481565b34801561083357600080fd5b5061041d61185c565b34801561084857600080fd5b506103f3610857366004613412565b611928565b34801561086857600080fd5b50610434611953565b34801561087d57600080fd5b506104fa60175481565b34801561089357600080fd5b5061041d6108a2366004613370565b611962565b3480156108b357600080fd5b5061041d6108c23660046134d5565b6119f6565b3480156108d357600080fd5b506104fa600081565b3480156108e857600080fd5b5061041d611af4565b3480156108fd57600080fd5b506103f361090c366004613344565b611b37565b34801561091d57600080fd5b506103f361092c366004613344565b611bd0565b34801561093d57600080fd5b506103f361094c366004613370565b601b6020526000908152604090205460ff1681565b34801561096d57600080fd5b506104fa6000805160206138a183398151915281565b34801561098f57600080fd5b50600f546103f390610100900460ff1681565b3480156109ae57600080fd5b5061041d6109bd3660046134d5565b611bdd565b3480156109ce57600080fd5b506103f36109dd366004613370565b600e6020526000908152604090205460ff1681565b3480156109fe57600080fd5b506104fa60185481565b348015610a1457600080fd5b506015546103f39060ff1681565b348015610a2e57600080fd5b5061041d610a3d36600461338d565b611c70565b348015610a4e57600080fd5b5061041d610a5d366004613412565b611dc2565b348015610a6e57600080fd5b506104fa60105481565b348015610a8457600080fd5b5061041d610a93366004613370565b611de7565b348015610aa457600080fd5b506104fa610ab3366004613503565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aea57600080fd5b506104fa600b5481565b348015610b0057600080fd5b50600c54610461906001600160a01b031681565b348015610b2057600080fd5b506104fa60008051602061388183398151915281565b348015610b4257600080fd5b506104fa600d5481565b348015610b5857600080fd5b506104fa60085481565b348015610b6e57600080fd5b506104fa60145481565b348015610b8457600080fd5b5061041d611ea4565b60006001600160e01b03198216637965db0b60e01b1480610bbe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610bdc60008051602061388183398151915233611928565b610c015760405162461bcd60e51b8152600401610bf890613531565b60405180910390fd5b604051600090339047908381818185875af1925050503d8060008114610c43576040519150601f19603f3d011682016040523d82523d6000602084013e610c48565b606091505b50505050565b606060038054610c5d90613558565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8990613558565b8015610cd65780601f10610cab57610100808354040283529160200191610cd6565b820191906000526020600020905b815481529060010190602001808311610cb957829003601f168201915b5050505050905090565b6000610ced33848461239d565b50600192915050565b610d0e6000805160206138a183398151915233611928565b610d2a5760405162461bcd60e51b8152600401610bf890613592565b60138190556012819055600f811115610d855760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610bf8565b50565b610da06000805160206138a183398151915233611928565b610dbc5760405162461bcd60e51b8152600401610bf890613592565b600b54610dc8306114ec565b1015610e3e576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610bf8565b600a805460ff60a01b1916600160a01b179055610e5a816124c1565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a150565b6000610eaa848484612622565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f2f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bf8565b610f3c853385840361239d565b506001949350505050565b600082815260056020526040902060010154610f6281612c6d565b610f6c8383612c77565b505050565b6001600160a01b0381163314610fe15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610bf8565b610feb8282612cfd565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ced9185906110269086906135d6565b61239d565b61104360008051602061388183398151915233611928565b61105f5760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166110a75760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610bf8565b610d856000805160206138a183398151915282610f47565b6110d76000805160206138a183398151915233611928565b6110f35760405162461bcd60e51b8152600401610bf890613592565b60118190556010819055600c811115610d855760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313225206f72206c6573730000006044820152606401610bf8565b61116660008051602061388183398151915233611928565b6111825760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166111e75760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bf8565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6112496000805160206138a183398151915233611928565b6112655760405162461bcd60e51b8152600401610bf890613592565b60005b81811015610f6c576000600e6000858585818110611288576112886135e9565b905060200201602081019061129d9190613370565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112cf816135ff565b915050611268565b6112ef6000805160206138a183398151915233611928565b61130b5760405162461bcd60e51b8152600401610bf890613592565b6001600160a01b0381166000908152600e602052604090205460ff16156113745760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610bf8565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b6113b06000805160206138a183398151915233611928565b6113cc5760405162461bcd60e51b8152600401610bf890613592565b6000811161142f5760405162461bcd60e51b815260206004820152602a60248201527f4d61782073776170732070657220626c6f636b206d75737420626520677265616044820152690746572207468616e20360b41b6064820152608401610bf8565b6015805460ff191692151592909217909155601755565b61145e6000805160206138a183398151915233611928565b61147a5760405162461bcd60e51b8152600401610bf890613592565b60005b81811015610f6c576001600e600085858581811061149d5761149d6135e9565b90506020020160208101906114b29190613370565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114e4816135ff565b91505061147d565b6001600160a01b031660009081526020819052604090205490565b61151f60008051602061388183398151915233611928565b61153b5760405162461bcd60e51b8152600401610bf890613531565b600f805460ff19169055565b61155f60008051602061388183398151915233611928565b61157b5760405162461bcd60e51b8152600401610bf890613531565b806115ee57600a546001600160a01b03908116908316036115ee5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bf8565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b600061163360008051602061388183398151915233611928565b61164f5760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0383166116a55760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bf8565b6001600160a01b038316301415806116c55750600f54610100900460ff16155b61172e5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610bf8565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117999190613618565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613631565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6118746000805160206138a183398151915233611928565b6118905760405162461bcd60e51b8152600401610bf890613592565b600f54610100900460ff16156118e85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bf8565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610c5d90613558565b61197a60008051602061388183398151915233611928565b6119965760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166119de5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610bf8565b610d856000805160206138a183398151915282611dc2565b611a0e60008051602061388183398151915233611928565b611a2a5760405162461bcd60e51b8152600401610bf890613531565b600a546001600160a01b0390811690831603611aae5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bf8565b611ab88282612d64565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611b0c60008051602061388183398151915233611928565b611b285760405162461bcd60e51b8152600401610bf890613531565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bb95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bf8565b611bc6338585840361239d565b5060019392505050565b6000610ced338484612622565b611bf560008051602061388183398151915233611928565b611c115760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611c8860008051602061388183398151915233611928565b611ca45760405162461bcd60e51b8152600401610bf890613531565b620186a0611cb160025490565b611cbc90600161364e565b611cc69190613665565b811015611d335760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bf8565b6064611d3e60025490565b611d4990600161364e565b611d539190613665565b811115611dbd5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610bf8565b600b55565b600082815260056020526040902060010154611ddd81612c6d565b610f6c8383612cfd565b611dff6000805160206138a183398151915233611928565b611e1b5760405162461bcd60e51b8152600401610bf890613592565b6001600160a01b0381166000908152600e602052604090205460ff16611e835760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610bf8565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b611ebc60008051602061388183398151915233611928565b611ed85760405162461bcd60e51b8152600401610bf890613531565b600f54610100900460ff1615611f445760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610bf8565b600046600103611f695750737a250d5630b4cf539739df2c5dacb4c659f2488d612037565b4662aa36a703611f8e5750737a250d5630b4cf539739df2c5dacb4c659f2488d612037565b46603803611fb157507310ed43c718714eb63d5aa57b78b54704e256024e612037565b46606103611fd4575073d99d1c33f9fc3444f8101754abc46c52416550d1612037565b4661a4b103611ff85750731b02da8cb0d097eb8d57a175b88c7d8b47997506612037565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610bf8565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190613687565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a9190613687565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190613687565b600a80546001600160a01b0319166001600160a01b039290921691821790556121d5906001612d8e565b600a546121ec906001600160a01b03166001612d64565b600954612203906001600160a01b03166001612d8e565b60095461221a906001600160a01b03166001611bdd565b600047116122765760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610bf8565b6000612281306114ec565b116122dd5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610bf8565b6009546122f89030906001600160a01b0316611026826114ec565b6009546001600160a01b031663f305d7194730612314816114ec565b6040516001600160e01b031960e086901b1681526001600160a01b039092166004830152602482015260006044820181905260648201523360848201524260a482015260c40160606040518083038185885af1158015612378573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c4891906136a4565b6001600160a01b0383166123ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bf8565b6001600160a01b0382166124605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bf8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60165443146124d4574360165560006018555b60155460ff1680156124ea575060175460185410155b156124f25750565b60006124fd306114ec565b60145490915081158061250e575080155b1561251857505050565b821580156125325750600b5461252f90600f61364e565b82115b1561254857600b5461254590600f61364e565b91505b61255182612df1565b600060148190555060016018600082825461256c91906135d6565b9091555050600c546040516000916001600160a01b03169047908381818185875af1925050503d80600081146125be576040519150601f19603f3d011682016040523d82523d6000602084013e6125c3565b606091505b5050905080610c485760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220746f206f7065726174696f6e7320616464726573732066604482015264185a5b195960da1b6064820152608401610bf8565b6001600160a01b0383166126485760405162461bcd60e51b8152600401610bf8906136d2565b6001600160a01b03821661266e5760405162461bcd60e51b8152600401610bf890613717565b600081116126be5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bf8565b600f54610100900460ff16612756576001600160a01b03831660009081526019602052604090205460ff168061270c57506001600160a01b03821660009081526019602052604090205460ff165b6127515760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bf8565b6127bf565b6001600160a01b0383166000908152600e602052604090205460ff16156127bf5760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610bf8565b600f5460ff1615612a55576001600160a01b03821661dead148015906127fe57506001600160a01b03831660009081526019602052604090205460ff16155b801561282357506001600160a01b03821660009081526019602052604090205460ff16155b15612a55576001600160a01b0383166000908152601b602052604090205460ff16801561286957506001600160a01b0382166000908152601a602052604090205460ff16155b15612930576006548111156128d15760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bf8565b6008546128dd836114ec565b6128e790836135d6565b111561292b5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bf8565b612a55565b6001600160a01b0382166000908152601b602052604090205460ff16801561297157506001600160a01b0383166000908152601a602052604090205460ff16155b156129db5760075481111561292b5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bf8565b6001600160a01b0382166000908152601a602052604090205460ff16612a5557600854612a07836114ec565b612a1190836135d6565b1115612a555760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bf8565b6000612a60306114ec565b600b5490915081108015908190612a7f5750600f5462010000900460ff165b8015612a955750600a54600160a01b900460ff16155b8015612ab957506001600160a01b0384166000908152601b602052604090205460ff165b15612ae957600a805460ff60a01b1916600160a01b179055612adb60006124c1565b600a805460ff60a01b191690555b6001600160a01b03851660009081526019602052604090205460019060ff1680612b2b57506001600160a01b03851660009081526019602052604090205460ff165b15612b34575060005b60008115612c59576001600160a01b0386166000908152601b602052604090205460ff168015612b6657506000601254115b15612bbe57606460125486612b7b919061364e565b612b859190613665565b905060125460135482612b98919061364e565b612ba29190613665565b60146000828254612bb391906135d6565b90915550612c3b9050565b6001600160a01b0387166000908152601b602052604090205460ff168015612be857506000601054115b15612c3b57606460105486612bfd919061364e565b612c079190613665565b905060105460115482612c1a919061364e565b612c249190613665565b60146000828254612c3591906135d6565b90915550505b8015612c4c57612c4c873083612f4b565b612c56818661375a565b94505b612c64878787612f4b565b50505050505050565b610d8581336130a0565b612c818282611928565b610feb5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612cb93390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612d078282611928565b15610feb5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055611ab882825b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e2657612e266135e9565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea39190613687565b81600181518110612eb657612eb66135e9565b6001600160a01b039283166020918202929092010152600954612edc913091168461239d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f15908590600090869030904290600401613783565b600060405180830381600087803b158015612f2f57600080fd5b505af1158015612f43573d6000803e3d6000fd5b505050505050565b6001600160a01b038316612f715760405162461bcd60e51b8152600401610bf8906136d2565b6001600160a01b038216612f975760405162461bcd60e51b8152600401610bf890613717565b6001600160a01b0383166000908152602081905260409020548181101561300f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bf8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906130469084906135d6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161309291815260200190565b60405180910390a350505050565b6130aa8282611928565b610feb576130b7816130f9565b6130c283602061310b565b6040516020016130d39291906137f4565b60408051601f198184030181529082905262461bcd60e51b8252610bf8916004016132fc565b6060610bbe6001600160a01b03831660145b6060600061311a83600261364e565b6131259060026135d6565b67ffffffffffffffff81111561313d5761313d61376d565b6040519080825280601f01601f191660200182016040528015613167576020820181803683370190505b509050600360fc1b81600081518110613182576131826135e9565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131b1576131b16135e9565b60200101906001600160f81b031916908160001a90535060006131d584600261364e565b6131e09060016135d6565b90505b6001811115613258576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613214576132146135e9565b1a60f81b82828151811061322a5761322a6135e9565b60200101906001600160f81b031916908160001a90535060049490941c9361325181613869565b90506131e3565b5083156132a75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610bf8565b9392505050565b6000602082840312156132c057600080fd5b81356001600160e01b0319811681146132a757600080fd5b60005b838110156132f35781810151838201526020016132db565b50506000910152565b602081526000825180602084015261331b8160408501602087016132d8565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d8557600080fd5b6000806040838503121561335757600080fd5b82356133628161332f565b946020939093013593505050565b60006020828403121561338257600080fd5b81356132a78161332f565b60006020828403121561339f57600080fd5b5035919050565b8015158114610d8557600080fd5b6000602082840312156133c657600080fd5b81356132a7816133a6565b6000806000606084860312156133e657600080fd5b83356133f18161332f565b925060208401356134018161332f565b929592945050506040919091013590565b6000806040838503121561342557600080fd5b8235915060208301356134378161332f565b809150509250929050565b6000806020838503121561345557600080fd5b823567ffffffffffffffff8082111561346d57600080fd5b818501915085601f83011261348157600080fd5b81358181111561349057600080fd5b8660208260051b85010111156134a557600080fd5b60209290920196919550909350505050565b600080604083850312156134ca57600080fd5b8235613362816133a6565b600080604083850312156134e857600080fd5b82356134f38161332f565b91506020830135613437816133a6565b6000806040838503121561351657600080fd5b82356135218161332f565b915060208301356134378161332f565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b600181811c9082168061356c57607f821691505b60208210810361358c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bbe57610bbe6135c0565b634e487b7160e01b600052603260045260246000fd5b600060018201613611576136116135c0565b5060010190565b60006020828403121561362a57600080fd5b5051919050565b60006020828403121561364357600080fd5b81516132a7816133a6565b8082028115828204841417610bbe57610bbe6135c0565b60008261368257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561369957600080fd5b81516132a78161332f565b6000806000606084860312156136b957600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bbe57610bbe6135c0565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137d35784516001600160a01b0316835293830193918301916001016137ae565b50506001600160a01b03969096166060850152505050608001529392505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161382c8160178501602088016132d8565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161385d8160288401602088016132d8565b01602801949350505050565b600081613878576138786135c0565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a2646970667358221220f08f3486800e0f81aa4c7a85abcce8b50c6a80920c4398a4fc3d26c4b51b1a7064736f6c63430008130033241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80637571336a116101f2578063c02466681161010d578063dd62ed3e116100a0578063ee40166e1161006f578063ee40166e14610b36578063f8b45b0514610b4c578063fb002c9714610b62578063ff5d380714610b7857600080fd5b8063dd62ed3e14610a98578063e2f4560514610ade578063ea4cfe1214610af4578063ec87621c14610b1457600080fd5b8063d257b34f116100dc578063d257b34f14610a22578063d547741f14610a42578063d85ba06314610a62578063d86c9fec14610a7857600080fd5b8063c0246668146109a2578063c44a24dd146109c2578063c4c6571b146109f2578063cef3f88614610a0857600080fd5b80639a7a23d611610185578063a9059cbb11610154578063a9059cbb14610911578063b62496f514610931578063b65c5e8d14610961578063bbc0c7421461098357600080fd5b80639a7a23d6146108a7578063a217fddf146108c7578063a28e86d3146108dc578063a457c2d7146108f157600080fd5b806391d14854116101c157806391d148541461083c57806395d89b411461085c57806396792669146108715780639699a82d1461088757600080fd5b80637571336a146107d15780638366e79a146107f157806388e765ff146108115780638a8c523c1461082757600080fd5b8063436d3340116102e25780635a139dd4116102755780636ddd1713116102445780636ddd17131461075c5780636e55c13f1461077c57806370a082311461079c578063751039fc146107bc57600080fd5b80635a139dd4146106fa57806366d602ae14610710578063672fc7be146107265780636a486a8e1461074657600080fd5b80634be813e6116102b15780634be813e61461068e5780634f77f6c0146106ae57806357bd8bb3146106c4578063591f09eb146106e457600080fd5b8063436d334014610614578063452ed4f114610634578063499b8394146106545780634a62bb651461067457600080fd5b80631b1b6f741161035a578063313ce56711610329578063313ce5671461059857806336568abe146105b457806339509351146105d4578063410b2724146105f457600080fd5b80631b1b6f741461050857806323b872dd14610528578063248a9ca3146105485780632f2ff15d1461057857600080fd5b8063095ea7b311610396578063095ea7b31461047957806310d5de531461049957806312185a39146104c957806318160ddd146104e957600080fd5b806301ffc9a7146103d35780630614117a1461040857806306fdde031461041f5780630758d9241461044157600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132ae565b610b8d565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610bc4565b005b34801561042b57600080fd5b50610434610c4e565b6040516103ff91906132fc565b34801561044d57600080fd5b50600954610461906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561048557600080fd5b506103f3610494366004613344565b610ce0565b3480156104a557600080fd5b506103f36104b4366004613370565b601a6020526000908152604090205460ff1681565b3480156104d557600080fd5b5061041d6104e436600461338d565b610cf6565b3480156104f557600080fd5b506002545b6040519081526020016103ff565b34801561051457600080fd5b5061041d6105233660046133b4565b610d88565b34801561053457600080fd5b506103f36105433660046133d1565b610e9d565b34801561055457600080fd5b506104fa61056336600461338d565b60009081526005602052604090206001015490565b34801561058457600080fd5b5061041d610593366004613412565b610f47565b3480156105a457600080fd5b50604051601281526020016103ff565b3480156105c057600080fd5b5061041d6105cf366004613412565b610f71565b3480156105e057600080fd5b506103f36105ef366004613344565b610fef565b34801561060057600080fd5b5061041d61060f366004613370565b61102b565b34801561062057600080fd5b5061041d61062f36600461338d565b6110bf565b34801561064057600080fd5b50600a54610461906001600160a01b031681565b34801561066057600080fd5b5061041d61066f366004613370565b61114e565b34801561068057600080fd5b50600f546103f39060ff1681565b34801561069a57600080fd5b5061041d6106a9366004613442565b611231565b3480156106ba57600080fd5b506104fa60135481565b3480156106d057600080fd5b5061041d6106df366004613370565b6112d7565b3480156106f057600080fd5b506104fa60165481565b34801561070657600080fd5b506104fa60115481565b34801561071c57600080fd5b506104fa60075481565b34801561073257600080fd5b5061041d6107413660046134b7565b611398565b34801561075257600080fd5b506104fa60125481565b34801561076857600080fd5b50600f546103f39062010000900460ff1681565b34801561078857600080fd5b5061041d610797366004613442565b611446565b3480156107a857600080fd5b506104fa6107b7366004613370565b6114ec565b3480156107c857600080fd5b5061041d611507565b3480156107dd57600080fd5b5061041d6107ec3660046134d5565b611547565b3480156107fd57600080fd5b506103f361080c366004613503565b611619565b34801561081d57600080fd5b506104fa60065481565b34801561083357600080fd5b5061041d61185c565b34801561084857600080fd5b506103f3610857366004613412565b611928565b34801561086857600080fd5b50610434611953565b34801561087d57600080fd5b506104fa60175481565b34801561089357600080fd5b5061041d6108a2366004613370565b611962565b3480156108b357600080fd5b5061041d6108c23660046134d5565b6119f6565b3480156108d357600080fd5b506104fa600081565b3480156108e857600080fd5b5061041d611af4565b3480156108fd57600080fd5b506103f361090c366004613344565b611b37565b34801561091d57600080fd5b506103f361092c366004613344565b611bd0565b34801561093d57600080fd5b506103f361094c366004613370565b601b6020526000908152604090205460ff1681565b34801561096d57600080fd5b506104fa6000805160206138a183398151915281565b34801561098f57600080fd5b50600f546103f390610100900460ff1681565b3480156109ae57600080fd5b5061041d6109bd3660046134d5565b611bdd565b3480156109ce57600080fd5b506103f36109dd366004613370565b600e6020526000908152604090205460ff1681565b3480156109fe57600080fd5b506104fa60185481565b348015610a1457600080fd5b506015546103f39060ff1681565b348015610a2e57600080fd5b5061041d610a3d36600461338d565b611c70565b348015610a4e57600080fd5b5061041d610a5d366004613412565b611dc2565b348015610a6e57600080fd5b506104fa60105481565b348015610a8457600080fd5b5061041d610a93366004613370565b611de7565b348015610aa457600080fd5b506104fa610ab3366004613503565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aea57600080fd5b506104fa600b5481565b348015610b0057600080fd5b50600c54610461906001600160a01b031681565b348015610b2057600080fd5b506104fa60008051602061388183398151915281565b348015610b4257600080fd5b506104fa600d5481565b348015610b5857600080fd5b506104fa60085481565b348015610b6e57600080fd5b506104fa60145481565b348015610b8457600080fd5b5061041d611ea4565b60006001600160e01b03198216637965db0b60e01b1480610bbe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610bdc60008051602061388183398151915233611928565b610c015760405162461bcd60e51b8152600401610bf890613531565b60405180910390fd5b604051600090339047908381818185875af1925050503d8060008114610c43576040519150601f19603f3d011682016040523d82523d6000602084013e610c48565b606091505b50505050565b606060038054610c5d90613558565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8990613558565b8015610cd65780601f10610cab57610100808354040283529160200191610cd6565b820191906000526020600020905b815481529060010190602001808311610cb957829003601f168201915b5050505050905090565b6000610ced33848461239d565b50600192915050565b610d0e6000805160206138a183398151915233611928565b610d2a5760405162461bcd60e51b8152600401610bf890613592565b60138190556012819055600f811115610d855760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610bf8565b50565b610da06000805160206138a183398151915233611928565b610dbc5760405162461bcd60e51b8152600401610bf890613592565b600b54610dc8306114ec565b1015610e3e576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610bf8565b600a805460ff60a01b1916600160a01b179055610e5a816124c1565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a150565b6000610eaa848484612622565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f2f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bf8565b610f3c853385840361239d565b506001949350505050565b600082815260056020526040902060010154610f6281612c6d565b610f6c8383612c77565b505050565b6001600160a01b0381163314610fe15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610bf8565b610feb8282612cfd565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ced9185906110269086906135d6565b61239d565b61104360008051602061388183398151915233611928565b61105f5760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166110a75760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610bf8565b610d856000805160206138a183398151915282610f47565b6110d76000805160206138a183398151915233611928565b6110f35760405162461bcd60e51b8152600401610bf890613592565b60118190556010819055600c811115610d855760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313225206f72206c6573730000006044820152606401610bf8565b61116660008051602061388183398151915233611928565b6111825760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166111e75760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bf8565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6112496000805160206138a183398151915233611928565b6112655760405162461bcd60e51b8152600401610bf890613592565b60005b81811015610f6c576000600e6000858585818110611288576112886135e9565b905060200201602081019061129d9190613370565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112cf816135ff565b915050611268565b6112ef6000805160206138a183398151915233611928565b61130b5760405162461bcd60e51b8152600401610bf890613592565b6001600160a01b0381166000908152600e602052604090205460ff16156113745760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610bf8565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b6113b06000805160206138a183398151915233611928565b6113cc5760405162461bcd60e51b8152600401610bf890613592565b6000811161142f5760405162461bcd60e51b815260206004820152602a60248201527f4d61782073776170732070657220626c6f636b206d75737420626520677265616044820152690746572207468616e20360b41b6064820152608401610bf8565b6015805460ff191692151592909217909155601755565b61145e6000805160206138a183398151915233611928565b61147a5760405162461bcd60e51b8152600401610bf890613592565b60005b81811015610f6c576001600e600085858581811061149d5761149d6135e9565b90506020020160208101906114b29190613370565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114e4816135ff565b91505061147d565b6001600160a01b031660009081526020819052604090205490565b61151f60008051602061388183398151915233611928565b61153b5760405162461bcd60e51b8152600401610bf890613531565b600f805460ff19169055565b61155f60008051602061388183398151915233611928565b61157b5760405162461bcd60e51b8152600401610bf890613531565b806115ee57600a546001600160a01b03908116908316036115ee5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bf8565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b600061163360008051602061388183398151915233611928565b61164f5760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0383166116a55760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bf8565b6001600160a01b038316301415806116c55750600f54610100900460ff16155b61172e5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610bf8565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117999190613618565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613631565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6118746000805160206138a183398151915233611928565b6118905760405162461bcd60e51b8152600401610bf890613592565b600f54610100900460ff16156118e85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bf8565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610c5d90613558565b61197a60008051602061388183398151915233611928565b6119965760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166119de5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610bf8565b610d856000805160206138a183398151915282611dc2565b611a0e60008051602061388183398151915233611928565b611a2a5760405162461bcd60e51b8152600401610bf890613531565b600a546001600160a01b0390811690831603611aae5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bf8565b611ab88282612d64565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611b0c60008051602061388183398151915233611928565b611b285760405162461bcd60e51b8152600401610bf890613531565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bb95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bf8565b611bc6338585840361239d565b5060019392505050565b6000610ced338484612622565b611bf560008051602061388183398151915233611928565b611c115760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611c8860008051602061388183398151915233611928565b611ca45760405162461bcd60e51b8152600401610bf890613531565b620186a0611cb160025490565b611cbc90600161364e565b611cc69190613665565b811015611d335760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bf8565b6064611d3e60025490565b611d4990600161364e565b611d539190613665565b811115611dbd5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610bf8565b600b55565b600082815260056020526040902060010154611ddd81612c6d565b610f6c8383612cfd565b611dff6000805160206138a183398151915233611928565b611e1b5760405162461bcd60e51b8152600401610bf890613592565b6001600160a01b0381166000908152600e602052604090205460ff16611e835760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610bf8565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b611ebc60008051602061388183398151915233611928565b611ed85760405162461bcd60e51b8152600401610bf890613531565b600f54610100900460ff1615611f445760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610bf8565b600046600103611f695750737a250d5630b4cf539739df2c5dacb4c659f2488d612037565b4662aa36a703611f8e5750737a250d5630b4cf539739df2c5dacb4c659f2488d612037565b46603803611fb157507310ed43c718714eb63d5aa57b78b54704e256024e612037565b46606103611fd4575073d99d1c33f9fc3444f8101754abc46c52416550d1612037565b4661a4b103611ff85750731b02da8cb0d097eb8d57a175b88c7d8b47997506612037565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610bf8565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190613687565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a9190613687565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190613687565b600a80546001600160a01b0319166001600160a01b039290921691821790556121d5906001612d8e565b600a546121ec906001600160a01b03166001612d64565b600954612203906001600160a01b03166001612d8e565b60095461221a906001600160a01b03166001611bdd565b600047116122765760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610bf8565b6000612281306114ec565b116122dd5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610bf8565b6009546122f89030906001600160a01b0316611026826114ec565b6009546001600160a01b031663f305d7194730612314816114ec565b6040516001600160e01b031960e086901b1681526001600160a01b039092166004830152602482015260006044820181905260648201523360848201524260a482015260c40160606040518083038185885af1158015612378573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c4891906136a4565b6001600160a01b0383166123ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bf8565b6001600160a01b0382166124605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bf8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60165443146124d4574360165560006018555b60155460ff1680156124ea575060175460185410155b156124f25750565b60006124fd306114ec565b60145490915081158061250e575080155b1561251857505050565b821580156125325750600b5461252f90600f61364e565b82115b1561254857600b5461254590600f61364e565b91505b61255182612df1565b600060148190555060016018600082825461256c91906135d6565b9091555050600c546040516000916001600160a01b03169047908381818185875af1925050503d80600081146125be576040519150601f19603f3d011682016040523d82523d6000602084013e6125c3565b606091505b5050905080610c485760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220746f206f7065726174696f6e7320616464726573732066604482015264185a5b195960da1b6064820152608401610bf8565b6001600160a01b0383166126485760405162461bcd60e51b8152600401610bf8906136d2565b6001600160a01b03821661266e5760405162461bcd60e51b8152600401610bf890613717565b600081116126be5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bf8565b600f54610100900460ff16612756576001600160a01b03831660009081526019602052604090205460ff168061270c57506001600160a01b03821660009081526019602052604090205460ff165b6127515760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bf8565b6127bf565b6001600160a01b0383166000908152600e602052604090205460ff16156127bf5760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610bf8565b600f5460ff1615612a55576001600160a01b03821661dead148015906127fe57506001600160a01b03831660009081526019602052604090205460ff16155b801561282357506001600160a01b03821660009081526019602052604090205460ff16155b15612a55576001600160a01b0383166000908152601b602052604090205460ff16801561286957506001600160a01b0382166000908152601a602052604090205460ff16155b15612930576006548111156128d15760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bf8565b6008546128dd836114ec565b6128e790836135d6565b111561292b5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bf8565b612a55565b6001600160a01b0382166000908152601b602052604090205460ff16801561297157506001600160a01b0383166000908152601a602052604090205460ff16155b156129db5760075481111561292b5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bf8565b6001600160a01b0382166000908152601a602052604090205460ff16612a5557600854612a07836114ec565b612a1190836135d6565b1115612a555760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bf8565b6000612a60306114ec565b600b5490915081108015908190612a7f5750600f5462010000900460ff165b8015612a955750600a54600160a01b900460ff16155b8015612ab957506001600160a01b0384166000908152601b602052604090205460ff165b15612ae957600a805460ff60a01b1916600160a01b179055612adb60006124c1565b600a805460ff60a01b191690555b6001600160a01b03851660009081526019602052604090205460019060ff1680612b2b57506001600160a01b03851660009081526019602052604090205460ff165b15612b34575060005b60008115612c59576001600160a01b0386166000908152601b602052604090205460ff168015612b6657506000601254115b15612bbe57606460125486612b7b919061364e565b612b859190613665565b905060125460135482612b98919061364e565b612ba29190613665565b60146000828254612bb391906135d6565b90915550612c3b9050565b6001600160a01b0387166000908152601b602052604090205460ff168015612be857506000601054115b15612c3b57606460105486612bfd919061364e565b612c079190613665565b905060105460115482612c1a919061364e565b612c249190613665565b60146000828254612c3591906135d6565b90915550505b8015612c4c57612c4c873083612f4b565b612c56818661375a565b94505b612c64878787612f4b565b50505050505050565b610d8581336130a0565b612c818282611928565b610feb5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612cb93390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612d078282611928565b15610feb5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055611ab882825b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e2657612e266135e9565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea39190613687565b81600181518110612eb657612eb66135e9565b6001600160a01b039283166020918202929092010152600954612edc913091168461239d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f15908590600090869030904290600401613783565b600060405180830381600087803b158015612f2f57600080fd5b505af1158015612f43573d6000803e3d6000fd5b505050505050565b6001600160a01b038316612f715760405162461bcd60e51b8152600401610bf8906136d2565b6001600160a01b038216612f975760405162461bcd60e51b8152600401610bf890613717565b6001600160a01b0383166000908152602081905260409020548181101561300f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bf8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906130469084906135d6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161309291815260200190565b60405180910390a350505050565b6130aa8282611928565b610feb576130b7816130f9565b6130c283602061310b565b6040516020016130d39291906137f4565b60408051601f198184030181529082905262461bcd60e51b8252610bf8916004016132fc565b6060610bbe6001600160a01b03831660145b6060600061311a83600261364e565b6131259060026135d6565b67ffffffffffffffff81111561313d5761313d61376d565b6040519080825280601f01601f191660200182016040528015613167576020820181803683370190505b509050600360fc1b81600081518110613182576131826135e9565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131b1576131b16135e9565b60200101906001600160f81b031916908160001a90535060006131d584600261364e565b6131e09060016135d6565b90505b6001811115613258576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613214576132146135e9565b1a60f81b82828151811061322a5761322a6135e9565b60200101906001600160f81b031916908160001a90535060049490941c9361325181613869565b90506131e3565b5083156132a75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610bf8565b9392505050565b6000602082840312156132c057600080fd5b81356001600160e01b0319811681146132a757600080fd5b60005b838110156132f35781810151838201526020016132db565b50506000910152565b602081526000825180602084015261331b8160408501602087016132d8565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d8557600080fd5b6000806040838503121561335757600080fd5b82356133628161332f565b946020939093013593505050565b60006020828403121561338257600080fd5b81356132a78161332f565b60006020828403121561339f57600080fd5b5035919050565b8015158114610d8557600080fd5b6000602082840312156133c657600080fd5b81356132a7816133a6565b6000806000606084860312156133e657600080fd5b83356133f18161332f565b925060208401356134018161332f565b929592945050506040919091013590565b6000806040838503121561342557600080fd5b8235915060208301356134378161332f565b809150509250929050565b6000806020838503121561345557600080fd5b823567ffffffffffffffff8082111561346d57600080fd5b818501915085601f83011261348157600080fd5b81358181111561349057600080fd5b8660208260051b85010111156134a557600080fd5b60209290920196919550909350505050565b600080604083850312156134ca57600080fd5b8235613362816133a6565b600080604083850312156134e857600080fd5b82356134f38161332f565b91506020830135613437816133a6565b6000806040838503121561351657600080fd5b82356135218161332f565b915060208301356134378161332f565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b600181811c9082168061356c57607f821691505b60208210810361358c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bbe57610bbe6135c0565b634e487b7160e01b600052603260045260246000fd5b600060018201613611576136116135c0565b5060010190565b60006020828403121561362a57600080fd5b5051919050565b60006020828403121561364357600080fd5b81516132a7816133a6565b8082028115828204841417610bbe57610bbe6135c0565b60008261368257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561369957600080fd5b81516132a78161332f565b6000806000606084860312156136b957600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bbe57610bbe6135c0565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137d35784516001600160a01b0316835293830193918301916001016137ae565b50506001600160a01b03969096166060850152505050608001529392505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161382c8160178501602088016132d8565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161385d8160288401602088016132d8565b01602801949350505050565b600081613878576138786135c0565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a2646970667358221220f08f3486800e0f81aa4c7a85abcce8b50c6a80920c4398a4fc3d26c4b51b1a7064736f6c63430008130033

Deployed Bytecode Sourcemap

20683:16661:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11330:204;;;;;;;;;;-1:-1:-1;11330:204:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;11330:204:0;;;;;;;;34191:181;;;;;;;;;;;;;:::i;:::-;;15302:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20829:27::-;;;;;;;;;;-1:-1:-1;20829:27:0;;;;-1:-1:-1;;;;;20829:27:0;;;;;;-1:-1:-1;;;;;1336:32:1;;;1318:51;;1306:2;1291:18;20829:27:0;1153:222:1;16282:194:0;;;;;;;;;;-1:-1:-1;16282:194:0;;;;;:::i;:::-;;:::i;21811:63::-;;;;;;;;;;-1:-1:-1;21811:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26267:260;;;;;;;;;;-1:-1:-1;26267:260:0;;;;;:::i;:::-;;:::i;15623:108::-;;;;;;;;;;-1:-1:-1;15711:12:0;;15623:108;;;2419:25:1;;;2407:2;2392:18;15623:108:0;2273:177:1;36968:369:0;;;;;;;;;;-1:-1:-1;36968:369:0;;;;;:::i;:::-;;:::i;16484:529::-;;;;;;;;;;-1:-1:-1;16484:529:0;;;;;:::i;:::-;;:::i;12310:131::-;;;;;;;;;;-1:-1:-1;12310:131:0;;;;;:::i;:::-;12384:7;12411:12;;;:6;:12;;;;;:22;;;;12310:131;12449:147;;;;;;;;;;-1:-1:-1;12449:147:0;;;;;:::i;:::-;;:::i;15522:93::-;;;;;;;;;;-1:-1:-1;15522:93:0;;15605:2;4114:36:1;;4102:2;4087:18;15522:93:0;3972:184:1;12761:218:0;;;;;;;;;;-1:-1:-1;12761:218:0;;;;;:::i;:::-;;:::i;17021:290::-;;;;;;;;;;-1:-1:-1;17021:290:0;;;;;:::i;:::-;;:::i;24373:202::-;;;;;;;;;;-1:-1:-1;24373:202:0;;;;;:::i;:::-;;:::i;26004:255::-;;;;;;;;;;-1:-1:-1;26004:255:0;;;;;:::i;:::-;;:::i;20863:21::-;;;;;;;;;;-1:-1:-1;20863:21:0;;;;-1:-1:-1;;;;;20863:21:0;;;32781:352;;;;;;;;;;-1:-1:-1;32781:352:0;;;;;:::i;:::-;;:::i;21270:33::-;;;;;;;;;;-1:-1:-1;21270:33:0;;;;;;;;33956:221;;;;;;;;;;-1:-1:-1;33956:221:0;;;;;:::i;:::-;;:::i;21499:32::-;;;;;;;;;;;;;;;;33330:185;;;;;;;;;;-1:-1:-1;33330:185:0;;;;;:::i;:::-;;:::i;21628:28::-;;;;;;;;;;;;;;;;21424:31;;;;;;;;;;;;;;;;20761:28;;;;;;;;;;;;;;;;36702:258;;;;;;;;;;-1:-1:-1;36702:258:0;;;;;:::i;:::-;;:::i;21464:28::-;;;;;;;;;;;;;;;;21350:31;;;;;;;;;;-1:-1:-1;21350:31:0;;;;;;;;;;;33523:219;;;;;;;;;;-1:-1:-1;33523:219:0;;;;;:::i;:::-;;:::i;15739:143::-;;;;;;;;;;-1:-1:-1;15739:143:0;;;;;:::i;:::-;;:::i;33141:86::-;;;;;;;;;;;;;:::i;25041:338::-;;;;;;;;;;-1:-1:-1;25041:338:0;;;;;:::i;:::-;;:::i;32211:562::-;;;;;;;;;;-1:-1:-1;32211:562:0;;;;;:::i;:::-;;:::i;20727:27::-;;;;;;;;;;;;;;;;36430:258;;;;;;;;;;;;;:::i;11542:147::-;;;;;;;;;;-1:-1:-1;11542:147:0;;;;;:::i;:::-;;:::i;15410:104::-;;;;;;;;;;;;;:::i;21664:35::-;;;;;;;;;;;;;;;;24583:206;;;;;;;;;;-1:-1:-1;24583:206:0;;;;;:::i;:::-;;:::i;25631:357::-;;;;;;;;;;-1:-1:-1;25631:357:0;;;;;:::i;:::-;;:::i;11185:49::-;;;;;;;;;;-1:-1:-1;11185:49:0;11230:4;11185:49;;33235:87;;;;;;;;;;;;;:::i;17319:475::-;;;;;;;;;;-1:-1:-1;17319:475:0;;;;;:::i;:::-;;:::i;15890:200::-;;;;;;;;;;-1:-1:-1;15890:200:0;;;;;:::i;:::-;;:::i;21881:57::-;;;;;;;;;;-1:-1:-1;21881:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21172:85;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21172:85:0;;21310:33;;;;;;;;;;-1:-1:-1;21310:33:0;;;;;;;;;;;26978:184;;;;;;;;;;-1:-1:-1;26978:184:0;;;;;:::i;:::-;;:::i;21046:46::-;;;;;;;;;;-1:-1:-1;21046:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21707:33;;;;;;;;;;;;;;;;21583:38;;;;;;;;;;-1:-1:-1;21583:38:0;;;;;;;;26539:427;;;;;;;;;;-1:-1:-1;26539:427:0;;;;;:::i;:::-;;:::i;12604:149::-;;;;;;;;;;-1:-1:-1;12604:149:0;;;;;:::i;:::-;;:::i;21390:27::-;;;;;;;;;;;;;;;;33750:190;;;;;;;;;;-1:-1:-1;33750:190:0;;;;;:::i;:::-;;:::i;16098:176::-;;;;;;;;;;-1:-1:-1;16098:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;16239:18:0;;;16212:7;16239:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16098:176;20921:33;;;;;;;;;;;;;;;;20961:32;;;;;;;;;;-1:-1:-1;20961:32:0;;;;-1:-1:-1;;;;;20961:32:0;;;21101:64;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21101:64:0;;21002:37;;;;;;;;;;;;;;;;20796:24;;;;;;;;;;;;;;;;21540:34;;;;;;;;;;;;;;;;34386:2036;;;;;;;;;;;;;:::i;11330:204::-;11415:4;-1:-1:-1;;;;;;11439:47:0;;-1:-1:-1;;;11439:47:0;;:87;;-1:-1:-1;;;;;;;;;;941:40:0;;;11490:36;11432:94;11330:204;-1:-1:-1;;11330:204:0:o;34191:181::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;;;;;;;;;34282:82:::1;::::0;34245:12:::1;::::0;34290:10:::1;::::0;34314:21:::1;::::0;34245:12;34282:82;34245:12;34282:82;34314:21;34290:10;34282:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;34191:181:0:o;15302:100::-;15356:13;15389:5;15382:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15302:100;:::o;16282:194::-;16390:4;16407:39;409:10;16430:7;16439:6;16407:8;:39::i;:::-;-1:-1:-1;16464:4:0;16282:194;;;;:::o;26267:260::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;26369:17:::1;:34:::0;;;26414:13:::1;:33:::0;;;26483:2:::1;26466:19:::0;::::1;;26458:61;;;::::0;-1:-1:-1;;;26458:61:0;;7571:2:1;26458:61:0::1;::::0;::::1;7553:21:1::0;7610:2;7590:18;;;7583:30;7649:31;7629:18;;;7622:59;7698:18;;26458:61:0::1;7369:353:1::0;26458:61:0::1;26267:260:::0;:::o;36968:369::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;37090:18:::1;;37062:24;37080:4;37062:9;:24::i;:::-;:46;;37040:160;;;::::0;;-1:-1:-1;;;37040:160:0;;7929:2:1;37040:160:0::1;::::0;::::1;7911:21:1::0;7948:18;;;7941:30;;;;8007:34;7987:18;;;7980:62;8078:34;8058:18;;;8051:62;8130:19;;37040:160:0::1;7727:428:1::0;37040:160:0::1;37211:8;:15:::0;;-1:-1:-1;;;;37211:15:0::1;-1:-1:-1::0;;;37211:15:0::1;::::0;;37237:13:::1;37246:3:::0;37237:8:::1;:13::i;:::-;37261:8;:16:::0;;-1:-1:-1;;;;37261:16:0::1;::::0;;37293:36:::1;::::0;37313:15:::1;2419:25:1::0;;37293:36:0::1;::::0;2407:2:1;2392:18;37293:36:0::1;;;;;;;36968:369:::0;:::o;16484:529::-;16624:4;16641:36;16651:6;16659:9;16670:6;16641:9;:36::i;:::-;-1:-1:-1;;;;;16717:19:0;;16690:24;16717:19;;;:11;:19;;;;;;;;409:10;16717:33;;;;;;;;16783:26;;;;16761:116;;;;-1:-1:-1;;;16761:116:0;;8362:2:1;16761:116:0;;;8344:21:1;8401:2;8381:18;;;8374:30;8440:34;8420:18;;;8413:62;-1:-1:-1;;;8491:18:1;;;8484:38;8539:19;;16761:116:0;8160:404:1;16761:116:0;16913:57;16922:6;409:10;16963:6;16944:16;:25;16913:8;:57::i;:::-;-1:-1:-1;17001:4:0;;16484:529;-1:-1:-1;;;;16484:529:0:o;12449:147::-;12384:7;12411:12;;;:6;:12;;;;;:22;;;11286:16;11297:4;11286:10;:16::i;:::-;12563:25:::1;12574:4;12580:7;12563:10;:25::i;:::-;12449:147:::0;;;:::o;12761:218::-;-1:-1:-1;;;;;12857:23:0;;409:10;12857:23;12849:83;;;;-1:-1:-1;;;12849:83:0;;8771:2:1;12849:83:0;;;8753:21:1;8810:2;8790:18;;;8783:30;8849:34;8829:18;;;8822:62;-1:-1:-1;;;8900:18:1;;;8893:45;8955:19;;12849:83:0;8569:411:1;12849:83:0;12945:26;12957:4;12963:7;12945:11;:26::i;:::-;12761:218;;:::o;17021:290::-;409:10;17134:4;17223:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17223:34:0;;;;;;;;;;17134:4;;17151:130;;17201:7;;17223:47;;17260:10;;17223:47;:::i;:::-;17151:8;:130::i;24373:202::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24463:28:0;::::1;24455:56;;;::::0;-1:-1:-1;;;24455:56:0;;9449:2:1;24455:56:0::1;::::0;::::1;9431:21:1::0;9488:2;9468:18;;;9461:30;-1:-1:-1;;;9507:18:1;;;9500:45;9562:18;;24455:56:0::1;9247:339:1::0;24455:56:0::1;24522:45;-1:-1:-1::0;;;;;;;;;;;24552:14:0::1;24522:9;:45::i;26004:255::-:0;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;26105:16:::1;:33:::0;;;26149:12:::1;:31:::0;;;26215:2:::1;26199:18:::0;::::1;;26191:60;;;::::0;-1:-1:-1;;;26191:60:0;;9793:2:1;26191:60:0::1;::::0;::::1;9775:21:1::0;9832:2;9812:18;;;9805:30;9871:31;9851:18;;;9844:59;9920:18;;26191:60:0::1;9591:353:1::0;32781:352:0;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32909:32:0;::::1;32887:120;;;::::0;-1:-1:-1;;;32887:120:0;;10151:2:1;32887:120:0::1;::::0;::::1;10133:21:1::0;10190:2;10170:18;;;10163:30;10229:34;10209:18;;;10202:62;-1:-1:-1;;;10280:18:1;;;10273:36;10326:19;;32887:120:0::1;9949:402:1::0;32887:120:0::1;33018:17;:47:::0;;-1:-1:-1;;;;;;33018:47:0::1;-1:-1:-1::0;;;;;33018:47:0;::::1;::::0;;::::1;::::0;;;33081:44:::1;::::0;::::1;::::0;-1:-1:-1;;33081:44:0::1;32781:352:::0;:::o;33956:221::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;34069:9:::1;34064:106;34084:18:::0;;::::1;34064:106;;;34153:5;34124:14;:26;34139:7;;34147:1;34139:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34124:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34124:26:0;:34;;-1:-1:-1;;34124:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34104:3;::::1;::::0;::::1;:::i;:::-;;;;34064:106;;33330:185:::0;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33414:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;33413:23;33405:62;;;::::0;-1:-1:-1;;;33405:62:0;;10830:2:1;33405:62:0::1;::::0;::::1;10812:21:1::0;10869:2;10849:18;;;10842:30;10908:28;10888:18;;;10881:56;10954:18;;33405:62:0::1;10628:350:1::0;33405:62:0::1;-1:-1:-1::0;;;;;33478:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;33478:29:0::1;33503:4;33478:29;::::0;;33330:185::o;36702:258::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;36824:1:::1;36812:9;:13;36804:68;;;::::0;-1:-1:-1;;;36804:68:0;;11185:2:1;36804:68:0::1;::::0;::::1;11167:21:1::0;11224:2;11204:18;;;11197:30;11263:34;11243:18;;;11236:62;-1:-1:-1;;;11314:18:1;;;11307:40;11364:19;;36804:68:0::1;10983:406:1::0;36804:68:0::1;36883:19;:30:::0;;-1:-1:-1;;36883:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36924:16:::1;:28:::0;36702:258::o;33523:219::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;33635:9:::1;33630:105;33650:18:::0;;::::1;33630:105;;;33719:4;33690:14;:26;33705:7;;33713:1;33705:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33690:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;33690:26:0;:33;;-1:-1:-1;;33690:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33670:3;::::1;::::0;::::1;:::i;:::-;;;;33630:105;;15739:143:::0;-1:-1:-1;;;;;15856:18:0;15829:7;15856:18;;;;;;;;;;;;15739:143::o;33141:86::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;33197:14:::1;:22:::0;;-1:-1:-1;;33197:22:0::1;::::0;;33141:86::o;25041:338::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;25165:4:::1;25160:155;;25222:6;::::0;-1:-1:-1;;;;;25222:6:0;;::::1;25212:16:::0;;::::1;::::0;25186:117:::1;;;::::0;-1:-1:-1;;;25186:117:0;;11596:2:1;25186:117:0::1;::::0;::::1;11578:21:1::0;11635:2;11615:18;;;11608:30;11674:34;11654:18;;;11647:62;-1:-1:-1;;;11725:18:1;;;11718:37;11772:19;;25186:117:0::1;11394:403:1::0;25186:117:0::1;-1:-1:-1::0;;;;;25325:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25325:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25041:338::o;32211:562::-;32325:10;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32356:20:0;::::1;32348:59;;;::::0;-1:-1:-1;;;32348:59:0;;12004:2:1;32348:59:0::1;::::0;::::1;11986:21:1::0;12043:2;12023:18;;;12016:30;12082:28;12062:18;;;12055:56;12128:18;;32348:59:0::1;11802:350:1::0;32348:59:0::1;-1:-1:-1::0;;;;;32440:23:0;::::1;32458:4;32440:23;;::::0;:41:::1;;-1:-1:-1::0;32468:13:0::1;::::0;::::1;::::0;::::1;;;32467:14;32440:41;32418:143;;;::::0;-1:-1:-1;;;32418:143:0;;12359:2:1;32418:143:0::1;::::0;::::1;12341:21:1::0;12398:2;12378:18;;;12371:30;12437:34;12417:18;;;12410:62;-1:-1:-1;;;12488:18:1;;;12481:50;12548:19;;32418:143:0::1;12157:416:1::0;32418:143:0::1;32599:39;::::0;-1:-1:-1;;;32599:39:0;;32632:4:::1;32599:39;::::0;::::1;1318:51:1::0;32572:24:0::1;::::0;-1:-1:-1;;;;;32599:24:0;::::1;::::0;::::1;::::0;1291:18:1;;32599:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32657:46;::::0;-1:-1:-1;;;32657:46:0;;-1:-1:-1;;;;;12959:32:1;;;32657:46:0::1;::::0;::::1;12941:51:1::0;13008:18;;;13001:34;;;32572:66:0;;-1:-1:-1;32657:23:0;;::::1;::::0;::::1;::::0;12914:18:1;;32657:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32719;::::0;;-1:-1:-1;;;;;12959:32:1;;12941:51;;13023:2;13008:18;;13001:34;;;32649:54:0;;-1:-1:-1;32719:46:0::1;::::0;12914:18:1;32719:46:0::1;;;;;;;32337:436;32211:562:::0;;;;:::o;36430:258::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;36503:13:::1;::::0;::::1;::::0;::::1;;;36502:14;36494:50;;;::::0;-1:-1:-1;;;36494:50:0;;13498:2:1;36494:50:0::1;::::0;::::1;13480:21:1::0;13537:2;13517:18;;;13510:30;13576:25;13556:18;;;13549:53;13619:18;;36494:50:0::1;13296:347:1::0;36494:50:0::1;36555:13;:20:::0;;-1:-1:-1;;36586:18:0;;;;;36636:12:::1;36615:18;:33:::0;36664:16:::1;::::0;::::1;::::0;-1:-1:-1;;36664:16:0::1;36430:258::o:0;11542:147::-;11628:4;11652:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;11652:29:0;;;;;;;;;;;;;;;11542:147::o;15410:104::-;15466:13;15499:7;15492:14;;;;;:::i;24583:206::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24676:28:0;::::1;24668:56;;;::::0;-1:-1:-1;;;24668:56:0;;9449:2:1;24668:56:0::1;::::0;::::1;9431:21:1::0;9488:2;9468:18;;;9461:30;-1:-1:-1;;;9507:18:1;;;9500:45;9562:18;;24668:56:0::1;9247:339:1::0;24668:56:0::1;24735:46;-1:-1:-1::0;;;;;;;;;;;24766:14:0::1;24735:10;:46::i;25631:357::-:0;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;25781:6:::1;::::0;-1:-1:-1;;;;;25781:6:0;;::::1;25773:14:::0;;::::1;::::0;25751:121:::1;;;::::0;-1:-1:-1;;;25751:121:0;;13850:2:1;25751:121:0::1;::::0;::::1;13832:21:1::0;13889:2;13869:18;;;13862:30;13928:34;13908:18;;;13901:62;13999:27;13979:18;;;13972:55;14044:19;;25751:121:0::1;13648:421:1::0;25751:121:0::1;25883:41;25912:4;25918:5;25883:28;:41::i;:::-;25940:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;25940:40:0;::::1;::::0;::::1;::::0;;;::::1;25631:357:::0;;:::o;33235:87::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;33293:14:::1;:21:::0;;-1:-1:-1;;33293:21:0::1;33310:4;33293:21;::::0;;33235:87::o;17319:475::-;409:10;17437:4;17481:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17481:34:0;;;;;;;;;;17548:35;;;;17526:122;;;;-1:-1:-1;;;17526:122:0;;14276:2:1;17526:122:0;;;14258:21:1;14315:2;14295:18;;;14288:30;14354:34;14334:18;;;14327:62;-1:-1:-1;;;14405:18:1;;;14398:35;14450:19;;17526:122:0;14074:401:1;17526:122:0;17684:67;409:10;17707:7;17735:15;17716:16;:34;17684:8;:67::i;:::-;-1:-1:-1;17782:4:0;;17319:475;-1:-1:-1;;;17319:475:0:o;15890:200::-;16001:4;16018:42;409:10;16042:9;16053:6;16018:9;:42::i;26978:184::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27065:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;27065:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27120:34;;445:41:1;;;27120:34:0::1;::::0;418:18:1;27120:34:0::1;;;;;;;26978:184:::0;;:::o;26539:427::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;26681:6:::1;26660:13;15711:12:::0;;;15623:108;26660:13:::1;:17;::::0;26676:1:::1;26660:17;:::i;:::-;26659:28;;;;:::i;:::-;26646:9;:41;;26624:144;;;::::0;-1:-1:-1;;;26624:144:0;;15077:2:1;26624:144:0::1;::::0;::::1;15059:21:1::0;15116:2;15096:18;;;15089:30;15155:34;15135:18;;;15128:62;-1:-1:-1;;;15206:18:1;;;15199:51;15267:19;;26624:144:0::1;14875:417:1::0;26624:144:0::1;26836:3;26815:13;15711:12:::0;;;15623:108;26815:13:::1;:17;::::0;26831:1:::1;26815:17;:::i;:::-;26814:25;;;;:::i;:::-;26801:9;:38;;26779:138;;;::::0;-1:-1:-1;;;26779:138:0;;15499:2:1;26779:138:0::1;::::0;::::1;15481:21:1::0;15538:2;15518:18;;;15511:30;15577:34;15557:18;;;15550:62;-1:-1:-1;;;15628:18:1;;;15621:48;15686:19;;26779:138:0::1;15297:414:1::0;26779:138:0::1;26928:18;:30:::0;26539:427::o;12604:149::-;12384:7;12411:12;;;:6;:12;;;;;:22;;;11286:16;11297:4;11286:10;:16::i;:::-;12719:26:::1;12731:4;12737:7;12719:11;:26::i;33750:190::-:0;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33835:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;33827:64;;;::::0;-1:-1:-1;;;33827:64:0;;15918:2:1;33827:64:0::1;::::0;::::1;15900:21:1::0;15957:2;15937:18;;;15930:30;15996:31;15976:18;;;15969:59;16045:18;;33827:64:0::1;15716:353:1::0;33827:64:0::1;-1:-1:-1::0;;;;;33902:22:0::1;33927:5;33902:22:::0;;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;33902:30:0::1;::::0;;33750:190::o;34386:2036::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;34449:13:::1;::::0;::::1;::::0;::::1;;;34448:14;34440:70;;;::::0;-1:-1:-1;;;34440:70:0;;16276:2:1;34440:70:0::1;::::0;::::1;16258:21:1::0;16315:2;16295:18;;;16288:30;16354:34;16334:18;;;16327:62;-1:-1:-1;;;16405:18:1;;;16398:41;16456:19;;34440:70:0::1;16074:407:1::0;34440:70:0::1;34528:18;34563:13;34580:1;34563:18:::0;34559:730:::1;;-1:-1:-1::0;34611:42:0::1;34559:730;;;34694:13;34711:8;34694:25:::0;34690:599:::1;;-1:-1:-1::0;34749:42:0::1;34690:599;;;34829:13;34846:2;34829:19:::0;34825:464:::1;;-1:-1:-1::0;34878:42:0::1;34825:464;;;34963:13;34980:2;34963:19:::0;34959:330:::1;;-1:-1:-1::0;35012:42:0::1;34959:330;;;35097:13;35114:5;35097:22:::0;35093:196:::1;;-1:-1:-1::0;35149:42:0::1;35093:196;;;35247:30;::::0;-1:-1:-1;;;35247:30:0;;16688:2:1;35247:30:0::1;::::0;::::1;16670:21:1::0;16727:2;16707:18;;;16700:30;-1:-1:-1;;;16746:18:1;;;16739:50;16806:18;;35247:30:0::1;16486:344:1::0;35093:196:0::1;35331:9;:34:::0;;-1:-1:-1;;;;;;35331:34:0::1;-1:-1:-1::0;;;;;35331:34:0;::::1;::::0;;::::1;::::0;;;35431:19:::1;::::0;;-1:-1:-1;;;35431:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;35331:34;35431:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35419:43:0::1;;35485:4;35505:9;;;;;;;;;-1:-1:-1::0;;;;;35505:9:0::1;-1:-1:-1::0;;;;;35505:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35419:113;::::0;-1:-1:-1;;;;;;35419:113:0::1;::::0;;;;;;-1:-1:-1;;;;;17321:15:1;;;35419:113:0::1;::::0;::::1;17303:34:1::0;17373:15;;17353:18;;;17346:43;17238:18;;35419:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35410:6;:122:::0;;-1:-1:-1;;;;;;35410:122:0::1;-1:-1:-1::0;;;;;35410:122:0;;;::::1;::::0;;::::1;::::0;;35545:49:::1;::::0;-1:-1:-1;35545:26:0::1;:49::i;:::-;35642:6;::::0;35605:51:::1;::::0;-1:-1:-1;;;;;35642:6:0::1;::::0;35605:28:::1;:51::i;:::-;35712:9;::::0;35677:52:::1;::::0;-1:-1:-1;;;;;35712:9:0::1;::::0;35677:26:::1;:52::i;:::-;35764:9;::::0;35740:41:::1;::::0;-1:-1:-1;;;;;35764:9:0::1;::::0;35740:15:::1;:41::i;:::-;35842:1;35818:21;:25;35796:110;;;::::0;-1:-1:-1;;;35796:110:0;;17602:2:1;35796:110:0::1;::::0;::::1;17584:21:1::0;17641:2;17621:18;;;17614:30;17680:34;17660:18;;;17653:62;-1:-1:-1;;;17731:18:1;;;17724:33;17774:19;;35796:110:0::1;17400:399:1::0;35796:110:0::1;35966:1;35939:24;35957:4;35939:9;:24::i;:::-;:28;35917:116;;;::::0;-1:-1:-1;;;35917:116:0;;18006:2:1;35917:116:0::1;::::0;::::1;17988:21:1::0;18045:2;18025:18;;;18018:30;18084:34;18064:18;;;18057:62;-1:-1:-1;;;18135:18:1;;;18128:36;18181:19;;35917:116:0::1;17804:402:1::0;35917:116:0::1;36089:9;::::0;36057:69:::1;::::0;36074:4:::1;::::0;-1:-1:-1;;;;;36089:9:0::1;36101:24;36074:4:::0;36101:9:::1;:24::i;36057:69::-;36139:9;::::0;-1:-1:-1;;;;;36139:9:0::1;:25;36172:21;36217:4;36237:24;36217:4:::0;36237:9:::1;:24::i;:::-;36139:274;::::0;-1:-1:-1;;;;;;36139:274:0::1;::::0;;;;;;-1:-1:-1;;;;;18570:15:1;;;36139:274:0::1;::::0;::::1;18552:34:1::0;18602:18;;;18595:34;36276:1:0::1;18645:18:1::0;;;18638:34;;;18688:18;;;18681:34;36362:10:0::1;18731:19:1::0;;;18724:44;36387:15:0::1;18784:19:1::0;;;18777:35;18486:19;;36139:274:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18785:380::-:0;-1:-1:-1;;;;;18921:19:0;;18913:68;;;;-1:-1:-1;;;18913:68:0;;19336:2:1;18913:68:0;;;19318:21:1;19375:2;19355:18;;;19348:30;19414:34;19394:18;;;19387:62;-1:-1:-1;;;19465:18:1;;;19458:34;19509:19;;18913:68:0;19134:400:1;18913:68:0;-1:-1:-1;;;;;19000:21:0;;18992:68;;;;-1:-1:-1;;;18992:68:0;;19741:2:1;18992:68:0;;;19723:21:1;19780:2;19760:18;;;19753:30;19819:34;19799:18;;;19792:62;-1:-1:-1;;;19870:18:1;;;19863:32;19912:19;;18992:68:0;19539:398:1;18992:68:0;-1:-1:-1;;;;;19073:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19125:32;;2419:25:1;;;19125:32:0;;2392:18:1;19125:32:0;;;;;;;18785:380;;;:::o;31244:959::-;31313:13;;31297:12;:29;31293:123;;31359:12;31343:13;:28;31403:1;31386:14;:18;31293:123;31432:19;;;;:57;;;;;31473:16;;31455:14;;:34;;31432:57;31428:96;;;31244:959;:::o;31428:96::-;31544:23;31570:24;31588:4;31570:9;:24::i;:::-;31633:19;;31544:50;;-1:-1:-1;31669:20:0;;;:46;;-1:-1:-1;31693:22:0;;31669:46;31665:85;;;31732:7;;31244:959;:::o;31665:85::-;31767:3;31766:4;:51;;;;-1:-1:-1;31793:18:0;;:23;;31814:2;31793:23;:::i;:::-;31775:15;:41;31766:51;31762:125;;;31852:18;;:23;;31873:2;31852:23;:::i;:::-;31834:41;;31762:125;31899:33;31916:15;31899:16;:33::i;:::-;31967:1;31945:19;:23;;;;31999:1;31981:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;32044:17:0;;32036:89;;32018:12;;-1:-1:-1;;;;;32044:17:0;;32089:21;;32018:12;32036:89;32018:12;32036:89;32089:21;32044:17;32036:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32017:108;;;32146:7;32138:57;;;;-1:-1:-1;;;32138:57:0;;20144:2:1;32138:57:0;;;20126:21:1;20183:2;20163:18;;;20156:30;20222:34;20202:18;;;20195:62;-1:-1:-1;;;20273:18:1;;;20266:35;20318:19;;32138:57:0;19942:401:1;27170:3487:0;-1:-1:-1;;;;;27302:18:0;;27294:68;;;;-1:-1:-1;;;27294:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27381:16:0;;27373:64;;;;-1:-1:-1;;;27373:64:0;;;;;;;:::i;:::-;27465:1;27456:6;:10;27448:52;;;;-1:-1:-1;;;27448:52:0;;21360:2:1;27448:52:0;;;21342:21:1;21399:2;21379:18;;;21372:30;21438:31;21418:18;;;21411:59;21487:18;;27448:52:0;21158:353:1;27448:52:0;27518:13;;;;;;;27513:329;;-1:-1:-1;;;;;27574:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27603:23:0;;;;;;:19;:23;;;;;;;;27574:52;27548:136;;;;-1:-1:-1;;;27548:136:0;;21718:2:1;27548:136:0;;;21700:21:1;21757:2;21737:18;;;21730:30;-1:-1:-1;;;21776:18:1;;;21769:52;21838:18;;27548:136:0;21516:346:1;27548:136:0;27513:329;;;-1:-1:-1;;;;;27744:20:0;;;;;;:14;:20;;;;;;;;27743:21;27717:113;;;;-1:-1:-1;;;27717:113:0;;22069:2:1;27717:113:0;;;22051:21:1;22108:2;22088:18;;;22081:30;22147:32;22127:18;;;22120:60;22197:18;;27717:113:0;21867:354:1;27717:113:0;27858:14;;;;27854:1348;;;-1:-1:-1;;;;;27893:21:0;;27907:6;27893:21;;;;:68;;-1:-1:-1;;;;;;27936:25:0;;;;;;:19;:25;;;;;;;;27935:26;27893:68;:113;;;;-1:-1:-1;;;;;;27983:23:0;;;;;;:19;:23;;;;;;;;27982:24;27893:113;27889:1302;;;-1:-1:-1;;;;;28095:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;28152:35:0;;;;;;:31;:35;;;;;;;;28151:36;28095:92;28069:1107;;;28274:12;;28264:6;:22;;28230:148;;;;-1:-1:-1;;;28230:148:0;;22428:2:1;28230:148:0;;;22410:21:1;22467:2;22447:18;;;22440:30;22506:34;22486:18;;;22479:62;-1:-1:-1;;;22557:18:1;;;22550:38;22605:19;;28230:148:0;22226:404:1;28230:148:0;28461:9;;28444:13;28454:2;28444:9;:13::i;:::-;28435:22;;:6;:22;:::i;:::-;:35;;28401:140;;;;-1:-1:-1;;;28401:140:0;;22837:2:1;28401:140:0;;;22819:21:1;22876:2;22856:18;;;22849:30;-1:-1:-1;;;22895:18:1;;;22888:49;22954:18;;28401:140:0;22635:343:1;28401:140:0;28069:1107;;;-1:-1:-1;;;;;28639:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;28694:37:0;;;;;;:31;:37;;;;;;;;28693:38;28639:92;28613:563;;;28818:13;;28808:6;:23;;28774:151;;;;-1:-1:-1;;;28774:151:0;;23185:2:1;28774:151:0;;;23167:21:1;23224:2;23204:18;;;23197:30;23263:34;23243:18;;;23236:62;-1:-1:-1;;;23314:18:1;;;23307:40;23364:19;;28774:151:0;22983:406:1;28613:563:0;-1:-1:-1;;;;;28956:35:0;;;;;;:31;:35;;;;;;;;28951:225;;29076:9;;29059:13;29069:2;29059:9;:13::i;:::-;29050:22;;:6;:22;:::i;:::-;:35;;29016:140;;;;-1:-1:-1;;;29016:140:0;;22837:2:1;29016:140:0;;;22819:21:1;22876:2;22856:18;;;22849:30;-1:-1:-1;;;22895:18:1;;;22888:49;22954:18;;29016:140:0;22635:343:1;29016:140:0;29214:28;29245:24;29263:4;29245:9;:24::i;:::-;29321:18;;29214:55;;-1:-1:-1;29297:42:0;;;;;;;29370:22;;-1:-1:-1;29381:11:0;;;;;;;29370:22;:35;;;;-1:-1:-1;29397:8:0;;-1:-1:-1;;;29397:8:0;;;;29396:9;29370:35;:68;;;;-1:-1:-1;;;;;;29409:29:0;;;;;;:25;:29;;;;;;;;29370:68;29352:201;;;29465:8;:15;;-1:-1:-1;;;;29465:15:0;-1:-1:-1;;;29465:15:0;;;29495;29465;29495:8;:15::i;:::-;29525:8;:16;;-1:-1:-1;;;;29525:16:0;;;29352:201;-1:-1:-1;;;;;29684:25:0;;29565:12;29684:25;;;:19;:25;;;;;;29580:4;;29684:25;;;:52;;-1:-1:-1;;;;;;29713:23:0;;;;;;:19;:23;;;;;;;;29684:52;29680:100;;;-1:-1:-1;29763:5:0;29680:100;29792:12;29897:7;29893:711;;;-1:-1:-1;;;;;29953:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;30002:1;29986:13;;:17;29953:50;29949:506;;;30058:3;30041:13;;30032:6;:22;;;;:::i;:::-;30031:30;;;;:::i;:::-;30024:37;;30174:13;;30132:17;;30125:4;:24;;;;:::i;:::-;30124:63;;;;:::i;:::-;30080:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;29949:506:0;;-1:-1:-1;29949:506:0;;-1:-1:-1;;;;;30249:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;30299:1;30284:12;;:16;30249:51;30245:210;;;30354:3;30338:12;;30329:6;:21;;;;:::i;:::-;30328:29;;;;:::i;:::-;30321:36;;30427:12;;30407:16;;30400:4;:23;;;;:::i;:::-;30399:40;;;;:::i;:::-;30376:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30245:210:0;30475:8;;30471:91;;30504:42;30520:4;30534;30541;30504:15;:42::i;:::-;30578:14;30588:4;30578:14;;:::i;:::-;;;29893:711;30616:33;30632:4;30638:2;30642:6;30616:15;:33::i;:::-;27283:3374;;;;27170:3487;;;:::o;11697:105::-;11764:30;11775:4;409:10;11764;:30::i;13366:238::-;13450:22;13458:4;13464:7;13450;:22::i;:::-;13445:152;;13489:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13489:29:0;;;;;;;;;:36;;-1:-1:-1;;13489:36:0;13521:4;13489:36;;;13572:12;409:10;;329:98;13572:12;-1:-1:-1;;;;;13545:40:0;13563:7;-1:-1:-1;;;;;13545:40:0;13557:4;13545:40;;;;;;;;;;13366:238;;:::o;13612:239::-;13696:22;13704:4;13710:7;13696;:22::i;:::-;13692:152;;;13767:5;13735:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13735:29:0;;;;;;;;;;:37;;-1:-1:-1;;13735:37:0;;;13792:40;409:10;;13735:12;;13792:40;;13767:5;13792:40;13612:239;;:::o;25387:236::-;-1:-1:-1;;;;;25470:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25470:39:0;;;;;;;25520;25470:31;:39;24801:232;-1:-1:-1;;;;;24914:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;24914:52:0;;;;;;;;;;24982:43;;23695:51:1;;;23762:18;;;23755:50;24982:43:0;;23668:18:1;24982:43:0;;;;;;;24801:232;;:::o;30665:571::-;30815:16;;;30829:1;30815:16;;;;;;;;30791:21;;30815:16;;;;;;;;;;-1:-1:-1;30815:16:0;30791:40;;30860:4;30842;30847:1;30842:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30842:23:0;;;:7;;;;;;;;;;:23;;;;30886:9;;:16;;;-1:-1:-1;;;30886:16:0;;;;:9;;;;;:14;;:16;;;;;30842:7;;30886:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30876:4;30881:1;30876:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30876:26:0;;;:7;;;;;;;;;:26;30947:9;;30915:56;;30932:4;;30947:9;30959:11;30915:8;:56::i;:::-;31010:9;;:218;;-1:-1:-1;;;31010:218:0;;-1:-1:-1;;;;;31010:9:0;;;;:60;;:218;;31085:11;;31010:9;;31155:4;;31182;;31202:15;;31010:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30720:516;30665:571;:::o;17802:651::-;-1:-1:-1;;;;;17942:20:0;;17934:70;;;;-1:-1:-1;;;17934:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18023:23:0;;18015:71;;;;-1:-1:-1;;;18015:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18123:17:0;;18099:21;18123:17;;;;;;;;;;;18173:23;;;;18151:111;;;;-1:-1:-1;;;18151:111:0;;25135:2:1;18151:111:0;;;25117:21:1;25174:2;25154:18;;;25147:30;25213:34;25193:18;;;25186:62;-1:-1:-1;;;25264:18:1;;;25257:36;25310:19;;18151:111:0;24933:402:1;18151:111:0;-1:-1:-1;;;;;18298:17:0;;;:9;:17;;;;;;;;;;;18318:22;;;18298:42;;18362:20;;;;;;;;:30;;18334:6;;18298:9;18362:30;;18334:6;;18362:30;:::i;:::-;;;;;;;;18427:9;-1:-1:-1;;;;;18410:35:0;18419:6;-1:-1:-1;;;;;18410:35:0;;18438:6;18410:35;;;;2419:25:1;;2407:2;2392:18;;2273:177;18410:35:0;;;;;;;;17923:530;17802:651;;;:::o;11810:492::-;11899:22;11907:4;11913:7;11899;:22::i;:::-;11894:401;;12087:28;12107:7;12087:19;:28::i;:::-;12188:38;12216:4;12223:2;12188:19;:38::i;:::-;11992:257;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11992:257:0;;;;;;;;;;-1:-1:-1;;;11938:345:0;;;;;;;:::i;10644:151::-;10702:13;10735:52;-1:-1:-1;;;;;10747:22:0;;9181:2;10189:447;10264:13;10290:19;10322:10;10326:6;10322:1;:10;:::i;:::-;:14;;10335:1;10322:14;:::i;:::-;10312:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10312:25:0;;10290:47;;-1:-1:-1;;;10348:6:0;10355:1;10348:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10348:15:0;;;;;;;;;-1:-1:-1;;;10374:6:0;10381:1;10374:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10374:15:0;;;;;;;;-1:-1:-1;10405:9:0;10417:10;10421:6;10417:1;:10;:::i;:::-;:14;;10430:1;10417:14;:::i;:::-;10405:26;;10400:131;10437:1;10433;:5;10400:131;;;-1:-1:-1;;;10481:5:0;10489:3;10481:11;10472:21;;;;;;;:::i;:::-;;;;10460:6;10467:1;10460:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;10460:33:0;;;;;;;;-1:-1:-1;10518:1:0;10508:11;;;;;10440:3;;;:::i;:::-;;;10400:131;;;-1:-1:-1;10549:10:0;;10541:55;;;;-1:-1:-1;;;10541:55:0;;26500:2:1;10541:55:0;;;26482:21:1;;;26519:18;;;26512:30;26578:34;26558:18;;;26551:62;26630:18;;10541:55:0;26298:356:1;10541:55:0;10621:6;10189:447;-1:-1:-1;;;10189: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;2088:180::-;2147:6;2200:2;2188:9;2179:7;2175:23;2171:32;2168:52;;;2216:1;2213;2206:12;2168:52;-1:-1:-1;2239:23:1;;2088:180;-1:-1:-1;2088:180:1:o;2455:118::-;2541:5;2534:13;2527:21;2520:5;2517:32;2507:60;;2563:1;2560;2553:12;2578:241;2634:6;2687:2;2675:9;2666:7;2662:23;2658:32;2655:52;;;2703:1;2700;2693:12;2655:52;2742:9;2729:23;2761:28;2783:5;2761:28;:::i;2824:456::-;2901:6;2909;2917;2970:2;2958:9;2949:7;2945:23;2941:32;2938:52;;;2986:1;2983;2976:12;2938:52;3025:9;3012:23;3044:31;3069:5;3044:31;:::i;:::-;3094:5;-1:-1:-1;3151:2:1;3136:18;;3123:32;3164:33;3123:32;3164:33;:::i;:::-;2824:456;;3216:7;;-1:-1:-1;;;3270:2:1;3255:18;;;;3242:32;;2824:456::o;3652:315::-;3720:6;3728;3781:2;3769:9;3760:7;3756:23;3752:32;3749:52;;;3797:1;3794;3787:12;3749:52;3833:9;3820:23;3810:33;;3893:2;3882:9;3878:18;3865:32;3906:31;3931:5;3906:31;:::i;:::-;3956:5;3946:15;;;3652:315;;;;;:::o;4369:615::-;4455:6;4463;4516:2;4504:9;4495:7;4491:23;4487:32;4484:52;;;4532:1;4529;4522:12;4484:52;4572:9;4559:23;4601:18;4642:2;4634:6;4631:14;4628:34;;;4658:1;4655;4648:12;4628:34;4696:6;4685:9;4681:22;4671:32;;4741:7;4734:4;4730:2;4726:13;4722:27;4712:55;;4763:1;4760;4753:12;4712:55;4803:2;4790:16;4829:2;4821:6;4818:14;4815:34;;;4845:1;4842;4835:12;4815:34;4898:7;4893:2;4883:6;4880:1;4876:14;4872:2;4868:23;4864:32;4861:45;4858:65;;;4919:1;4916;4909:12;4858:65;4950:2;4942:11;;;;;4972:6;;-1:-1:-1;4369:615:1;;-1:-1:-1;;;;4369:615:1:o;4989:309::-;5054:6;5062;5115:2;5103:9;5094:7;5090:23;5086:32;5083:52;;;5131:1;5128;5121:12;5083:52;5170:9;5157:23;5189:28;5211:5;5189:28;:::i;5303:382::-;5368:6;5376;5429:2;5417:9;5408:7;5404:23;5400:32;5397:52;;;5445:1;5442;5435:12;5397:52;5484:9;5471:23;5503:31;5528:5;5503:31;:::i;:::-;5553:5;-1:-1:-1;5610:2:1;5595:18;;5582:32;5623:30;5582:32;5623:30;:::i;5690:388::-;5758:6;5766;5819:2;5807:9;5798:7;5794:23;5790:32;5787:52;;;5835:1;5832;5825:12;5787:52;5874:9;5861:23;5893:31;5918:5;5893:31;:::i;:::-;5943:5;-1:-1:-1;6000:2:1;5985:18;;5972:32;6013:33;5972:32;6013:33;:::i;6083:337::-;6285:2;6267:21;;;6324:2;6304:18;;;6297:30;-1:-1:-1;;;6358:2:1;6343:18;;6336:43;6411:2;6396:18;;6083:337::o;6635:380::-;6714:1;6710:12;;;;6757;;;6778:61;;6832:4;6824:6;6820:17;6810:27;;6778:61;6885:2;6877:6;6874:14;6854:18;6851:38;6848:161;;6931:10;6926:3;6922:20;6919:1;6912:31;6966:4;6963:1;6956:15;6994:4;6991:1;6984:15;6848:161;;6635:380;;;:::o;7020:344::-;7222:2;7204:21;;;7261:2;7241:18;;;7234:30;-1:-1:-1;;;7295:2:1;7280:18;;7273:50;7355:2;7340:18;;7020:344::o;8985:127::-;9046:10;9041:3;9037:20;9034:1;9027:31;9077:4;9074:1;9067:15;9101:4;9098:1;9091:15;9117:125;9182:9;;;9203:10;;;9200:36;;;9216:18;;:::i;10356:127::-;10417:10;10412:3;10408:20;10405:1;10398:31;10448:4;10445:1;10438:15;10472:4;10469:1;10462:15;10488:135;10527:3;10548:17;;;10545:43;;10568:18;;:::i;:::-;-1:-1:-1;10615:1:1;10604:13;;10488:135::o;12578:184::-;12648:6;12701:2;12689:9;12680:7;12676:23;12672:32;12669:52;;;12717:1;12714;12707:12;12669:52;-1:-1:-1;12740:16:1;;12578:184;-1:-1:-1;12578:184:1:o;13046:245::-;13113:6;13166:2;13154:9;13145:7;13141:23;13137:32;13134:52;;;13182:1;13179;13172:12;13134:52;13214:9;13208:16;13233:28;13255:5;13233:28;:::i;14480:168::-;14553:9;;;14584;;14601:15;;;14595:22;;14581:37;14571:71;;14622:18;;:::i;14653:217::-;14693:1;14719;14709:132;;14763:10;14758:3;14754:20;14751:1;14744:31;14798:4;14795:1;14788:15;14826:4;14823:1;14816:15;14709:132;-1:-1:-1;14855:9:1;;14653:217::o;16835:251::-;16905:6;16958:2;16946:9;16937:7;16933:23;16929:32;16926:52;;;16974:1;16971;16964:12;16926:52;17006:9;17000:16;17025:31;17050:5;17025:31;:::i;18823:306::-;18911:6;18919;18927;18980:2;18968:9;18959:7;18955:23;18951:32;18948:52;;;18996:1;18993;18986:12;18948:52;19025:9;19019:16;19009:26;;19075:2;19064:9;19060:18;19054:25;19044:35;;19119:2;19108:9;19104:18;19098:25;19088:35;;18823:306;;;;;:::o;20348:401::-;20550:2;20532:21;;;20589:2;20569:18;;;20562:30;20628:34;20623:2;20608:18;;20601:62;-1:-1:-1;;;20694:2:1;20679:18;;20672:35;20739:3;20724:19;;20348:401::o;20754:399::-;20956:2;20938:21;;;20995:2;20975:18;;;20968:30;21034:34;21029:2;21014:18;;21007:62;-1:-1:-1;;;21100:2:1;21085:18;;21078:33;21143:3;21128:19;;20754:399::o;23394:128::-;23461:9;;;23482:11;;;23479:37;;;23496:18;;:::i;23816:127::-;23877:10;23872:3;23868:20;23865:1;23858:31;23908:4;23905:1;23898:15;23932:4;23929:1;23922:15;23948:980;24210:4;24258:3;24247:9;24243:19;24289:6;24278:9;24271:25;24315:2;24353:6;24348:2;24337:9;24333:18;24326:34;24396:3;24391:2;24380:9;24376:18;24369:31;24420:6;24455;24449:13;24486:6;24478;24471:22;24524:3;24513:9;24509:19;24502:26;;24563:2;24555:6;24551:15;24537:29;;24584:1;24594:195;24608:6;24605:1;24602:13;24594:195;;;24673:13;;-1:-1:-1;;;;;24669:39:1;24657:52;;24764:15;;;;24729:12;;;;24705:1;24623:9;24594:195;;;-1:-1:-1;;;;;;;24845:32:1;;;;24840:2;24825:18;;24818:60;-1:-1:-1;;;24909:3:1;24894:19;24887:35;24806:3;23948:980;-1:-1:-1;;;23948:980:1:o;25340:812::-;25751:25;25746:3;25739:38;25721:3;25806:6;25800:13;25822:75;25890:6;25885:2;25880:3;25876:12;25869:4;25861:6;25857:17;25822:75;:::i;:::-;-1:-1:-1;;;25956:2:1;25916:16;;;25948:11;;;25941:40;26006:13;;26028:76;26006:13;26090:2;26082:11;;26075:4;26063:17;;26028:76;:::i;:::-;26124:17;26143:2;26120:26;;25340:812;-1:-1:-1;;;;25340:812:1:o;26157:136::-;26196:3;26224:5;26214:39;;26233:18;;:::i;:::-;-1:-1:-1;;;26269:18:1;;26157:136::o

Swarm Source

ipfs://f08f3486800e0f81aa4c7a85abcce8b50c6a80920c4398a4fc3d26c4b51b1a70

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.